在Linux服务器环境中,Oracle数据库默认不会随系统开机自动启动,每次服务器重启都需要手动执行启动命令,对于需要长期稳定运行的业务系统来说非常不便。配置Oracle开机自启动可以减少人工干预,保障数据库服务的连续性。

前置准备
配置自启动前需要确认以下信息:
- Oracle数据库安装路径,通常为
/u01/app/oracle/product/19.3.0/dbhome_1,具体路径需根据实际安装情况调整 - Oracle数据库实例名,可通过
echo $ORACLE_SID命令查看 - 服务器操作系统版本,确认是采用systemd管理服务的新版本系统,还是使用rc_local的传统版本系统
- 拥有root用户权限以及oracle用户权限
方案一:使用rc_local配置自启动(适配CentOS 6及更早版本)
步骤1:编辑rc_local文件
使用root用户编辑/etc/rc.d/rc.local文件,添加Oracle启动相关命令:
# 切换到oracle用户执行启动命令 su - oracle -c "export ORACLE_SID=orcl;export ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1;$ORACLE_HOME/bin/sqlplus / as sysdba <<EOF startup; exit; EOF" # 启动监听 su - oracle -c "export ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1;$ORACLE_HOME/bin/lsnrctl start"
步骤2:赋予rc_local执行权限
传统版本的rc_local文件默认可能没有执行权限,需要手动添加:
chmod +x /etc/rc.d/rc.local
方案二:使用systemd配置自启动(适配CentOS 7、Ubuntu 16.04及更高版本)
步骤1:创建systemd服务文件
在/etc/systemd/system/目录下创建oracle.service文件,内容如下:
[Unit] Description=Oracle Database Service After=network.target [Service] Type=forking User=oracle Group=oinstall Environment="ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1" Environment="ORACLE_SID=orcl" ExecStart=/u01/app/oracle/product/19.3.0/dbhome_1/bin/dbstart $ORACLE_HOME ExecStop=/u01/app/oracle/product/19.3.0/dbhome_1/bin/dbshut $ORACLE_HOME Restart=on-failure [Install] WantedBy=multi-user.target
步骤2:修改Oracle配置文件
编辑$ORACLE_HOME/bin/dbstart文件,找到ORACLE_HOME_LISTNER所在行,修改为:
ORACLE_HOME_LISTNER=$ORACLE_HOME
同时编辑/etc/oratab文件,将实例名所在行的最后一个字段由N改为Y,示例如下:
orcl:/u01/app/oracle/product/19.3.0/dbhome_1:Y
步骤3:启用并验证服务
执行以下命令启用服务并设置开机自启动:
# 重新加载systemd配置 systemctl daemon-reload # 启用oracle服务 systemctl enable oracle.service # 启动服务验证配置是否正确 systemctl start oracle.service # 查看服务状态 systemctl status oracle.service
配置验证
重启Linux服务器后,登录系统执行以下命令验证Oracle是否自动启动:
# 切换到oracle用户 su - oracle # 登录数据库查看实例状态 sqlplus / as sysdba # 执行以下SQL查询实例状态 select status from v$instance;
如果返回结果为OPEN,说明Oracle数据库已经成功随系统开机自启动。
注意事项
- 配置过程中涉及的环境变量路径、实例名需要根据实际部署情况调整,错误的路径会导致启动失败
- 如果使用systemd方案,需要确保oracle用户对
$ORACLE_HOME目录有读写执行权限 - 若服务器同时部署多个Oracle实例,需要为每个实例单独配置启动命令或systemd服务单元
- 修改rc_local文件时,避免添加与Oracle启动无关的冗余命令,防止启动流程异常