oracle 19c 在 centos 上无法靠默认配置开机自启,必须显式配置 /etc/oratab(将实例行末尾 n 改为 y 并设 chmod 644)、systemd 服务(含 user=oracle、environment=oracle_home、type=oneshot 等关键项)及启动脚本权限,否则 dbstart 静默失败、监听器无响应、实例不启动。

Oracle 19c 在 CentOS 上无法靠默认配置开机自启,必须显式配置启动顺序、环境变量和权限,否则 dbstart 会静默失败,lsnrctl 启动后监听器无响应,数据库实例根本不会起来。
修改 /etc/oratab 启用实例识别
这是整个自启动链的起点,dbstart 唯一依赖此文件判断是否要启动某个实例。不改这里,后续所有操作都无效。
- 用
vi /etc/oratab找到你的实例行,例如ORCL:/u01/app/oracle/product/19.3.0/dbhome_1:N - 把末尾的
N改成Y,变成ORCL:/u01/app/oracle/product/19.3.0/dbhome_1:Y - 路径必须与实际
$ORACLE_HOME完全一致:大小写敏感、结尾不能多斜杠(如/dbhome_1/错)、也不能少(如/dbhome_1对) - 改完执行
chmod 644 /etc/oratab(不是 755,否则dbstart会因安全策略跳过该行)
用 systemd 管理服务(CentOS 7+ 推荐)
直接往 /etc/rc.d/rc.local 里写 su - oracle -c ... 在 CentOS 7+ 上不可靠:systemd 不保证 rc.local 执行时机,且 oracle 用户的环境变量在非交互 shell 中常加载不全。
- 创建启动脚本
/usr/bin/oracle19c.sh,内容为:#!/bin/bash /u01/app/oracle/product/19.3.0/dbhome_1/bin/lsnrctl start /u01/app/oracle/product/19.3.0/dbhome_1/bin/dbstart /u01/app/oracle/product/19.3.0/dbhome_1
- 给脚本加执行权限:
chmod +x /usr/bin/oracle19c.sh - 创建 service 文件
/etc/systemd/system/oracle19c.service,关键字段必须包含:-
User=oracle(不能是 root) -
Environment="ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1"(显式声明,不依赖 .bash_profile) -
Type=oneshot和RemainAfterExit=yes(否则 systemd 会认为服务已退出并 kill 进程)
-
- 启用服务:
systemctl daemon-reload && systemctl enable oracle19c
常见静默失败原因和验证点
即使脚本执行无报错,数据库也可能没真正起来——因为错误被吞掉了,或只启动了监听器。
-
systemctl status oracle19c显示 active,但ps -ef | grep pmon没有进程 → 检查/u01/app/oracle/product/19.3.0/dbhome_1/bin/dbstart是否能手动执行成功;常见原因是ORACLE_HOME路径写错,或/etc/oratab权限不对(644 被误设为 755) -
lsnrctl status报TNS-12541: TNS:no listener→ 监听器没启动,检查脚本中lsnrctl start前是否漏了cd $ORACLE_HOME?不需要,lsnrctl自带路径处理,但必须确保ORACLE_HOME环境变量生效(systemd 的Environment字段必须存在) - 重启后
sqlplus / as sysdba连不上 → 先确认监听器已运行,再查tail -n 20 $ORACLE_BASE/diag/rdbms/<sid>/<sid>/trace/alert_<sid>.log</sid></sid></sid>,看是否有 ORA-01078 或 LRM-00109 错误,大概率是dbstart读不到$ORACLE_HOME/dbs/init<sid>.ora</sid>或 spfile 路径不对
最易被忽略的是:systemd 服务默认不等待 dbstart 完全结束就标记为 active,而 Oracle 实例启动可能耗时 30 秒以上。不要仅凭 systemctl status 判断成功,必须人工验证 pmon 进程和 sqlplus 连通性。











