FAILOVER详细步骤
1.Flush主库任何未传输的redo到目标备库
如果primary可以mount,则可以flush任何主库的未传输redo到备库,如果操作成功返回,则可以保证failover的零数据丢失。
1)确保standby数据库启用日志应用
2)mount primary数据库,执行以下SQL语句,命令等待standby应用redo完成后返回。
SQL> alter system flush redo to target_db_unique_name;
如果成功返回,则转第5步,如果返回错误或者用户不能等待其耗费的时长,则转第2步。
2.确认standby应用了primary每个线程的最新归档
standby:
SQL> select unique thread# as thread, max(sequence#) over (partition by thread#) as last from v$archived_log;
如果standby没有应用priamry的最新归档,手工传输primary归档文件到standby并注册:
SQL> alter database register physical logfile 'filespec1';
3.查找并解决GAP
standby:
SQL> select thread#, low_sequence#, high_sequence# from v$archive_gap;
如果有GAP, 手工传输GAP到standby并注册:
SQL> alter database register physical logfile 'filespec1';
4.重复第3步,直到解决所有的GAP
直到查询返回为空,则说明当前已可能没有GAP(v$archive_gap存在一些已知的BUG)。
5.停止redo应用
SQL> recover managed standby database cancel;
6.完成应用所有接受到的redo数据
SQL> recover managed standby database finish;
如果命令成功返回,转第7步,如果命令返回错误,说明一些redo数据不能应用,排查错误并再次执行该SQL语句。
如果错误不能解决,执行以下SQL激活物理备库,可能会丢失数据,执行以下SQL后,转第9步:
SQL> alter database activate physical standby database;
7.确认物理standby可以转换为primary
SQL> select switchover_status from v$database;
SQL查询结果为TO PRIMARY
或SESSIONS ACTIVE
,则表示standby可以转换为primary角色,否则需要检查日志应用是否仍处于激活状态,确保该值为TO PRIMARY
或SESSIONS ACTIVE
。
8.切换物理standby为primary角色
SQL> alter database commit to switchover to primary with session shutdown;
如果switchover_status为SESSION ACTIVE,则需要加上with session shutdown子句。
9.打开新的primary数据库
SQL> alter database open;
10.清除DG相关参数
11.立即备份新的primary数据库
12.DG环境中如果存在的其他物理备库,重启其已停止的日志应用
SQL> recover managed standby database using current logfile disconnect;