[Oracle工程师手记] 因为意外发生 failover 之后,如何尽量地重用原来的主库
有的时候,我们在Data Guard 环境中,因为某种意外(例如 主库的电源设备损坏)导致主库一时之间无法工作,只好把备库 failover ,改变角色,变成主库。事后,老的主库的硬件问题得到修正,它的数据也没有丢失,我们可能不想再折腾一番,用老主库的硬件重新作一套备库。而是希望,直接把它变成备库。
如何作呢? 如果有幸设置了数据库的 flashback 有效,那么可以借助于 flashback 功能,来快速将主库转变为备库。下面是具体的步骤:
首先,需要找到旧的备库,变成新的主库时的 SCN:
select standby_became_primary_scn from v$database;
比如,得到的 SCN 是: 1622177。
然后,重启动老主库到 mount 状态,再 flashback 到这个 SCN值:
shu immediate startup mount flashback database to scn <SCN>; <<<<< 用查询得到的 SCN。
接下来,把老主库,变成新的备库:
alter database convert to physical standby;
如果新主库和新备库之间可以连通,新主库的 log_archive_dest_n (例如 :2) 已经指向 新备库。新主库和新备库的 fal_server 都已经配置指向了对方,那么就可以开始从 新的主库向新备库传递 REDO,进行同步了。
recover managed standby database disconnect;
而且,一般情况下,往往老的主库的硬件配置会比老的备库的硬件配置高很多,所以,上述的新主库和新备库可以正常同步后,我们也可以在他们之间进行 switchover ,使得老的主库再次变回主库。