Oracle数据库配置自动重启

前言

由于虚拟机偶尔会出现服务器重启的问题,所以上面的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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容