第一步:修改 /etc/oratab 文件
这是 Oracle 自带的服务管理脚本(dbstart)读取配置的关键文件。
- 使用 root 用户编辑文件:
vi /etc/oratab
- 找到对应数据库实例的行。格式通常为:
ORACLE_SID:ORACLE_HOME:N
*例如:*
orcl:/u01/app/oracle/product/19.3.0/dbhome_1:N
- 将最后的
N(No) 改为Y(Yes),表示允许开机启动。
orcl:/u01/app/oracle/product/19.3.0/dbhome_1:Y
- 保存并退出 (
:wq)。
第二步:创建 systemd 服务文件
我们需要创建一个服务单元文件,让 systemd 来管理 Oracle 数据库和监听器。
- 创建服务文件:
vi /etc/systemd/system/oracle-rdbms.service
- 写入以下内容(注意:请务必修改
User、Group、ORACLE_HOME和ORACLE_SID为您的实际配置):
[Unit]
Description=Oracle Database Service
# 依赖网络和远程文件系统(如NFS),确保网络就绪后再启动
After=network-online.target remote-fs.target
Wants=network-online.target
[Service]
Type=forking
# 运行 Oracle 的操作系统用户
User=oracle
Group=oinstall
# 定义环境变量(请根据实际路径修改)
Environment="ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1"
Environment="ORACLE_SID=orcl"
Environment="PATH=/usr/local/bin:$ORACLE_HOME/bin:$PATH"
Environment="LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH"
# 启动命令:使用 dbstart 启动所有在 oratab 中标记为 Y 的实例和监听器
# 参数 $ORACLE_HOME
ExecStart=/u01/app/oracle/product/19.3.0/dbhome_1/bin/dbstart /u01/app/oracle/product/19.3.0/dbhome_1
# 停止命令:使用 dbshut 停止
ExecStop=/u01/app/oracle/product/19.3.0/dbhome_1/bin/dbshut /u01/app/oracle/product/19.3.0/dbhome_1
# 重启策略:如果服务意外退出,不自动重启(避免数据损坏风险,数据库通常有自我保护机制)
Restart=no
# 安全加固设置(可选,防止服务获得过多权限)
# PrivateTmp=yes
[Install]
# 设置为多用户模式下启动
WantedBy=multi-user.target
- 保存并退出。
第三步:重载 systemd 并启用服务
- 通知 systemd 重新加载配置文件:
systemctl daemon-reload
- 设置开机自启动:
systemctl enable oracle-rdbms.service
- 手动启动服务以测试配置是否正确:
systemctl start oracle-rdbms.service
注意:如果启动失败,请查看日志 journalctl -xe 或检查路径权限。
- 检查服务状态:
systemctl status oracle-rdbms.service
第四步:验证自启动
最稳妥的验证方式是重启操作系统:
reboot
重启后,以 root 用户登录,检查服务状态和数据库进程:
# 检查 systemd 服务状态
systemctl status oracle-rdbm
# 检查 Oracle 进程是否存在
ps -ef | grep smon
# 或者切换到 oracle 用户查询
su - oracle -c "sqlplus / as sysdba"
浙公网安备 33010602011771号