DataGuard:Physical Standby Failover
接physical standby switchover
primary db :db2
standby db :db1
一般情况下failover都是表示primary数据库瘫痪,最起码也是起不来了,因此这种类型的切换基本上不需要primary数据库做什么操作。所以下列步骤中如果有提到primary和standby执行的,只是建议你如果primary还可以用,那就执行一下,即使不去执行,对failover来说也没有关系
1.检查归档文件是否连续,是否有gap
在standby库执行
SQL> select THREAD#,LOW_SEQUENCE#,HIGH_SEQUENCE# from v$archive_gap;
2.如果步骤1查询出来纪录,则在primary库上执行,否则跳过此步骤
在主库上执行语句,按步骤1查询出来的纪录找出归档文件
SQL> SELECT NAME FROM V$ARCHIVED_LOG WHERE THREAD#=1 AND DEST_ID=1 AND SEQUENCE# BETWEEN XX AND XX;
--如果primary存在,拷贝相应的归档到STANDBY数据库,并注册.
SQL> ALTER DATABASE REGISTER PHYSICAL LOGFILE 'xxx';
3.检查归档文件是否完整
分别在primary/standby执行下列语句:
SQL> select distinct thread#,max(sequence#) over(partition by thread#) a from v$archived_log;
把相差的归档复制到待转换的standby服务器,并手工register
4.开始做failover
察看standby 进程状态
SQL> select process,client_process,sequence#,status from v$managed_standby;
PROCESS CLIENT_P SEQUENCE# STATUS
--------- -------- ---------- ------------
ARCH ARCH 30 CLOSING
ARCH ARCH 0 CONNECTED
RFS LGWR 31 IDLE
RFS ARCH 0 IDLE
RFS N/A 0 IDLE
MRP0 N/A 31 APPLYING_LOG
SQL> alter database recover managed standby database finish force ;
FORCE关键字将会停止当前活动的RFS进程,以便立刻执行failover。
或
SQL> alter database recover managed standby database finish skip standby logfile;
SQL> alter database commit to switchover to primary;
SQL> shutdown immediate
SQL> startup
SQL> select database_role,protection_mode,protection_level,open_mode from v$database;
DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL OPEN_MODE
---------------- -------------------- -------------------- ----------
PRIMARY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE READ WRITE
Failover切换成功
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10159839/viewspace-598218/ ,如需转载,请注明出处,否则将追究法律责任。