Oracle-DG/ADG灾备之3—灾备恢复演练之2—灾难性恢复
Failover一般表示Primary数据库瘫痪或至少无法启动,这种转换已不能在Primary数据库上做任何操作,只要更改Standby数据库的角色为primary
注意:
1)Failover之后原primary数据库默认不再是Data Guard配置的一部分。
2)对于多Standby的情況,其他standby数据库不直接参与Failover的过程,因此这些数据库不需要做任何操作。
3)一般情況下,新的primary数据库配置后,要建立新的Standby数据库。
一、灾备恢复演练
1、主库宕机
#shutdown -h now
2、备库切换新主库
(1)检查备库状态
select DATABASE_ROLE from v$database; --备库为PHYSICAL STANDBY 状态,主库为PRIMARY状态
(2)在备库(ruiadg1)执行
检查确认是否有日志没有同步:
SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
沒有返回结果就说明归档日志是连续的。
如果此查询有记录,需要把这些日志从主库拷贝或从异机备份拷贝到备库,并注册到数据库(加入到数据字典)中: ALTER DATABASE REGISTER PHYSICAL LOGFILE 'xxx';
(3)查询日志是否应用到最新状态:
select distinct thread#,applied,max(sequence#) over(partition by thread#) a from v$archived_log;
查看主备库日志序列号是否一致,若无法查询主库,就只能使用当前的归档日志文件了。
(4)在备库做失败切换:
SQL> alter database recover managed standby database finish; or: SQL> alter database recover managed standby database finish force;
Force关键字会停止当前活动的RFS进程,以便立即执行Failover。
(5)切换备库的角色为primary:
SQL> alter database commit to switchover to primary;
(6)启动新的主库:
alter database open;
(7)查看新主库的当前角色:
select name,DATABASE_ROLE from v$database;
(8)查看新的归档日志
备库切换为主库成功。
3、新备库创建及同步用于模拟数据量
中间需要增加一些数据,比如200G。
create tablespace tbsp_prd datafile '/oracle/app/oracle/oradata/newhisdb01/prd_data_01.dbf' size 30G autoextend on; alter tablespace tbsp_prd add datafile '/oracle/app/oracle/oradata/newhisdb01/prd_data_02.dbf' size 30G autoextend on; alter tablespace tbsp_prd add datafile '/oracle/app/oracle/oradata/newhisdb01/prd_data_03.dbf' size 30G autoextend on; alter tablespace tbsp_prd add datafile '/oracle/app/oracle/oradata/newhisdb01/prd_data_04.dbf' size 30G autoextend on; alter tablespace tbsp_prd add datafile '/oracle/app/oracle/oradata/newhisdb01/prd_data_05.dbf' size 30G autoextend on; alter tablespace tbsp_prd add datafile '/oracle/app/oracle/oradata/newhisdb01/prd_data_06.dbf' size 30G autoextend on; alter tablespace tbsp_prd add datafile '/oracle/app/oracle/oradata/newhisdb01/prd_data_07.dbf' size 30G autoextend on; alter tablespace tbsp_prd add datafile '/oracle/app/oracle/oradata/newhisdb01/prd_data_08.dbf' size 30G autoextend on; alter tablespace tbsp_prd add datafile '/oracle/app/oracle/oradata/newhisdb01/prd_data_09.dbf' size 30G autoextend on; alter tablespace tbsp_prd add datafile '/oracle/app/oracle/oradata/newhisdb01/prd_data_10.dbf' size 30G autoextend on;
四、新备库(newhisdb01)同步过程
1、新备库启动到nomount状态
2、新备库登录至rman
rman target sys/YzeyHis\&\$\$055@newhisdg auxiliary sys/YzeyHis\&\$\$055@newhisdb02
3、新备库从新主库同步数据
duplicate target database for standby from active database nofilenamecheck;
4、检查Dataguard 状态
select database_role,protection_mode,protection_level,open_mode from v$database;
5、启动dataguard数据库
alter database recover managed standby database using current logfile disconnect from session; --实时同步(只要主库redolog进行了变化就会变更到备库)
6、主备库同步检查
(1)执行语句
select unique thread#,max(sequence#) over(partition by thread#)last,to_char(COMPLETION_TIME,'YYYY-MM-DD hh24:mi:ss') COMPLETION_TIME from v$archived_log order by COMPLETION_TIME ;
(2)主库
(3)备库
7、查询主库日志传输序列号及备库日志应用序列号
如果相等则表示主、备库数据一致。反之则主、备库数据不一致。
(1)执行语句
SELECT AL.THRD "Thread", ALMAX "Last Seq Received", LHMAX "Last Seq Applied", AL.COMPLETION_TIME FROM (SELECT THREAD# THRD, MAX(SEQUENCE#) ALMAX, to_char(COMPLETION_TIME,'YYYY-MM-DD hh24:mi:ss') COMPLETION_TIME FROM V$ARCHIVED_LOG WHERE RESETLOGS_CHANGE# = (SELECT RESETLOGS_CHANGE# FROM V$DATABASE) GROUP BY THREAD#,COMPLETION_TIME) AL, (SELECT THREAD# THRD, MAX(SEQUENCE#) LHMAX FROM V$LOG_HISTORY WHERE RESETLOGS_CHANGE# = (SELECT RESETLOGS_CHANGE# FROM V$DATABASE) GROUP BY THREAD#) LH WHERE AL.THRD = LH.THRD order by ALMAX ;
(2)主库
(3)备库
8、检查备库MRP0进程以及进程的活动状态
(1)执行语句
SELECT process,client_process,sequence#,status FROM v$managed_standby;
(2)主库:
(3)备库:
9、检查备库日志应用详细情况
(1)执行语句
select * from ( SELECT registrar, creator, thread#, applied, sequence#, first_change#, next_change#, to_char(completion_time,'YYYY-MM-DD hh24:mi:ss') completion_time FROM v$archived_log order by sequence# desc,completion_time desc ) where rownum <10;
(2)备库
7、检查备库应用日志的进度
SET feed off SET lines 300 SET pages 999 col value for a20 SELECT to_char(sysdate, 'MM/DD/YYYY hh24:mi:ss') ctime, name, value, datum_time FROM v$dataguard_stats WHERE NAME LIKE '%lag';
10. 检查备库是否有GAP
查看备库是否有间隙序列,如果有,进行查看,没有则正常。
select * from v$archive_gap;