RAC DG模拟真实故障下容灾演练(failover+switchover)
该演练,需要原生产主库以及备库必须开启闪回功能,并且主生产库也需要动,数据库在做完failover+switchover后,数据库是个全新数据库,日记不再使用之前得日记,将重新生成新的日记(即日记序列号将从1开始重新计数)
1 、active standby and flash back
先关DG2节点:
shut immediate;
确认备库flashback on
selectflashback_on from v$database;
如为NO
recover managed standby database cancel;
需要预先设置两个参数
showparameter recover
NAME TYPE VALUE
------------------------------------ -----------------------------------------
db_recovery_file_dest string +data
db_recovery_file_dest_size big integer 15G
db_unrecoverable_scn_tracking boolean TRUE
recovery_parallelism integer 0
alter system set db_recovery_file_dest = ‘+data’;
alter system set db_recovery_file_dest_size=15g;
ALTER DATABASE FLASHBACK ON;
重新应用:
alter database recover managed standby database using current logfiledisconnect from session;
备库确认:
set linesize 1000;
SELECT PROCESS, STATUS, THREAD#, SEQUENCE#, BLOCK#, DELAY_MINS FROMV$MANAGED_STANDBY;
MRP0 为applying_log
select flashback_on from v$database;
主库执行:
需要到主库RAC所有节点做最后一次日志切换,再断开主库所有节点得监听,防止数据写入,造成闪回数据丢失
Altersystem switch logfile;
lsnrctlstop
备库执行:
recover managed standby database cancel;
创建创建点:
CREATE RESTOREPOINT back_to_here GUARANTEE FLASHBACK database;
主库执行:
开启闪回功能:如果你怕因操作失误,SCN闪回不了,造成事故,可以为主库做一个还原点,多一层保护。
selectflashback_on from v$database;
如为NO
需要预先设置两个参数
showparameter recover
NAME TYPE VALUE
----------------------------------------------- ------------------------------
db_recovery_file_dest string +data
db_recovery_file_dest_size big integer 15G
db_unrecoverable_scn_tracking boolean TRUE
recovery_parallelism integer 0
alter system set db_recovery_file_dest =‘+data’;
alter system set db_recovery_file_dest_size=15g;
ALTER DATABASE FLASHBACK ON;
激活standby数据库
ALTER DATABASE ACTIVATE STANDBY DATABASE;
STARTUP FORCE;
或者
alterdatabase recover managed standby database finish force;
alterdatabase commit to switchover to primary;
同时开启DG二节点:
Startup
DG两节点验证:
select open_mode from V$database;
提供读写服务:
OOOOXXXX
一般failover主库都不能再使用,需要重新配置standby,但是如果开启了闪回,也可以将Failover之后的老的主库 flashback成新primary的standby库:
步骤如下
/1. 在新主库查出failover时的SCN:(即原备库上执行)
SQL> SELECTTO_CHAR(STANDBY_BECAME_PRIMARY_SCN) FROM V$DATABASE;
TO_CHAR(STANDBY_BECAME_PRIMARY_SCN)
----------------------------------------
172313
/2. 在old primary库上:即(原主库上执行)
关闭所有节点,启动一节点到mount状态,闪回数据库到故障时得SCN号,切换数据库到物理备库,重启数据库,应用redo日志
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> FLASHBACK DATABASE TO SCN 172313;
SQL> ALTER DATABASE CONVERT TO PHYSICAL STANDBY;
SQL> SHUTDOWN IMMEDIATE;
打开RAC所有节点
SQL> STARTUP ;
只能在其中得一个节点开启日志应用
SQL>ALTER DATABASE RECOVERMANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
Switchover切换
最后做一次主备切换,切换到原始主备状态
需要到新主库所有节点上做一次日志切换
Alter system switch logfile;
新主库(即原备库): -
/1. 查看switchover 状态 -
SQL> SELECT SWITCHOVER_STATUS FROMV$DATABASE; -
to standby
2 切换成备库
如果上面的结果不是to standby 还有会话运行
SQL>Alter database commit to switchoverto physical standby with session shutdown;
否则直接
SQL> ALTER DATABASE COMMIT TO SWITCHOVERTO PHYSICAL STANDBY;
Database altered.
3 启动到mount和应用日志状态
SQL> SHUTDOWN IMMEDIATE
SQL> startup nomount;
SQL> alter database mount standby database;
SQL> ALTER DATABASE RECOVER MANAGEDSTANDBY DATABASE DISCONNECT FROM SESSION USING CURRENT LOGFILE;
/4. 查看数据库模式
SQL>selectdest_name,status,database_mode,recovery_mode,protection_mode fromv$archive_dest_status;
SQL>select status,database_mode fromv$archive_dest_status;
新备库(即原主库):
1.查看switchover状态 -
SQL> SELECT SWITCHOVER_STATUS FROMV$DATABASE;
TO PRIMARY
/2. 切换成主库
如果上面的结果不是to PRIMARY 还有会话运行
SQL> ALTER DATABASE COMMIT TO SWITCHOVERTO PRIMARY with session shutdown
否则
SQL>alter database commit to switchoverto primary;
Database altered.
所有节点执行:
SQL> shutdown immediate;
SQL> startup
SQL> alter system switch logfile
/3. 查看数据库模式
SQL>selectdest_name,status,database_mode,recovery_mode,protection_mode fromv$archive_dest_status
SQL>select status,database_mode fromv$archive_dest_status
做完switchover后,备库执行:
关闭日志应用:
Recover managed standby database cancel;
重启数据库到mount:
startup mount;
删掉restore point:
drop restore point back_to_here;
同时开启2节点
startup
如果主库也创建了还原点:
11g:可执行drop
10g:需要启动数据库到Mount状态,再drop,最后open
drop restore point back_to_here;
当物理备库standby open打开报错要求恢复时,用下面recover语句
recover automatic standby database;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USINGCURRENT LOGFILE DISCONNECT FROM SESSION parallel 2;
确认DG状态:
SELECT PROCESS, STATUS, THREAD#, SEQUENCE#, BLOCK#,DELAY_MINS FROM V$MANAGED_STANDBY;
版权声明:本文为博主原创文章,未经博主允许不得转载。



