由于Standby停机造成主备归档不一致,从而产生GAP的解决方案_20100128

由于Standby停机造成主备归档不一致,从而产生GAP的解决方案

环境:
Oracle9i + Suse9 + DataGuard + 默认的最大性能模式

Primary参数文件:
*.log_archive_dest_1='LOCATION=/u01/arch'
*.log_archive_dest_2='SERVICE=standby LGWR'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'


Standby参数文件:
*.fal_server='primary'
*.fal_client='standby'
DB_FILE_NAME_CONVERT=('/u01/oracle/oradata/dzzds20','/u01/oracle/oradata/dzzds20')
LOG_FILE_NAME_CONVERT=('/u01/oracle/oradata/dzzds20','/u01/oracle/oradata/dzzds20')
*.standby_file_management=auto
*.standby_archive_dest='/u01/arch'
LOG_ARCHIVE_DEST_1='LOCATION=/u01/arch'
LOG_ARCHIVE_DEST_STATE_1=ENABLE


由于停机造成主备不一致,归档#Sequence = 538 到541的归档日志未应用到备库

备库中Alert.log
Mon Jan 25 16:23:51 2010
Failed to request gap sequence. Thread #: 1, gap sequence: 538-541
All FAL server has been attempted.

SQL>  select * from V$ARCHIVE_GAP;

   THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#
---------- ------------- --------------
         1           538            541

               
主库有备份,但本地磁盘上的归档已通过RMAN delete archivelog 删除,必须从磁带上恢复.
现要求重新达到主备的一致性状态.

解决方案:
1 将归档538 -- 541 从磁带中恢复到Primary的归档路径.观察是否能够主动传送到Standby? 可以通过切换日志的方法来触发日志传输?

分析:
控制文件和Catalog 中记录 Sequence 538-541的信息已删除,无法恢复Archivelog. 只能先恢复控制文件.
这样必须做Resetlogs,会丢失主库之前所有的备份,且要重启Primay,影响正常业务不合适

2 重做Standby (the last restore)

分析:在Primary不down的情况下利用RMAN做Standby ,这种方案是比较彻底的,但不够理想.

参考<< RMAN学习笔记_ Duplicate重做DataGuard>>

5 最终解决方案DBMS_backup_retore 包

解决过程:
查找538-541这些归档文件在哪个Backup piece里面.

SQL>  select * from v_$backup_redolog where sequence# in (538,539,540,541);

     RECID      STAMP  SET_STAMP  SET_COUNT    THREAD#  SEQUENCE# RESETLOGS_CHANGE# RESETLOGS FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME         BLOCKS BLOCK_SIZE
---------- ---------- ---------- ---------- ---------- ---------- ----------------- --------- ------------- --------- ------------ --------- ---------- ----------
       408  709002012  709002011         65          1        539                 1 01-JUL-09    2.6961E+12 22-JAN-10   2.6961E+12 23-JAN-10            558        512
       410  709002012  709002011         65          1        538                 1 01-JUL-09    2.6961E+12 22-JAN-10   2.6961E+12 22-JAN-10              1        512
       411  709002595  709002594         68          1        540                 1 01-JUL-09    2.6961E+12 23-JAN-10   2.6961E+12 23-JAN-10             10        512
       412  709088404  709088403         70          1        541                 1 01-JUL-09    2.6961E+12 23-JAN-10   2.6961E+12 24-JAN-10           1203        512
       413  709088404  709088403         70          1        540                 1 01-JUL-09    2.6961E+12 23-JAN-10   2.6961E+12 23-JAN-10             10        512

540归档出现在两个Backup Piece中,说明,540是重复备份的.

由此注意:备份过程中,Backup piece的Format 一定要标记backup set id, and backup piece ID;

declare
  devtype varchar2(256);
  done boolean;
begin
  devtype := sys.dbms_backup_restore.deviceAllocate(type=>'',ident=>'t1');
  sys.dbms_backup_restore.restoreSetArchivedLog(destination=>'/u01/arch/');
  sys.dbms_backup_restore.restoreArchivedlog(thread=>1,sequence=>538);
  sys.dbms_backup_restore.restoreArchivedlog(thread=>1,sequence=>539);
  sys.dbms_backup_restore.restorebackuppiece(done=>done,handle=>'/u01/backup/dzzd/DZZDS20x_65_1.log',params=>null);
  sys.dbms_backup_restore.devicedeallocate;
end;
/


declare
  devtype varchar2(256);
  done boolean;
begin
  devtype := sys.dbms_backup_restore.deviceAllocate(type=>'',ident=>'t2');
  sys.dbms_backup_restore.restoreSetArchivedLog(destination=>'/u01/arch/');
  sys.dbms_backup_restore.restoreArchivedlog(thread=>1,sequence=>540);
  sys.dbms_backup_restore.restoreArchivedlog(thread=>1,sequence=>541);
  sys.dbms_backup_restore.restorebackuppiece(done=>done,handle=>'/u01/backup/dzzd/DZZDS20x_70_1.log',params=>null);
  sys.dbms_backup_restore.devicedeallocate;
end;
/

归档恢复后,Oracle会自动传递归档到备端,备端会自动应用归档.可通过查看两边Log来观察.

应用完成后,查看GAP
SQL> select * from V$ARCHIVE_GAP;

no rows selected

至此问题解决


相关问题
1 Primary上的归档538-- 541为什么会被删掉,之前不是测试过如没用应用到Standby是不会删除本地归档的吗?
可能的原因是,当Standby被停机后,不再遵循这个规则?
进一步学习DataGuard相关文档,什么情况下会产生Gap.

2 这证明目前的备份与归档的处理策略在Dataguard环境下不够完善,
在GoldenGate环境下也同样存在问题

要改进,确保删除归档之前,归档已传输应用到了备库或远端.


3 如何手动触发FAL去取Gap 归档?

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10248702/viewspace-626241/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10248702/viewspace-626241/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值