oracle在linux上默认不自启动,必须同时配置oratab(设y)、修复dbstart/dbshut中oracle_home_listner变量、创建systemd服务(type=forking、显式environment、user=oracle/group=oinstall),三者缺一不可。

Oracle 在 Linux 上默认不自启动,必须显式配置 oratab + 启动脚本 + 系统服务三者协同,缺一不可。只改 oratab 或只加 rc.local 都会失败。
确认 oratab 中的 Y 标志是否生效
oratab 不是启动命令,只是 dbstart 的开关文件。它只决定“要不要启动这个实例”,不负责“怎么启动”。
- 用 root 打开
/etc/oratab,找到对应实例行,确保第三字段是Y(不是y或空格):例如orcl:/u01/app/oracle/product/19c/dbhome_1:Y - 若 Oracle 安装路径含空格或特殊字符,
dbstart会解析失败——必须用无空格路径,否则改用 systemd 方式绕过该限制 -
dbstart只读取第一列($ORACLE_SID)和第二列($ORACLE_HOME),第三列以外的内容会被忽略
修复 dbstart/dbshut 中 ORACLE_HOME_LISTNER 变量
常见报错 ORACLE_HOME_LISTNER is not SET, unable to auto-start Oracle Net Listener 就源于此。
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
- 以 oracle 用户身份编辑
$ORACLE_HOME/bin/dbstart和$ORACLE_HOME/bin/dbshut - 找到类似
ORACLE_HOME_LISTNER=$1的赋值行,改为ORACLE_HOME_LISTNER=$ORACLE_HOME - 确保
$ORACLE_HOME在 oracle 用户 shell 中已正确设置(echo $ORACLE_HOME应输出路径) - 测试手动执行:
su - oracle -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME",成功才继续
用 systemd 替代 rc.local(CentOS7+/RHEL8+ 必选)
rc.local 在新版 systemd 系统中默认不启用、无超时控制、环境变量缺失,极易静默失败。
- 创建服务文件:
/etc/systemd/system/oracle-19c.service -
Type=forking必须设置,因为dbstart启动后立即返回,但监听器和实例仍在后台运行 -
User=oracle和Group=oinstall缺一不可;仅设User会导致权限不足,无法写日志或访问监听套接字 -
Environment必须显式声明ORACLE_HOME、ORACLE_SID、PATH,systemd 不继承用户 profile
验证监听器与实例是否真被拉起
启动服务后不能只看 systemctl status oracle-19c 显示 active,要确认实际进程存在。
- 检查监听器:
sudo -u oracle lsnrctl status,输出中需含STATUS: READY - 检查实例:
sudo -u oracle sqlplus / as sysdba ,返回 <code>OPEN - 查进程:
ps -u oracle -o pid,comm,args | grep -E '(ora_|tnslsnr)',应有tnslsnr和多个ora_*进程 - 注意:
dbstart成功但实例未 open,大概率是spfile中startup mount或 PDB 未自动打开,需额外配置alter pluggable database all open并存入 startup trigger
最易被忽略的是:systemd 服务启动时 oracle 用户的 $PATH 极简,sqlplus 或 lsnrctl 找不到;还有 oratab 行末换行符损坏导致 dbstart 解析失败——建议用 dos2unix /etc/oratab 清理。










