状态由log switch gap变成了resolvable gap,从字面理解是主备库之间存在gap,于是执行:
sql> alter system flush redo to ora11dg2;
sql> select open_mode,database_role,switchover_status from v$database;
open_mode database_role switchover_status
-------------------- ---------------- --------------------
read write primary to standby
把主库redo flush到备库以后,以上状态消失,又重新回到之前的to standby状态了,可以重新进行switchover了。
如果主库状态不是to standby,而是session active,就要加上with session shutdown,否则不能切换成功,除此以外的其他状态,是不能直接进行转换的。备库通常的状态是not allowed,当主库做了切换以后,会变成to primary,所以通常是现在主库做role transition,然后再在备库做。
以下是一些消除主备库之间gap的命令和说明:
--主库,将所有未传送的redo传送给从库,target_db_name使用db_unique_name 。
alter system flush redo to target_db_name;
--验证备库
select unique thread# as thread, max(sequence#) over (partition by thread#) as last from v$archived_log;
--如果必要,拷贝归档日志到从库,并进行注册
alter database register physical logfile 'filespec1';
--重复上一步,知道确认所有归档完毕。
select thread#, low_sequence#, high_sequence# from v$archive_gap;
--查看目标日志传输路径状态和gap状态
select status, gap_status from v$archive_dest_status where dest_id = 2;
--在目标备库上,停止日志应用
alter database recover managed standby database cancel;
--在目标备库上
alter database recover managed standby database finish;
--如果日志确定丢失,可以采用激活方式,但这样会有数据丢失。
--alter database activate physical standby database;
--验证目标备库
select switchover_status from v$database;
--开始切换,如果状态为“to primary”,则with session shutdown从句可以去掉。
alter database commit to switchover to primary with session shutdown;
--打开新主库
alter database open;
引自:
阅读(1269) | 评论(0) | 转发(0) |