ADG主库上归档丢失恢复备库测试
2017-04-22 14:35
246 查看
模拟了下在主库上丢失归档导致备库出现gap,无需重建恢复备库的情况
1制造gap
主库
ALTER system SET log_archive_dest_state_2 = ‘defer’;
一些dml操作
alter system switch logfile;
备库此时的mrp是等待log状态
SQL> select process,client_process,sequence#,status from v$managed_standby;
PROCESS CLIENT_PROCESS SEQUENCE# STATUS
ARCH ARCH 0 CONNECTED
ARCH ARCH 0 CONNECTED
ARCH ARCH 0 CONNECTED
ARCH ARCH 22 CLOSING
RFS UNKNOWN 0 IDLE
RFS ARCH 0 IDLE
MRP0 N/A 23 WAIT_FOR_LOG
SQL> select * from v$archive_gap;
no rows selected
现在的这种情况oracle不认为是gap,所以没记录
主库上查看当前sequence
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /data/arch
Oldest online log sequence 25
Next log sequence to archive 27
Current log sequence 27
从库查看应用的归档
SQL> select sequence#, applied from v$archived_log where applied=’YES’ order by sequence#;
SEQUENCE# APPLIED
SEQUENCE# APPLIED
主库上删除24,25,26三个sequence归档
select sequence#,name from v$archived_log;
主库
ALTER system SET log_archive_dest_state_2 = ‘enable’;
在备库上查看
select * from v$archive_gap;
THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#
发现已经丢失了24,25,26三个归档文件
SQL> select sequence#,applied from v$archived_log;
SEQUENCE# APPLIED
SEQUENCE# APPLIED
停止从库的同步
SELECT (SELECT MIN(d.CHECKPOINT_CHANGE#) FROM vdatafile d) datafile_scn,
(SELECT MIN(d.CHECKPOINT_CHANGE#)
FROM vdatafile_header d
WHERE rownum = 1) datafile_header_scn,
(SELECT current_scn FROM vdatabase) current_scn,
(SELECT b.NEXT_CHANGE#
FROM varchived_log b
WHERE b.SEQUENCE# = 23
AND resetlogs_change# =
(SELECT d.RESETLOGS_CHANGE# FROM v$database d)
AND rownum = 1) NEXT_CHANGE#
FROM dual;
查找最小的scn
DATAFILE_SCN DATAFILE_HEADER_SCN CURRENT_SCN NEXT_CHANGE#
在主库备份增量
RMAN> backup as compressed backupset incremental from SCN 1017227 database format ‘/home/oracle/standby_%d_%T_%U.bak’ include current controlfile for standby filesperset=5 tag ‘FOR STANDBY’;
传递到备库,注册应用
重启备库到nomount
show paramete control
rman恢复控制文件
RMAN> restore standby controlfile to ‘/data/oracle/app/oradata/dbadb/control01.ctl’ from ‘/home/oracle/standby_DBADB_20170422_0js2b2hl_1_1.bak’
RMAN> restore standby controlfile to ‘/data/oracle/app/fast_recovery_area/dbadb/control02.ctl’ from ‘/home/oracle/standby_DBADB_20170422_0js2b2hl_1_1.bak’;
RMAN> alter database mount;
RMAN> catalog start with ‘/home/oracle/archivelog’;
searching for all files that match the pattern /home/oracle/archivelog
Do you really want to catalog the above files (enter YES or NO)? yes
cataloging files…
cataloging done
RMAN> recover database noredo;
alter database recover managed standby database using current logfile disconnect from session;
SQL> SELECT * FROM V$ARCHIVE_GAP;
no rows selected
select sequence#,applied from v$archived_log;
SEQUENCE# APPLIED
此时的备库是mount状态的,需要到open状态
alter database recover managed standby database cancel;
alter database open;
alter database recover managed standby database using current logfile disconnect from session;
验证是否正常
参考:
http://www.cnblogs.com/lhrbest/p/4754289.html
1制造gap
主库
ALTER system SET log_archive_dest_state_2 = ‘defer’;
一些dml操作
alter system switch logfile;
备库此时的mrp是等待log状态
SQL> select process,client_process,sequence#,status from v$managed_standby;
PROCESS CLIENT_PROCESS SEQUENCE# STATUS
ARCH ARCH 0 CONNECTED
ARCH ARCH 0 CONNECTED
ARCH ARCH 0 CONNECTED
ARCH ARCH 22 CLOSING
RFS UNKNOWN 0 IDLE
RFS ARCH 0 IDLE
MRP0 N/A 23 WAIT_FOR_LOG
SQL> select * from v$archive_gap;
no rows selected
现在的这种情况oracle不认为是gap,所以没记录
主库上查看当前sequence
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /data/arch
Oldest online log sequence 25
Next log sequence to archive 27
Current log sequence 27
从库查看应用的归档
SQL> select sequence#, applied from v$archived_log where applied=’YES’ order by sequence#;
SEQUENCE# APPLIED
10 YES 11 YES 12 YES 13 YES 14 YES 14 YES 15 YES 15 YES 16 YES 16 YES 17 YES
SEQUENCE# APPLIED
18 YES 19 YES 20 YES 21 YES 22 YES
主库上删除24,25,26三个sequence归档
select sequence#,name from v$archived_log;
主库
ALTER system SET log_archive_dest_state_2 = ‘enable’;
在备库上查看
select * from v$archive_gap;
THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#
1 24 26
发现已经丢失了24,25,26三个归档文件
SQL> select sequence#,applied from v$archived_log;
SEQUENCE# APPLIED
10 YES 11 YES 12 YES 13 YES 14 YES 15 YES 15 YES 14 YES 16 YES 16 YES 17 YES
SEQUENCE# APPLIED
17 NO 18 YES 18 NO 19 YES 20 YES 21 YES 22 YES 23 YES 27 NO
停止从库的同步
SELECT (SELECT MIN(d.CHECKPOINT_CHANGE#) FROM vdatafile d) datafile_scn,
(SELECT MIN(d.CHECKPOINT_CHANGE#)
FROM vdatafile_header d
WHERE rownum = 1) datafile_header_scn,
(SELECT current_scn FROM vdatabase) current_scn,
(SELECT b.NEXT_CHANGE#
FROM varchived_log b
WHERE b.SEQUENCE# = 23
AND resetlogs_change# =
(SELECT d.RESETLOGS_CHANGE# FROM v$database d)
AND rownum = 1) NEXT_CHANGE#
FROM dual;
查找最小的scn
DATAFILE_SCN DATAFILE_HEADER_SCN CURRENT_SCN NEXT_CHANGE#
1017228 1017228 1017227 1017228
在主库备份增量
RMAN> backup as compressed backupset incremental from SCN 1017227 database format ‘/home/oracle/standby_%d_%T_%U.bak’ include current controlfile for standby filesperset=5 tag ‘FOR STANDBY’;
传递到备库,注册应用
重启备库到nomount
show paramete control
rman恢复控制文件
RMAN> restore standby controlfile to ‘/data/oracle/app/oradata/dbadb/control01.ctl’ from ‘/home/oracle/standby_DBADB_20170422_0js2b2hl_1_1.bak’
RMAN> restore standby controlfile to ‘/data/oracle/app/fast_recovery_area/dbadb/control02.ctl’ from ‘/home/oracle/standby_DBADB_20170422_0js2b2hl_1_1.bak’;
RMAN> alter database mount;
RMAN> catalog start with ‘/home/oracle/archivelog’;
searching for all files that match the pattern /home/oracle/archivelog
List of Files Unknown to the Database
File Name: /home/oracle/archivelog/standby_DBADB_20170422_0is2b2hk_1_1.bakDo you really want to catalog the above files (enter YES or NO)? yes
cataloging files…
cataloging done
List of Cataloged Files
File Name: /home/oracle/archivelog/standby_DBADB_20170422_0is2b2hk_1_1.bakRMAN> recover database noredo;
alter database recover managed standby database using current logfile disconnect from session;
SQL> SELECT * FROM V$ARCHIVE_GAP;
no rows selected
select sequence#,applied from v$archived_log;
SEQUENCE# APPLIED
28 YES
此时的备库是mount状态的,需要到open状态
alter database recover managed standby database cancel;
alter database open;
alter database recover managed standby database using current logfile disconnect from session;
验证是否正常
参考:
http://www.cnblogs.com/lhrbest/p/4754289.html
相关文章推荐
- (归档模式)丢失非关键文件恢复
- (归档模式)丢失非关键文件恢复
- RMAN 恢复测试-所有文件丢失,恢复数据库。
- 跳过丢失归档进行恢复
- rman实验之归档模式有备份,正常关机丢失控制文件的恢复
- dataguard 归档丢失(主库中无此丢失归档处理),备库基于SCN恢复
- oracle的数据文件全部丢失,但有归档和重做日志,如何恢复?
- 非归档模式下丢失system系统表空间如何恢复
- 未启用归档数据库非数据文件(spfile,control,redo,undo,temp)全丢失的恢复方法
- 【DATAGUARD】物理dg在主库丢失归档文件的情况下的恢复(七)
- (归档模式)丢失非关键文件恢复
- (归档模式)丢失非关键文件恢复
- 利用增量备份恢复因归档丢失造成的DG gap
- Oracle主库归档丢失,备库日志有gap,在不重建备库的情况下,恢复备库
- DG备库ORA-01196故障-归档日志丢失恢复一则
- oracle11g dataguard主库备份恢复到测试环境单库报错:ORA-19502: write error on file
- 丢失控制文件和数据文件,但是有冷备份和全部归档文件的恢复
- DataGuard丢失归档,使用增量备份恢复备库一例
- ORACLE基础学习-RMAN应用之(归档模式无备份,丢失数据文件的恢复)
- 使用脚本,自动跳过丢失归档的恢复--------MODIFY SEQ