husical standby failover 11.2.0.4 on Oracle Linux5.8
1 Primary 还能mount起来的情况
Standby 的mrp程序正常开启,Primary在mount情况下,确定flush redo
Alter systemflush redo to ‘standby’;
默认是confirmapply
Ø 如果该语句正常完成,说明所有primary及online的redo都已经在standby 正常apply。可以进行failover转换,可直接进行第3步
Ø 如果该语句错误,或者由于applyredo log时间太长而终止此时要尽量将primary上的日志拷贝到standby进行apply,也就是进行第2步
2 对照primary现有archived log并apply至standby
(1) 查看standby已有最大sequence archivedlog
SELECT UNIQUE THREAD# AS THREAD, MAX(SEQUENCE#)
OVER (PARTITION BY thread#) AS LAST fromV$ARCHIVED_LOG;
然后再对比primary已有的archived log。如果在primary上还有比 standby 上max sequence更大的redo log,将其拷贝至standby,并用以下语句在standby上注册:
ALTER DATABASE REGISTER PHYSICAL LOGFILE'filespec1';
(2) 查看archivedlog gap
在standby 上用以下语句查看archived log gap
SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE#FROM V$ARCHIVE_GAP;
1 90 93
以上表示还缺少thread1的90 ,91,92,93日志。如果在primary上还能找到这些日志就像上一步一样在standby里面注册
3 stop redo apply
Alter database recover managed standby databasecancel;
4 finish redo apply
Alter database recover managed standby databasefinish;
该语句执行后,数据库将进入failover准备状态。Standby 会即可apply standby 上的redo log。
如果此语句出错,检查是否所有的日志都已经apply。如果错误无法解决采用以下语句failover
ALTER DATABASE ACTIVATE PHYSICAL STANDBYDATABASE;
5 检查standbyswitchover_status
在standby上执行
Select switchover_status from v$database;
如果是toprimary或者sessionsactive表示都可以转换
6 转换standby
在standby上执行
Alter database commit to switchover to primary withsession shutdown
7 开启 新primary
Alter database open;