一、 oracle开机自启动
随服务器启动Oracle,主从库皆可,启动至open状态。
su - oracle
#记下这两个值
echo $ORACLE_HOME
echo $ORACLE_SID
1. 修改dbstart
cp $ORACLE_HOME/bin/dbstart $ORACLE_HOME/bin/dbstart.bak
vi $ORACLE_HOME/bin/dbstart
#搜索 ORACLE_HOME_LISTNER=$1,改为
ORACLE_HOME_LISTNER=$ORACLE_HOME
2. 修改oratab和rc.local
root用户操作
vi /etc/oratab
#找到下面这行,把N改成Y(没这行就自己加上)
#格式为 $ORACLE_SID:$ORACLE_HOME:Y
uatcdb2:/u01/PRD/oracle/12.1.0.2/LOGDB:Y #这里原本是N,改成Y即可
vi /etc/rc.d/rc.local
#在空白处添加下面两句,/u01/PRD/oracle/12.1.0.2/GTLOGDB 即为 $ORACLE_HOME
su oracle -lc "/u01/PRD/oracle/12.1.0.2/GTLOGDB/bin/lsnrctl start"
su oracle -lc /u01/PRD/oracle/12.1.0.2/GTLOGDB/bin/dbstart
#加执行权限
chmod +x /etc/rc.d/rc.local
之后可以重启服务器试试DB及监听是否能随机启动。
二、 自动主从同步 & 从库自动open pdb
前面随机启动的脚本有两个问题:
- 无法自动恢复主从同步,即从库无法自动启动mrp进程应用日志
- 从库若有pdb,默认只能启动到mount状态(主库执行save state也没用)
这两个问题可以通过建startup触发器来处理,测试以下场景均能正常工作:
- startup mount然后open从库
- startup从库
- 重启从库服务器(已配置前面的开机自启动)
- 主从switchover后在新从库(原主库)执行上面三个操作
1. 12c及以上版本
-- version >= 12c
create or replace trigger auto_start_standby_mrp_pdb
AFTER STARTUP ON DATABASE
declare
v_db_role Varchar2(30);
v_cdb Varchar2(30);
begin
SELECT database_role,cdb into v_db_role,v_cdb from v$database;
if (v_db_role = 'PHYSICAL STANDBY') THEN
EXECUTE IMMEDIATE 'alter database recover managed standby database using current logfile disconnect from session parallel 4';
if (v_cdb = 'YES') then
EXECUTE IMMEDIATE 'alter pluggable database all open read only';
END IF;
END IF;
end;
/
2. 12c以下版本(仅测试了11g)
-- version < 12c
create or replace trigger auto_start_standby_mrp
AFTER STARTUP ON DATABASE
declare
v_db_role Varchar2(30);
begin
SELECT database_role into v_db_role from v$database;
if (v_db_role = 'PHYSICAL STANDBY') THEN
EXECUTE IMMEDIATE 'alter database recover managed standby database using current logfile disconnect from session parallel 4';
END IF;
end;
/