1、
1.1、 数据库主备角色切换
【注】以下“主库”及“原主库”均指生产库;“备库”及“新主库”均指容灾库。
1.1.1、 确认主库/备库(生产库/容灾库)
SQL> selectname,SWITCHOVER_STATUS,open_mode,PROTECTION_MODE,DATABASE_ROLE from v$database;
NAME SWITCHOVER_STATUS OPEN_MODE PROTECTION_MODE DATABASE_ROLE
--------- -------------------- ---------- ------------------------------------
MDSP SESSIONSACTIVE READ WRITE MAXIMUMPERFORMANCE PRIMARY
※主库DATABASE_ROLE角色为“PRIMARY”
SQL> selectname,SWITCHOVER_STATUS,open_mode,PROTECTION_MODE,DATABASE_ROLE from v$database;
NAME SWITCHOVER_STATUS OPEN_MODE PROTECTION_MODE DATABASE_ROLE
--------- -------------------- ------------------------------ ----------------
MDSP NOTALLOWED READ ONLY MAXIMUM PERFORMANCE PHYSICALSTANDBY
备库DATABASE_ROLE角色为“PHYSICAL STANDBY”
1.1.2、 将主库置为备库并关闭原主库
$ ps -ef | grep LOCAL=NO | grep -v grep | awk '{ print $2}' |xargs kill -9
※关闭主库已建立的数据库连接
SQL> ALTER DATABASE COMMIT TOSWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
Database altered.
※将主库置为备库,并关闭会话。以下该主库变为“原主库”
SQL> shutdown immediate;
ORACLE instance shut down.
※关闭主库实例
1.1.3、 将备库置为主库并打开新主库
SQL> selectname,SWITCHOVER_STATUS,open_mode,PROTECTION_MODE,DATABASE_ROLE from v$database;
NAME SWITCHOVER_STATUS OPEN_MODE PROTECTION_MODE DATABASE_ROLE
--------- -------------------- ------------------------------ ----------------
MDSP SWITCHOVERPENDING READ ONLY MAXIMUM PERFORMANCE PHYSICAL STANDBY ※再次检查备库状态,角色仍为“PHYSICAL STANDBY”
SQL> alter database recovermanaged standby database disconnect from session;
Database altered.
SQL>ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITHSESSION SHUTDOWN;
Database altered.
※将角色改为“PRIMARY”
SQL> shutdown immediate;
ORA-01507: database not mounted
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
SQL> selectname,SWITCHOVER_STATUS,open_mode,PROTECTION_MODE,DATABASE_ROLE from v$database;
NAME SWITCHOVER_STATUS OPEN_MODE PROTECTION_MODE DATABASE_ROLE
--------- -------------------- ------------------------------ ----------------
MDSP NOTALLOWED READ WRITE MAXIMUMPERFORMANCE PRIMARY
※备库角色变为“PRIMARY”,以下该备库变为“新主库”
1.1.4、 为原主库添加standby日志并开启实时应用归档
# mklv -t raw -ylv_redo11_stdby dbvg 512M
# mklv -t raw -ylv_redo21_stdby dbvg 512M
# mklv -t raw -ylv_redo31_stdby dbvg 512M
# mklv -t raw -ylv_redo41_stdby dbvg 512M
# chown oracle:oinstall/dev/*lv_redo*_stdby
※ 以上以root用户执行,添加裸设备lv并修改属主
SQL> startup
SQL> alterdatabase add standby logfile group 4 ('/dev/rlv_redo11_stdby');
SQL> alter database addstandby logfile group 5 ('/dev/rlv_redo21_stdby');
SQL> alter database addstandby logfile group 6 ('/dev/rlv_redo31_stdby');
SQL> alter database addstandby logfile group 7 ('/dev/rlv_redo41_stdby');
※为原主库添加4组standby日志,一般要求比REDO LOG多一组。
SQL> ALTER DATABASERECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
Database altered.
※开启备库实时应用归档日志
1.1.5、 主库/备库角色切换成功验证
SQL> alter system switch logfile;
SQL> select process,status,thread#,sequence#,client_pidfrom v$managed_standby;
※在新主库建立一张测试表(略),并切换日志,检查两节点的同步进程是否在执行。
$ ls -ltr /arch/archlog
※在新备库上检查最新生成的归档文件,是否与新主库上一致(来自新主库),并检查测试表数据是否同步
1.2、 数据库主备角色二次切换(回切演练)
【注】以下“主库”及“原主库”均指容灾库;“备库”及“新主库”均指生产库。
1.2.1、 确认主库/备库(生产库/容灾库)
SQL> selectname,SWITCHOVER_STATUS,open_mode,PROTECTION_MODE,DATABASE_ROLE from v$database;
NAME SWITCHOVER_STATUS OPEN_MODE PROTECTION_MODE DATABASE_ROLE
--------- -------------------- ------------------------------ ----------------
MDSP TOSTANDBY READ WRITE MAXIMUMPERFORMANCE PRIMARY
※主库DATABASE_ROLE角色为“PRIMARY”,切换状态为“TO STANDBY”
NAME SWITCHOVER_STATUS OPEN_MODE PROTECTION_MODE DATABASE_ROLE
--------- -------------------- ------------------------------ ----------------
MDSP TOPRIMARY MOUNTED MAXIMUM PERFORMANCE PHYSICAL STANDBY
※备库DATABASE_ROLE角色为“PHYSICAL STANDBY”,切换状态为“TO PRIMARY”
1.2.2、 将主库置为备库并关闭原主库
$ ps -ef | grep LOCAL=NO | grep -v grep | awk '{ print $2}' |xargs kill -9
※关闭主库已建立的数据库连接
SQL> ALTER DATABASE COMMIT TOSWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
Database altered.
※将主库置为备库,并关闭会话。以下该主库变为“原主库”
SQL> shutdown immediate;
ORACLE instance shut down.
※关闭主库实例
1.2.3、 将备库置为主库并开启新主库
SQL> alter database recovermanaged standby database disconnect from session;
Database altered.
SQL> ALTER DATABASE COMMIT TOSWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
Database altered.
※将角色改为“PRIMARY”
SQL> shutdown immediate;
ORA-01507: database not mounted
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
SQL> selectname,SWITCHOVER_STATUS,open_mode,PROTECTION_MODE,DATABASE_ROLE from v$database;
NAME SWITCHOVER_STATUS OPEN_MODE PROTECTION_MODE DATABASE_ROLE
--------- -------------------- ------------------------------ ----------------
MDSP NOTALLOWED READ WRITE MAXIMUMPERFORMANCE PRIMARY
※状态变为PRIMARY
1.2.4、 主库/备库角色切换成功验证
SQL> startup
※在原主库上启动实例,即启动新备库实例
SQL> alter system switch logfile;
SQL> select process,status,thread#,sequence#,client_pidfrom v$managed_standby;
※在新主库建立一张测试表(略),并切换日志,检查两节点的同步进程是否在执行。
$ ls -ltr /arch/archlog
※在新备库上检查最新生成的归档文件,是否与新主库上一致(来自新主库),并检查测试表数据是否同步
2、 回退预案
作业过程中 ,如出现异常情况,导致无法在计划时间内完成演练,为确保生产库能够顺利提供业务,只需简单进行如下回退即可:
1、关闭生产库实例
SQL> shutdownimmediate;
2、启动生产库到nomount状态,并修改log_archive_dest_state_2参数值为DISABLE,停止向备库传输日志
SQL> startup nomount;
SQL> alter system setlog_archive_dest_state_2=’Disable’
3、启动数据库
SQL> alter databasemount;
SQL> alter databaseopen;
4、开启应用程序
5、开启NBU备份计划任务