1、如果主库可以 mount ,可以将主库上未传输到备库的归档日志传输到备库。
确保备库上的 Redo Apply 是激活的状态。将主库启动到 mount 状态,执行下列操作,如果主库不能执行 mount ,则跳至步骤 2 。
|
sqlplus / as sysdba shutdown immediate startup mount; --target_db_name是备库的db_unique_name
ALTER SYSTEM FLUSH REDO TO target_db_name; |
如果上面操作成功,跳至步骤 5 ;如果操作报错,跳至步骤 2 。
2、确保备库有主库传送过来的最近归档日志。
在备库上通过下面的语句查询序列最高的归档日志。
|
sqlplus / as sysdba
SELECT UNIQUE THREAD# AS THREAD, MAX(SEQUENCE#) OVER (PARTITION BY thread#) AS LAST from V$ARCHIVED_LOG; |
如果备库没有接收到主库生成的最新归档日志,从主库将归档日志拷贝到备库进行注册。
|
sqlplus / as sysdba
ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filespec1'; |
3、确定并解决任何归档日志缺口。
在备库上通过下面语句查询备份是否存在归档日志缺口。
|
sqlplus / as sysdba
SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP; |
如果查询不到任何结果,则说明没有归档日志缺口。
如果有归档日志缺口,则从主库拷贝缺少的归档日志到备库进行注册。
|
sqlplus / as sysdba
ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filespec1'; |
4、重复步骤 3 直到所有的归档日志缺口被消除。
步骤 3 的查询语句显示的是序号最高的归档日志缺口,你必须重复这个查询,直到没有返回任何行。
5、在备库上停止日志应用。
|
sqlplus / as sysdba
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; |
6、将备库切换成主库角色。
|
sqlplus / as sysdba
ALTER DATABASE FAILOVER TO target_db_name; |
如果上面语句没有任何报错,进行步骤 10 的操作。如果有报错,调到步骤7。
7、如果步骤 6 有报错,尝试消除错误,然后重新执行步骤 6 的语句
如果语句没有报错,则跳至步骤 10
如果报错依然存在,且报错是关于 far sync instance 的问题,则跳至步骤 8
如果报错依然存在,且报错不是关于 far sync instance 的问题,则跳至步骤 9
8、对于 far sync instance 的错误,在语句上使用 FORCE 选项
在备库上执行下面语句
|
ALTER DATABASE FAILVOVER TO CHICAGO FORCE; |
如果 FORCE 选项成功了,跳至步骤 10
如果 FORCE 选项没有成功,跳至步骤9
9、执行 data-loss failover
|
ALTER DATABASE ACTIVATE PHYSICAL STANDBY DATABASE; |
10、打开新的主库
|
ALTER DATABASE OPEN; |
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26506993/viewspace-1853362/ ,如需转载,请注明出处,否则将追究法律责任。