理论知识: Switchover 切换允许primary 和一个备库进行切换,并且这种切换没有数据丢失。
前提条件:
1) 主备库相关参数 fal_client、fal_server 、standby_file_management 、 db_file_name_convert 、 log_file_name_convert 都已经配置。 standby logfile 日志组已创建。 (验证主备库的配置信息,包括初始化参数,归档模式,standby redo logs 和online redo log。 )
2)在主库查询V$ARCHIVE_DEST_STATUS 视图,验证备库没有redo 传输错误 或者redo gap。 SQL> SELECT STATUS, GAP_STATUS FROM V$ARCHIVE_DEST_STATUS WHERE DEST_ID = 2; STATUS GAP_STATUS --------- ------------------------ VALID NO GAP 只有这里状态是VALID 和NOGAP的情况下,才可以进行角色切换操作。
3) 确保主备库Temp 表空间一致。
4) 移除standby 上任何delay apply redo 的设置。
5) 如果是将RAC 主库切换到物理备库,RAC 主库只能保留一个节点,其他节点要关闭,在switchover 完成以后在启动关闭的节点即可。
6) 如果备库是real-time apply 的物理standby,并且是read only 模式,在切换之前,建议先将备库启动到mount状态,而不是open状态,这样可以实现最快速的角色切换,而不需要在切换之前清除用户的session连接。
7)如果有多个standby,在Role Transition 时如何选择 。 考虑位置,性能,数据库类型
主库参数检查: SQL> show parameter fal_client NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ fal_client string devdb1 SQL> show parameter fal_server NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ fal_server string phydb SQL> show parameter standby_file_management NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ standby_file_management string MANUAL SQL> show parameter db_file_name_convert NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_file_name_convert string +DATA/phydb/, +DATA/devdb/ SQL> show parameter log_file_name_convert NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ log_file_name_convert string +DATA/phydb/, +DATA/devdb/ SQL> select group# from v$standby_log; GROUP# ---------- 4 5 6 7
备库参数检查: SQL> show parameter fal_client NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ fal_client string phydb SQL> show parameter fal_server NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ fal_server string devdb1 SQL> show parameter standby_file_management NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ standby_file_management string AUTO SQL> show parameter db_file_name_convert NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_file_name_convert string +DATA/devdb/, +DATA/phydb/ SQL> show parameter log_file_name_convert NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ log_file_name_convert string +DATA/devdb/, +DATA/phydb/ SQL> select group# from v$standby_log; GROUP# ---------- 4 5 6 7
特别提醒: 作者环境为一个节点的rac+单节点dg 。 不同于两个节点的rac+dg,操作上有细微区别。如两个节点的rac,一个节点需shutdown,一个节点操作。
切换模式 :一个节点的rac主库切换备库,单节点备库切换成主库 。
1. 将主库切换成standby role: SQL> alter database commit to switchover to physical standby with session shutdown; Database altered.
2. 将原备库切换成主库 , 并 open 。 SQL> alter database commit to switchover to primary with session shutdown; Database altered.
SQL> ALTER DATABASE OPEN; Database altered.
3. 原主库并启动到open状态,启动 mgr 进程。 SQL> startup; ORACLE instance started. Total System Global Area 839282688 bytes Fixed Size 2257880 bytes Variable Size 603982888 bytes Database Buffers 230686720 bytes Redo Buffers 2355200 bytes Database mounted. Database opened.
SQL> alter database recover managed standby database using current logfile disconnect from session; Database altered.
4. 验证 SQL> SELECT DEST_ID, STATUS,APPLIED_SCN FROM V$ARCHIVE_DEST WHERE TARGET='STANDBY'; DEST_ID STATUS APPLIED_SCN ---------- --------- ----------- 2 VALID 0
切换模式: 单节点主库切换成备库,一个节点rac备库切换成主库。
1. 确认主库,新主库切换成备库 SQL> select name,database_role,switchover_status from v$database; NAME DATABASE_ROLE SWITCHOVER_STATUS --------- ---------------- -------------------- DEVDB PRIMARY TO STANDBY SQL> alter database commit to switchover to physical standby with session shutdown; Database altered. 2. 新备库切换成主库 , 并 open 。 SQL> alter database commit to switchover to primary with session shutdown; Database altered.
SQL> alter database open; Database altered.
3. 现备库open ,并启动 mgr 进程。 SQL> startup; ORACLE instance started. Total System Global Area 839282688 bytes Fixed Size 2257880 bytes Variable Size 603982888 bytes Database Buffers 230686720 bytes Redo Buffers 2355200 bytes Database mounted. Database opened. SQL> alter database recover managed standby database using current logfile disconnect from session; Database altered.
4. 主库执行检查 SQL> SELECT DEST_ID, STATUS,APPLIED_SCN FROM V$ARCHIVE_DEST WHERE TARGET='STANDBY'; DEST_ID STATUS APPLIED_SCN ---------- --------- ----------- 2 VALID 1879072