在Linux系统中部署Oracle数据库后,手动启动服务不仅步骤繁琐,系统重启后还需要重新执行一系列命令,不利于业务的稳定运行。建立标准的Oracle系统服务并配置开机自启动,可以让数据库随系统启动自动运行,大幅降低运维成本。

环境准备与前置说明
本文操作基于Oracle 19c版本,Linux系统为CentOS 7及以上发行版,其他版本操作逻辑类似,仅需调整服务管理命令即可。操作前需要确认Oracle已经成功安装,且ORACLE_HOME、ORACLE_SID等环境变量配置正确,数据库实例可以正常手动启动。
编写Oracle服务启动脚本
首先需要编写Oracle服务的启动、停止、重启脚本,后续会将这个脚本注册为系统服务。脚本需要兼容系统服务的调用规范,接收start、stop、restart等参数。
#!/bin/bash
# Oracle服务管理脚本
# 配置Oracle环境变量
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.3.0/dbhome_1
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH
# 获取操作参数
case "$1" in
start)
echo "启动Oracle服务..."
# 启动监听
lsnrctl start
# 启动数据库实例
sqlplus / as sysdba <<EOF
startup;
exit;
EOF
echo "Oracle服务启动完成"
;;
stop)
echo "停止Oracle服务..."
# 停止数据库实例
sqlplus / as sysdba <<EOF
shutdown immediate;
exit;
EOF
# 停止监听
lsnrctl stop
echo "Oracle服务停止完成"
;;
restart)
$0 stop
$0 start
;;
*)
echo "用法: $0 {start|stop|restart}"
exit 1
;;
esac
exit 0将脚本保存为/usr/local/bin/oracle_service.sh,然后赋予执行权限:
chmod +x /usr/local/bin/oracle_service.sh
注册Oracle为系统服务
CentOS 7及以上版本使用systemd管理服务,需要编写对应的service配置文件。如果是CentOS 6等使用init的系统,可以编写init脚本放到/etc/init.d/目录下,本文以systemd为例说明。
创建服务配置文件/usr/lib/systemd/system/oracle.service,内容如下:
[Unit] Description=Oracle Database Service After=network.target [Service] Type=forking User=oracle Group=oinstall ExecStart=/usr/local/bin/oracle_service.sh start ExecStop=/usr/local/bin/oracle_service.sh stop ExecReload=/usr/local/bin/oracle_service.sh restart Restart=on-failure [Install] WantedBy=multi-user.target
配置文件说明:
- After=network.target:确保网络服务启动后再启动Oracle,避免监听启动失败
- User=oracle:指定以oracle用户运行服务,符合Oracle安装的用户权限要求
- WantedBy=multi-user.target:设置服务在系统多用户模式下启动,对应开机自启动的场景
配置开机自启动
完成服务注册后,需要重载systemd配置,然后设置开机自启动并启动服务:
# 重载systemd配置 systemctl daemon-reload # 设置Oracle服务开机自启动 systemctl enable oracle.service # 启动Oracle服务 systemctl start oracle.service # 查看服务状态 systemctl status oracle.service
如果服务状态显示active (running),说明Oracle服务已经成功启动。此时重启Linux系统,Oracle数据库会自动随系统启动,无需手动执行启动命令。
常见问题排查
如果服务启动失败,可以通过以下方式排查:
- 查看服务日志:
journalctl -u oracle.service -xe,定位具体错误原因 - 检查脚本权限:确保oracle用户有执行
oracle_service.sh的权限 - 验证环境变量:手动切换到oracle用户,执行
echo $ORACLE_HOME确认环境变量配置正确 - 检查监听配置:执行
lsnrctl status确认监听配置正常,端口没有被占用
按照以上步骤操作,就可以在Linux下完成Oracle服务的建立与开机自启动配置,让数据库运维更加便捷高效。