您当前的位置: 首页 > 数据库教程 > DB2教程 > RMAN备份恢复之归档日志对BLOCKRECOVER的影响

RMAN备份恢复之归档日志对BLOCKRECOVER的影响

作者:guanchaofeng 来源:不详 发布时间: 2009-06-27 20:56 点击: 次
上面一篇简单的介绍了一下RMAN的BLOCKRECOVER的用法,这篇打算介绍一下缺失归档日志对BLOCKRECOVER的影响。 为了演示归档对BLOCKRECOVER的影响,先构造一个例子: RMANbackuptablespacetools; 启动backup于16-6月-07 使用通道ORA_DISK_1 通道ORA_DISK_1:正在

RMAN备份恢复之归档日志对BLOCKRECOVER的影响

  上面一篇简单的介绍了一下RMAN的BLOCKRECOVER的用法,这篇打算介绍一下缺失归档日志对BLOCKRECOVER的影响。
  
  为了演示归档对BLOCKRECOVER的影响,先构造一个例子:
  
  RMAN>backuptablespacetools;
  
  启动backup于16-6月-07
  
  使用通道ORA_DISK_1
  
  通道ORA_DISK_1:正在启动full数据文件备份集
  
  通道ORA_DISK_1:正在指定备份集中的数据文件
  
  输入数据文件fno=00005name=F:ORACLEORADATATEST1TOOLS01.DBF
  
  通道ORA_DISK_1:正在启动段1于16-6月-07
  
  通道ORA_DISK_1:已完成段1于16-6月-07
  
  段handle=F:ORACLEORACLE920DATABASEHIKFE30_1_1comment=NONE
  
  通道ORA_DISK_1:备份集已完成,经过时间:00:00:03
  
  完成backup于16-6月-07
  
  首先备份一下表空间,这个表空间的备份用来作为BLOCKRECOVER的全备份基础。
  
  SQL>CREATETABLETESTTABLESPACETOOLSASSELECTROWNUMID,A.*FROMDBA_OBJECTSA;
  
  表已创建。
  
  SQL>SELECTCOUNT(*)FROMTEST;
  
  COUNT(*)
  
  ----------
  
  28036
  
  SQL>SELECTROWIDFROMTESTWHEREID=1000;
  
  ROWID
  
  ------------------
  
  AAAHApAAFAAAAAbAA8
  
  SQL>SELECTIDFROMTEST
  
  2WHEREROWID>='AAAHApAAFAAAAAbAAA'
  
  3ANDROWID<'AAAHApAAFAAAAAcAAA';
  
  ID
  
  ----------
  
  940
  
  941
  
  942
  
  943
  
  944
  
  945
  
  946
  
  947
  
  .
  
  .
  
  .
  
  1004
  
  1005
  
  1006
  
  已选择67行。
  
  SQL>SELECTDISTINCTDBMS_ROWID.ROWID_RELATIVE_FNO(ROWID),
  
  2DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)
  
  3FROMTEST
  
  4WHEREID>=940
  
  5ANDID<=1006;
  
  DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID)DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)
  
  ------------------------------------------------------------------------
  
  527
  
  SQL>ALTERSYSTEMSWITCHLOGFILE;
  
  系统已更改。
  
  SQL>SELECTMAX(SEQUENCE#)FROMV$ARCHIVED_LOG;
  
  MAX(SEQUENCE#)
  
  --------------
  
  321
  
  SQL>UPDATETESTSETOBJECT_NAME=LOWER(OBJECT_NAME)WHEREID=1000;
  
  已更新1行。
  
  SQL>COMMIT;
  
  提交完成。
  
  SQL>ALTERSYSTEMSWITCHLOGFILE;
  
  系统已更改。
  
  SQL>DELETETESTWHEREID=1;
  
  已删除1行。
  
  SQL>COMMIT;
  
  提交完成。
  
  SQL>ALTERSYSTEMSWITCHLOGFILE;
  
  系统已更改。
  
  SQL>UPDATETESTSETOBJECT_TYPE='TEST'WHEREID=10000;
  
  已更新1行。
  
  SQL>COMMIT;
  
  提交完成。
  
  SQL>ALTERSYSTEMSWITCHLOGFILE;
  
  系统已更改。
  
  SQL>CREATETABLETEST2(IDNUMBER);
  
  表已创建。
  
  SQL>INSERTINTOTEST2VALUES(1);
  
  已创建1行。
  
  SQL>ALTERSYSTEMSWITCHLOGFILE;
  
  系统已更改。
  
  SQL>ALTERSYSTEMSWITCHLOGFILE;
  
  系统已更改。
  
  SQL>ALTERSYSTEMSWITCHLOGFILE;
  
  系统已更改。
  
  SQL>ALTERSYSTEMSWITCHLOGFILE;
  
  系统已更改。
  
  SQL>SELECTNAMEFROMV$ARCHIVED_LOGWHERESEQUENCE#>321;
  
  NAME
  
  ------------------------------------------------------------
  
  F:ORACLEORADATATEST1ARCHIVELOGARC00322.001
  
  F:ORACLEORADATATEST1ARCHIVELOGARC00323.001
  
  F:ORACLEORADATATEST1ARCHIVELOGARC00324.001
  
  F:ORACLEORADATATEST1ARCHIVELOGARC00325.001
  
  F:ORACLEORADATATEST1ARCHIVELOGARC00326.001
  
  F:ORACLEORADATATEST1ARCHIVELOGARC00327.001
  
  F:ORACLEORADATATEST1ARCHIVELOGARC00328.001
  
  已选择7行。
  
  SQL>SELECTSEQUENCE#FROMV$LOG;
  
  SEQUENCE#
  
  ----------
  
  328
  
  329
  
  327
  
  首先建立一张测试表,在这个表中,ID在940和1006之间的记录存储在DATAFILE5BLOCK27中。在归档322中记录了TEST表的ID等于1000的记录的更新,这个更新发生在DATAFILE5BLOCK27上。随后在归档323中,删除了ID等于1的记录,这条记录与BLOCK27无关。在归档324中,更新了ID等于10000的记录,这个修改与BLOCK27也无关。在归档325中,新建TEST2表,并插入数据。归档326就是一个空文件。
  
  因此,除了归档322外,从323到325都与BLOCK27的修改无关。根据Oracle的文档,这些归档的缺失将不会影响BLOCK27的恢复。
  
  为了验证文档的说法,下面将归档322到326修改名称,使得Oracle在恢复时无法找到归档日志。
  
  最后执行的几次ALTERSYSTEMSWITCHLOGFILE操作,是确保SEQUENCE为326的联机重做日志已经被重用,避免Oracle利用联机重做日志来代替归档日志。
  
  准备工作完毕,下面开始模拟坏块。仍然是通过UtralEdit对数据文件进行修改,先是定位数据块的偏移地址:
  
  SQL>SHOWPARAMETERBLOCK_SIZE
  
  NAMETYPEVALUE
  
  -------------------------------------------------------------------------
  
  db_block_sizeinteger8192
  
  SQL>SELECTTO_CHAR(8192*27,'XXXXX')FROMDUAL;
  
  TO_CHA
  
  ------
  
  36000
  
  下面对地址36000后面的数据进行修改,并保存。
  
  执行SQL语句,可以看到下面的错误:
  
  SQL>SELECTCOUNT(*)FROMTEST;
  
  SELECTCOUNT(*)FROMTEST
  
  *
  
  ERROR位于第1行:
  
  ORA-01578:ORACLE数据块损坏(文件号5,块号27)
  
  ORA-01110:数据文件5:'F:ORACLEORADATATEST1TOOLS01.DBF'
  
  下面可以对损坏的数据块进行BLOCKRECOVER,注意这时归档322到326已经被修改名称。
  
  RMAN>blockrecoverdatafile5block27;
  
  启动blockrecover于17-6月-07
  
  正在使用目标数据库控制文件替代恢复目录
  
  分配的通道:ORA_DISK_1
  
  通道ORA_DISK_1:sid=14devtype=DISK
  
  通道ORA_DISK_1:正在恢复块
  
  通道ORA_DISK_1:正在指定要从备份集恢复的块
  
  正在恢复数据文件00005的块
  
  通道ORA_DISK_1:已从备份段1恢复块
  
  段handle=F:ORACLEORACLE920DATABASEHIKFE30_1_1tag=TAG20070617T020728params=NULL
  
  通道ORA_DISK_1:块恢复已完成
  
  正在开始介质的恢复
  
  存档日志线程1序列327已作为文件F:ORACLEORADATATEST1ARCHIVELOGARC00327.001存在于磁盘上
  
  存档日志线程1序列328已作为文件F:ORACLEORADATATEST1ARCHIVELOGARC00328.001存在于磁盘上
  
  存档日志线程1序列329已作为文件F:ORACLEORADATATEST1ARCHIVELOGARC00329.001存在于磁盘上
  
  RMAN-00571:===========================================================
  
  RMAN-00569:===============ERRORMESSAGESTACKFOLLOWS===============
  
  RMAN-00571:===========================================================
  
  RMAN-03002:failureofblockrecovercommandat06/17/200702:33:18
  
  RMAN-06053:unabletoperformmediarecoverybecauseofmissinglog
  
  RMAN-06025:nobackupoflogthread1seq326scn58749837foundtorestore
  
  RMAN-06025:nobackupoflogthread1seq325scn58749812foundtorestore
  
  RMAN-06025:nobackupoflogthread1seq324scn58749793foundtorestore
  
  RMAN-06025:nobackupoflogthread1seq323scn58749778foundtorestore
  
  RMAN-06025:nobackupoflogthread1seq322scn58749749foundtorestore
  
  这个错误的出现是正常的,由于归档322中包含了对BLOCK27的修改,下面恢复归档322的原始名称,再次执行恢复:
  
  RMAN>blockrecoverdatafile5block27;
  
  启动blockrecover于17-6月-07
  
  使用通道ORA_DISK_1
  
  通道ORA_DISK_1:正在恢复块
  
  通道ORA_DISK_1:正在指定要从备份集恢复的块
  
  正在恢复数据文件00005的块
  
  通道ORA_DISK_1:已从备份段1恢复块
  
  段handle=F:ORACLEORACLE920DATABASEHIKFE30_1_1tag=TAG20070617T020728params=NULL
  
  通道ORA_DISK_1:块恢复已完成
  
  正在开始介质的恢复
  
  存档日志线程1序列327已作为文件F:ORACLEORADATATEST1ARCHIVELOGARC00327.001存在于磁盘上
  
  存档日志线程1序列328已作为文件F:ORACLEORADATATEST1ARCHIVELOGARC00328.001存在于磁盘上
  
  存档日志线程1序列329已作为文件F:ORACLEORADATATEST1ARCHIVELOGARC00329.001存在于磁盘上
  
  RMAN-00571:===========================================================
  
  RMAN-00569:===============ERRORMESSAGESTACKFOLLOWS===============
  
  RMAN-00571:===========================================================
  
  RMAN-03002:failureofblockrecovercommandat06/17/200702:36:18
  
  RMAN-06053:unabletoperformmediarecoverybecauseofmissinglog
  
  RMAN-06025:nobackupoflogthread1seq326scn58749837foundtorestore
  
  RMAN-06025:nobackupoflogthread1seq325scn58749812foundtorestore
  
  RMAN-06025:nobackupoflogthread1seq324scn58749793foundtorestore
  
  RMAN-06025:nobackupoflogthread1seq323scn58749778foundtorestore
  
  仍然报错,这说明文档上描述的BLOCKRECOVER可以跨越无关的日志的说法是有问题的。
  
  下面依次恢复323、324的名称并测试发现仍然存在上面的问题。
  
  最后恢复325的名称,目前仅归档326不可见,而这个归档是一个空归档,看看BLOCKRECOVER是否可以跳过空归档进行恢复。
  
  RMAN>blockrecoverdatafile5block27;
  
  启动blockrecover于17-6月-07
  
  使用通道ORA_DISK_1
  
  通道ORA_DISK_1:正在恢复块
  
  通道ORA_DISK_1:正在指定要从备份集恢复的块
  
  正在恢复数据文件00005的块
  
  通道ORA_DISK_1:已从备份段1恢复块
  
  段handle=F:ORACLEORACLE920DATABASEHIKFE30_1_1tag=TAG20070617T020728param
  
  s=NULL
  
  通道ORA_DISK_1:块恢复已完成
  
  正在开始介质的恢复
  
  存档日志线程1序列327已作为文件F:ORACLEORADATATEST1ARCHIVELOGARC00327.001存在于磁盘上
  
  存档日志线程1序列328已作为文件F:ORACLEORADATATEST1ARCHIVELOGARC00328.001存在于磁盘上
  
  存档日志线程1序列329已作为文件F:ORACLEORADATATEST1ARCHIVELOGARC00329.001存在于磁盘上
  
  RMAN-00571:===========================================================
  
  RMAN-00569:===============ERRORMESSAGESTACKFOLLOWS===============
  
  RMAN-00571:===========================================================
  
  RMAN-03002:failureofblockrecovercommandat06/17/200702:41:16
  
  RMAN-06053:unabletoperformmediarecoverybecauseofmissinglog
  
  RMAN-06025:nobackupoflogthread1seq326scn58749837foundtorestore
  
  错误依旧,RMAN连一个空的归档都无法跳过,看来这块的文档描述和实际情况有很大的出入。
  
  从这一点也反映出归档日志的重要性,如果丢失了归档日志,不管是常规恢复还是数据库的恢复都是无法进行的。

分享到:
本文"RMAN备份恢复之归档日志对BLOCKRECOVER的影响"由远航站长收集整理而来,仅供大家学习与参考使用。更多免费得5元微信现金红包制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 广告合作 - 免费得5元微信现金红包声明 - 友情连接- 免费得5元微信现金红包地图 - 站点地图 - 返回顶部
Copyright ? 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与免费得5元微信现金红包编程等各类免费得5元微信现金红包制作教程.
官方QQ:445490277 免费得5元微信现金红包群:26680406 免费得5元微信现金红包备案号:豫ICP备07500620号-4