前言
由于虚拟机偶尔会出现服务器重启的问题,所以上面的Oracle数据库会受到影响而无法在服务器重启后正常恢复服务,每次都手工重启又十分麻烦,从数据库服务的稳定性考虑设置Oracle数据库的自动重启就十分有必要了。
(一)Oracle数据库的自动重启
方式1:通过/etc/rc.local
文件来进行
以 root 用户登录,编辑/etc/rc.d/rc.local
文件,添加以下内容:
# 下面的路径需要根据具体的Oracle_Home进行调整
su oracle -lc "=/oracle/home/bin/dbstart"
方式2:创建 Oracle 实例服务配置文件(推荐)
以 root 用户登录,创建/usr/lib/systemd/system/lsnrctl.service
文件,内容如下:
注意,下面的/oracle/home
需要替换为实际的ORACLE_HOME
路径。
[Unit]
Description=Oracle Database Service
After=network.target
[Service]
Type=forking
User=oracle
Group=oinstall
ExecStart=/oracle/home/bin/dbstart /oracle/home
ExecStop=/oracle/home/bin/dbshut /oracle/home
TimeoutStopSec=5min
Restart=on-failure
[Install]
WantedBy=multi-user.target
执行以下命令重新加载服务配置文件并设置开机自启:
# 重新加载服务配置文件
systemctl daemon-reload
systemctl enable oracle.service
关于多租户模式的处理
1、手工模式
若数据库为多租户模式(即启用了PDB数据库),那么默认情况下Oracle实例重启完成后,对应的PBD数据库状态为MOUNT状态,需要人工启动PDB数据库才能恢复使用。
-- 方式1:在容器数据库中执行以下SQL,pdb1 为具体的PDB数据库名称
ALTER PLUGGABLE DATABASE pdb1 OPEN;
-- 方式2:切换到pdb数据库中再打开数据库,pdb1 为具体的PDB数据库名称
alter session set container=pdb1;
alter database open;
2、手工模式
Oracle 12.1.0.2之前,CDB启动后,所有的PDB都处于加载状态(MOUNTED)。CDB启动时,没有默认机制自动启动PDB。只能通过在CDB上建立一个系统触发器来自动启动部分或所有PDB,如下所示:
CREATE OR REPLACE TRIGGER open_pdbs
AFTER STARTUP ON DATABASE
BEGIN
EXECUTE IMMEDIATE 'ALTER PLUGGABLE DATABASE ALL OPEN';
END open_pdbs;
/
Oracle12.1.0.2补丁集已引入了保持PDB启动状态的能力,因此,不用再通过上面的触发器方式来实现自动打开PDB。可以通过下面方式让PDB数据库自动启动。
-- 如果PDB数据库本身就是打开的情况下,无需执行下面的语句
ALTER PLUGGABLE DATABASE PTEST1 OPEN;
-- 保存当前PDB数据库的状态
ALTER PLUGGABLE DATABASE PTEST1 SAVE STATE;
正常来说,PDB数据库启动的状态应该是(READ WRITE)状态,我们可以通过SHOW PDBS;命令来检查当前PDB数据库是否正常。
如果我们后面不想要自动重启PDB数据库的话,可以通过下面的语句进行关闭
ALTER PLUGGABLE DATABASE PTEST1 DISCARD STATE;
(二)Oracle监听器的自动重启
方式1:通过/etc/rc.local
文件来进行
以 root 用户登录,编辑/etc/rc.d/rc.local
文件,添加以下内容:
# 下面的路径需要根据具体的Oracle_Home进行调整
su oracle -lc "/u01/app/oracle/product/11.2.0/db_1/bin/lsnrctl start"
方式2:创建 监听器 实例服务配置文件(推荐)
以 root 用户登录,创建/usr/lib/systemd/system/lsnrctl.service
文件,内容如下:
注意,下面的/oracle/home
需要替换为实际的ORACLE_HOME
路径。
Description=Oracle lsnrctl
After=network.target
[Service]
Type=forking
User=oracle
Group=oinstall
ExecStart=/oracle/home/bin/lsnrctl start
ExecReload=/oracle/home/bin/lsnrctl reload
ExecStop=/oracle/home/bin/lsnrctl stop
TimeoutStopSec=5min
Restart=on-failure
[Install]
WantedBy=multi-user.target
执行以下命令重新加载服务配置文件并设置开机自启:
# 重新加载服务配置文件
systemctl daemon-reload
systemctl enable lsnrctl.service
PS:也可以通过 /etc/init.d/ 来创建Oracle实例和监听器的自启动脚本,不过个人觉得相对比较麻烦,这里就不展开讲了
参考文章
Oracle数据库开机自启动的配置 https://www.cnblogs.com/wucongzhou/p/12612951.html