FAILOVER详细步骤

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 PRIMARYSESSIONS ACTIVE,则表示standby可以转换为primary角色,否则需要检查日志应用是否仍处于激活状态,确保该值为TO PRIMARYSESSIONS 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;

13.还原失败的primary数据库

原文地址:https://www.cnblogs.com/l10n/p/9407209.html