dataguard 归档丢失(主库中无此丢失归档处理),备库基于SCN恢复 环境: OS: CentOS 6.5 DB: Oracle 10.2.0.5 1.主备库环境 主库: SQL> select dbid,name,LOG_MODE,open_mode,db_unique_name,DATABASE_ROLE,PROTECTION_MODE from v$database; DBID NAME LOG_MODE OPEN_MODE DB_UNIQUE_NAME DATABASE_ROLE PROTECTION_MODE ---------- --------- ------------ ---------- -------------------- ---------------- -------------------- 351758316 NETDATA ARCHIVELOG READ WRITE netdata_pd PRIMARY MAXIMUM PERFORMANCE SQL> archive log list; Database log mode Archive Mode Automatic archival Enabled Archive destination /u01/app/oracle/archive/netdata Oldest online log sequence 65 Next log sequence to archive 67 Current log sequence 67 SQL> 备库: SQL> select dbid,name,LOG_MODE,open_mode,db_unique_name,DATABASE_ROLE,PROTECTION_MODE from v$database; DBID NAME LOG_MODE OPEN_MODE DB_UNIQUE_ DATABASE_ROLE PROTECTION_MODE ---------- ---------- ------------ ---------- ---------- ---------------- -------------------- 351758316 NETDATA ARCHIVELOG MOUNTED netdata_sd PHYSICAL STANDBY MAXIMUM PERFORMANCE SQL> archive log list; Database log mode Archive Mode Automatic archival Enabled Archive destination /u01/app/oracle/archive/netdata Oldest online log sequence 63 Next log sequence to archive 0 Current log sequence 67 SQL> 2.模拟归档丢失 备库操作: 备库取消归档应用 SQL> ALTER DATABASE recover managed standby DATABASE cancel; Database altered. 备库以只读模式打开 SQL> alter database open read only; Database altered. SQL> 这张表是我建的测试表,用一个job跑的插入数据(每隔3S插入一条 SQL> select count(*) from hr.test; COUNT(*) ---------- 28501 SQL> 主库操作: SQL> select count(*) from hr.test; COUNT(*) ---------- 31143 SQL> 可以看到记录数不一致,这是因为归还没有传输过来 主备归档情况 主库操作 SQL> set line 200 SQL> set pagesize 200 SQL> col name format A50 SQL> select name,SEQUENCE#,APPLIED from v$archived_log where dest_id=1; /u01/app/oracle/archive/netdata/1_52_857898543.arc 52 NO /u01/app/oracle/archive/netdata/1_53_857898543.arc 53 NO /u01/app/oracle/archive/netdata/1_54_857898543.arc 54 NO /u01/app/oracle/archive/netdata/1_55_857898543.arc 55 NO /u01/app/oracle/archive/netdata/1_56_857898543.arc 56 NO /u01/app/oracle/archive/netdata/1_57_857898543.arc 57 NO /u01/app/oracle/archive/netdata/1_58_857898543.arc 58 NO /u01/app/oracle/archive/netdata/1_59_857898543.arc 59 NO /u01/app/oracle/archive/netdata/1_60_857898543.arc 60 NO /u01/app/oracle/archive/netdata/1_61_857898543.arc 61 NO /u01/app/oracle/archive/netdata/1_62_857898543.arc 62 NO /u01/app/oracle/archive/netdata/1_63_857898543.arc 63 NO /u01/app/oracle/archive/netdata/1_64_857898543.arc 64 NO /u01/app/oracle/archive/netdata/1_65_857898543.arc 65 NO /u01/app/oracle/archive/netdata/1_66_857898543.arc 66 NO 64 rows selected. SQL> select * from v$log; GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- 12 1 65 104857600 2 YES INACTIVE 715138 13-SEP-14 13 1 66 104857600 2 YES INACTIVE 715158 13-SEP-14 14 1 67 104857600 2 NO CURRENT 715164 13-SEP-14 SQL> 备库操作 SQL> set line 200 SQL> set pagesize 200 SQL> col name format A50 SQL> select name,SEQUENCE#,APPLIED from v$archived_log where dest_id=1; NAME SEQUENCE# APP -------------------------------------------------- ---------- --- /u01/app/oracle/archive/netdata/1_64_857898543.arc 64 YES /u01/app/oracle/archive/netdata/1_65_857898543.arc 65 YES /u01/app/oracle/archive/netdata/1_66_857898543.arc 66 YES /u01/app/oracle/archive/netdata/1_63_857898543.arc 63 YES SQL> select * from v$Log; GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- 12 1 65 104857600 2 YES CLEARING 715138 13-SEP-14 13 1 63 104857600 2 YES CLEARING 714611 13-SEP-14 14 1 67 104857600 2 YES CLEARING_CURRENT 715164 13-SEP-14 主库操作 SQL> ALTER system SET log_archive_dest_state_2 = ‘defer‘; System altered. SQL> SQL> alter system archive log current; System altered. SQL> alter system archive log current; System altered. SQL> alter system archive log current; System altered. SQL> alter system archive log current; System altered. SQL> alter system archive log current; System altered. SQL> 删除归档 SQL> archive log list; Database log mode Archive Mode Automatic archival Enabled Archive destination /u01/app/oracle/archive/netdata Oldest online log sequence 70 Next log sequence to archive 72 Current log sequence 72 SQL> 删除归档 [[email protected] netdata]$ rm -rvf 1\_7* 已删除"1_70_857898543.arc" 已删除"1_71_857898543.arc" 已删除"1_7_857893401.dbf" 主库开启备库归档 SQL> ALTER system SET log_archive_dest_state_2 = ‘enable‘; 备库重新开启应用 SQL> ALTER DATABASE recover managed standby DATABASE disconnect FROM SESSION; Database altered. SQL> System altered. SQL> 查询备库alert.log Waiting for all non-current ORLs to be archived... Media Recovery Waiting for thread 1 sequence 67 Fetching gap sequence in thread 1, gap sequence 67-70 Sat Sep 13 21:00:27 CST 2014 Completed: ALTER DATABASE recover managed standby DATABASE disconnect FROM SESSION Sat Sep 13 21:00:57 CST 2014 FAL[client]: Failed to request gap sequence GAP - thread 1 sequence 67-70 DBID 351758316 branch 857898543 FAL[client]: All defined FAL servers have been attempted. ------------------------------------------------------------- Check that the CONTROL_FILE_RECORD_KEEP_TIME initialization parameter is defined to a value that is sufficiently large enough to maintain adequate log switch information to resolve archivelog gaps. ------------------------------------------------------------- 有gap产生了 备库查询 select name,sequence#,applied from v$archived_log a where a.sequence#=(select max(sequence#) from v$archived_log); NAME SEQUENCE# APP -------------------------------------------------- ---------- --- /u01/app/oracle/archive/netdata/1_66_857898543.arc 66 YES 主库查询 SQL> SELECT SEQUENCE#,FIRST_CHANGE#,NEXT_CHANGE# FROM v$archived_log WHERE SEQUENCE# > 67 ORDER BY 1; SEQUENCE# FIRST_CHANGE# NEXT_CHANGE# ---------- ------------- ------------ 68 745961 745971 69 745971 745984 70 745984 745988 71 745988 746005 SQL> 主库 基于SCN增量备份 RMAN> backup device type disk incremental from scn 715164 database format ‘/u01/backup/netdata_incre%U.bbk‘; Starting backup at 13-SEP-14 using channel ORA_DISK_1 channel ORA_DISK_1: starting full datafile backupset channel ORA_DISK_1: specifying datafile(s) in backupset input datafile fno=00001 name=/u01/app/oracle/oradata/netdata/system01.dbf input datafile fno=00003 name=/u01/app/oracle/oradata/netdata/sysaux01.dbf input datafile fno=00005 name=/u01/app/oracle/oradata/netdata/example01.dbf input datafile fno=00006 name=/u01/app/oracle/oradata/netdata/HTSDK_01.dbf input datafile fno=00007 name=/u01/app/oracle/oradata/netdata/HTSDK_INDEX_01.dbf input datafile fno=00002 name=/u01/app/oracle/oradata/netdata/undotbs01.dbf input datafile fno=00004 name=/u01/app/oracle/oradata/netdata/users01.dbf channel ORA_DISK_1: starting piece 1 at 13-SEP-14 channel ORA_DISK_1: finished piece 1 at 13-SEP-14 piece handle=/u01/backup/netdata_incre0jpie810_1_1.bbk tag=TAG20140913T212904 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:01:18 channel ORA_DISK_1: starting full datafile backupset channel ORA_DISK_1: specifying datafile(s) in backupset including current control file in backupset including current SPFILE in backupset channel ORA_DISK_1: starting piece 1 at 13-SEP-14 channel ORA_DISK_1: finished piece 1 at 13-SEP-14 piece handle=/u01/backup/netdata_incre0kpie83e_1_1.bbk tag=TAG20140913T212904 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:04 Finished backup at 13-SEP-14 RMAN> 主库重新生成控制文件 SQL> ALTER DATABASE CREATE standby controlfile AS ‘/u01/backup/standby.ctl‘; Database altered. 拷贝文件至备库 [[email protected] backup]$ scp * [email protected]:/u01/backup/ [email protected]‘s password: netdata_incre0jpie810_1_1.bbk 100% 17MB 8.5MB/s 00:02 netdata_incre0kpie83e_1_1.bbk 100% 7200KB 7.0MB/s 00:01 standby.ctl 100% 7120KB 7.0MB/s 00:01 备库操作 SQL> shutdown immediate; ORA-01109: database not open Database dismounted. ORACLE instance shut down. SQL> startup nomount; ORACLE instance started. Total System Global Area 704643072 bytes Fixed Size 2098912 bytes Variable Size 192940320 bytes Database Buffers 503316480 bytes Redo Buffers 6287360 bytes SQL> quit 恢复控制文件 RMAN> restore controlfile from ‘/u01/backup/standby.ctl‘; Starting restore at 13-SEP-14 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: sid=541 devtype=DISK channel ORA_DISK_1: copied control file copy output filename=/u01/app/oracle/oradata/netdata/control01.ctl output filename=/u01/app/oracle/oradata/netdata/control02.ctl output filename=/u01/app/oracle/oradata/netdata/control03.ctl Finished restore at 13-SEP-14 RMAN> RMAN> catalog start with ‘/u01/backup‘ 2> ; searching for all files that match the pattern /u01/backup List of Files Unknown to the Database ===================================== File Name: /u01/backup/netdata_incre0jpie810_1_1.bbk File Name: /u01/backup/standby.ctl File Name: /u01/backup/control01.ctl File Name: /u01/backup/netdata_incre0kpie83e_1_1.bbk Do you really want to catalog the above files (enter YES or NO)? yes cataloging files... cataloging done List of Cataloged Files ======================= File Name: /u01/backup/netdata_incre0jpie810_1_1.bbk File Name: /u01/backup/standby.ctl File Name: /u01/backup/control01.ctl File Name: /u01/backup/netdata_incre0kpie83e_1_1.bbk RMAN> recover DATABASE noredo; Starting recover at 13-SEP-14 using channel ORA_DISK_1 channel ORA_DISK_1: starting incremental datafile backupset restore channel ORA_DISK_1: specifying datafile(s) to restore from backup set destination for restore of datafile 00001: /u01/app/oracle/oradata/netdata/system01.dbf destination for restore of datafile 00002: /u01/app/oracle/oradata/netdata/undotbs01.dbf destination for restore of datafile 00003: /u01/app/oracle/oradata/netdata/sysaux01.dbf destination for restore of datafile 00004: /u01/app/oracle/oradata/netdata/users01.dbf destination for restore of datafile 00005: /u01/app/oracle/oradata/netdata/example01.dbf destination for restore of datafile 00006: /u01/app/oracle/oradata/netdata/HTSDK_01.dbf destination for restore of datafile 00007: /u01/app/oracle/oradata/netdata/HTSDK_INDEX_01.dbf channel ORA_DISK_1: reading from backup piece /u01/backup/netdata_incre0jpie810_1_1.bbk channel ORA_DISK_1: restored backup piece 1 piece handle=/u01/backup/netdata_incre0jpie810_1_1.bbk tag=TAG20140913T212904 channel ORA_DISK_1: restore complete, elapsed time: 00:00:04 Finished recover at 13-SEP-14 RMAN> 查询alert 日志 Sat Sep 13 22:04:34 CST 2014 RFS LogMiner: Client disabled from further notification Sat Sep 13 22:04:54 CST 2014 Incremental restore complete of datafile 4 /u01/app/oracle/oradata/netdata/users01.dbf checkpoint is 753898 Incremental restore complete of datafile 2 /u01/app/oracle/oradata/netdata/undotbs01.dbf checkpoint is 753898 last deallocation scn is 669702 Incremental restore complete of datafile 5 /u01/app/oracle/oradata/netdata/example01.dbf checkpoint is 753898 last deallocation scn is 399417 Incremental restore complete of datafile 6 /u01/app/oracle/oradata/netdata/HTSDK_01.dbf checkpoint is 753898 Incremental restore complete of datafile 7 /u01/app/oracle/oradata/netdata/HTSDK_INDEX_01.dbf checkpoint is 753898 Incremental restore complete of datafile 3 /u01/app/oracle/oradata/netdata/sysaux01.dbf checkpoint is 753898 last deallocation scn is 421688 Incremental restore complete of datafile 1 /u01/app/oracle/oradata/netdata/system01.dbf checkpoint is 753898 last deallocation scn is 472342 备库重新应用 SQL> ALTER DATABASE recover managed standby DATABASE disconnect FROM SESSION; Database altered. SQL> 测试归档是否 SQL> alter system switch logfile; System altered. SQL> 查询主备 备库操作 archive log list; Database log mode Archive Mode Automatic archival Enabled Archive destination /u01/app/oracle/archive/netdata Oldest online log sequence 71 Next log sequence to archive 0 Current log sequence 73 col name format A50; col dest_name format A40 col error format A20 set line 200; select name,sequence#,applied from v$archived_log a where a.sequence#=(select max(sequence#) from v$archived_log); NAME SEQUENCE# APP -------------------------------------------------- ---------- --- /u01/app/oracle/archive/netdata/1_72_857898543.arc 72 YES col dest_name format A40 SQL> select dest_name,status,error from v$archive_dest where rownum<3; DEST_NAME STATUS ERROR ---------------------------------------- --------- -------------------- LOG_ARCHIVE_DEST_1 VALID LOG_ARCHIVE_DEST_2 VALID SQL> 主库操作 archive log list; col name format A50; Database log mode Archive Mode Automatic archival Enabled Archive destination /u01/app/oracle/archive/netdata Oldest online log sequence 71 Next log sequence to archive 73 Current log sequence 73 col dest_name format A40 col error format A20 set line 200; select name,sequence#,applied from v$archived_log a where a.sequence#=(select max(sequence#) from v$archived_log); NAME SEQUENCE# APP -------------------------------------------------- ---------- --- /u01/app/oracle/archive/netdata/1_72_857898543.arc 72 NO netdata_sd 72 YES col dest_name format A40 SQL> select dest_name,status,error from v$archive_dest where rownum<3; DEST_NAME STATUS ERROR ---------------------------------------- --------- -------------------- LOG_ARCHIVE_DEST_1 VALID LOG_ARCHIVE_DEST_2 VALID SQL>
时间: 2024-10-06 14:42:37