Linux下设置CDB/PDB 环境的Oracle19c开机启动
首先确定手工能够启动:
进入Linux 的oracle账号
sqlplus / as sysdba登录 执行startup
可以正常启动的话,再执行
SELECT status FROM v$instance;
可以查到cbd状态
设置开机启动方法:
- 要“开机就自动启动”,需要做两件事:
- 让 Linux 启动时自动跑 Oracle 的启动脚本(用 systemd + dbstart)。
- 让 CDB/PDB 启动后,PDB 也自动打开(用
ALTER PLUGGABLE DATABASE ... SAVE STATE)。
第一步:配置 /etc/oratab,告诉 Oracle 哪些实例要自动启动
1. 查看 oratab
cat /etc/oratab
这部可能会报错cat: /etc/oratab: No such file or directory,说明
安装时漏执行了 root.sh
以 root 身份:ls -l $ORACLE_HOME/root.sh
如果这个脚本本身就存在,说明安装过程确实准备执行 root.sh,只是没被执行。
补执行 root.sh
以root身份执行$ORACLE_HOME/root.sh
检查cat /etc/oratab,如果没有自己的实例启动的配置,需要在最后添一下,示例如下:
orclcdb:/u01/app/oracle/product/19c/dbhome_1:Y
第 1 段:ORACLE_SID
第 2 段:ORACLE_HOME
第 3 段:Y 表示允许 dbstart 自动启动该实例。
第二步 创建systemd服务
1.确认 dbstart / dbshut 是否存在:
ls -l $ORACLE_HOME/bin/dbstart
ls -l $ORACLE_HOME/bin/dbshut
这两个脚本是 Oracle 自带的,用来根据 /etc/oratab 启动/关闭实例。
2.创建文件/etc/systemd/system/oracle-db.service
[Unit] Description=Oracle Database 19c (ORCLCDB) After=network.target [Service] Type=forking # 直接用绝对路径,不再依赖 $ORACLE_HOME 变量 ExecStart=/opt/oracle/product/19c/dbhome_1/bin/dbstart /opt/oracle/product/19c/dbhome_1 ExecStop=/opt/oracle/product/19c/dbhome_1/bin/dbshut /opt/oracle/product/19c/dbhome_1 User=oracle Group=oinstall LimitMEMLOCK=infinity LimitNOFILE=65535 RemainAfterExit=yes [Install] WantedBy=multi-user.target
重新加载并启动
sudo systemctl daemon-reload
sudo systemctl enable oracle-db
sudo systemctl start oracle-db
sudo systemctl status oracle-db
如果之前服务是 failed,start 前可以先 reset-failed:
sudo systemctl reset-failed oracle-db
sudo systemctl start oracle-db
注意:关于监听的自启动
dbstart 已经负责启动监听
Oracle 官方文档说明:用 dbstart / dbshut 做自动启停时,这两个脚本会根据 /etc/oratab 启动/关闭对应实例,同时也会启动/关闭监听,不用单独写监听自启动脚本
第三步 验证
无论用哪种方式,启动后检查:
ps -ef | grep smon
能看到:
oracle XXXX 1 10:38 ? 00:00:00 ora_smon_ORCLCDB
就说明实例已经随 systemd 起来了。
关于PDB的自启动,见上一篇博文

浙公网安备 33010602011771号