oracle特殊恢复-bbed修改某个数据文件头

前端之家收集整理的这篇文章主要介绍了oracle特殊恢复-bbed修改某个数据文件头前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

数据文件头中的scn要与控制文件中的scn一致,数据库才可以open,在open过程中我们可以通过bbed来修改某个数据文件头的scn,来欺骗oracle,来open库。

1、环境如下

使用Oracle 11gR2进行测试,具体版本为11.2.0.4

  1. SYS@xbtstsql>selectfile#,name,checkpoint_change#,checkpoint_timefromv$datafile;
  2.  
  3. FILE#NAMECHECKPOINT_CHANGE#CHECKPOINT_TIME
  4. ---------------------------------------------------------------------------------------
  5. 1/dbdata/oradata/xbtst/system01.dbf12330662016-11-1011:23:44
  6. 2/dbdata/oradata/xbtst/sysaux01.dbf12330662016-11-1011:23:44
  7. 3/dbdata/oradata/xbtst/undotbs01.dbf12330662016-11-1011:23:44
  8. 4/dbdata/oradata/xbtst/users01.dbf12330662016-11-1011:23:44
  9. 5/dbdata/oradata/xbtst/moe01.dbf12330662016-11-1011:23:44

2、模拟某个数据文件在问题

shutdown immediate数据库,然后拷贝moe01.dbf这个数据文件,然后打开数据库,做日志切换,然后shutdown immediate,再把之前的拷贝替换现在的moe01.dbf数据文件

  1. SYS@xbtstsql>shutdownimmediate
  2. Databaseclosed.
  3. Databasedismounted.
  4. ORACLEinstanceshutdown.
  5.  
  6. [oracle@tstdb-25-220xbtst]$cpmoe01.dbfmoe01.dbf.bak
  7. [oracle@tstdb-25-220xbtst]$ll
  8. 总用量3872076
  9. -rw-r-----.1oracleoinstall9748480111009:48control01.ctl
  10. -rw-r-----.1oracleoinstall9748480111009:48control02.ctl
  11. -rw-r-----.1oracleoinstall1073750016111009:48moe01.dbf
  12. -rw-r-----.1oracleoinstall1073750016111011:23moe01.dbf.bak
  13. -rw-r-----.1oracleoinstall5242931211913:13redo01.log
  14. -rw-r-----.1oracleoinstall5242931211922:00redo02.log
  15. -rw-r-----.1oracleoinstall52429312111009:48redo03.log
  16. -rw-r-----.1oracleoinstall587210752111009:48sysaux01.dbf
  17. -rw-r-----.1oracleoinstall807411712111009:48system01.dbf
  18. -rw-r-----.1oracleoinstall3041689611922:00temp01.dbf
  19. -rw-r-----.1oracleoinstall131080192111009:48undotbs01.dbf
  20. -rw-r-----.1oracleoinstall111419392111009:48users01.dbf
  21.  
  22. SYS@xbtstsql>startup
  23. ORACLEinstancestarted.
  24.  
  25. TotalSystemGlobalArea2455228416bytes
  26. FixedSize2255712bytes
  27. VariableSize620758176bytes
  28. DatabaseBuffers1811939328bytes
  29. RedoBuffers20275200bytes
  30. Databasemounted.
  31. DatabaSEOpened.
  32.  
  33. SYS@xbtstsql>altersystemswitchlogfile;
  34.  
  35. Systemaltered.
  36.  
  37. SYS@xbtstsql>altersystemswitchlogfile;
  38.  
  39. Systemaltered.
  40.  
  41. SYS@xbtstsql>altersystemswitchlogfile;
  42.  
  43. Systemaltered.
  44.  
  45. SYS@xbtstsql>shutdownimmediate
  46. Databaseclosed.
  47. Databasedismounted.
  48. ORACLEinstanceshutdown.
  49.  
  50. [oracle@tstdb-25-220xbtst]$cpmoe01.dbfmoe01.dbf.bak.f
  51. [oracle@tstdb-25-220xbtst]$cpmoe01.dbf.bakmoe01.dbf
  52.  
  53. 启动数据库报错
  54. SYS@xbtstsql>startup
  55. ORACLEinstancestarted.
  56.  
  57. TotalSystemGlobalArea2455228416bytes
  58. FixedSize2255712bytes
  59. VariableSize620758176bytes
  60. DatabaseBuffers1811939328bytes
  61. RedoBuffers20275200bytes
  62. Databasemounted.
  63. ORA-01113:file5needsmediarecovery
  64. ORA-01110:datafile5:'/dbdata/oradata/xbtst/moe01.dbf'
  65.  
  66. SYS@xbtstsql>recoverdatafile5;
  67. ORA-00279:change1233063generatedat11/10/201609:48:02neededforthread1
  68. ORA-00289:suggestion:/apps/oracle/11.2.0/db_1/dbs/arch1_24_925478204.dbf
  69. ORA-00280:change1233063forthread1isinsequence#24
  70.  
  71.  
  72. Specifylog:{<RET>=suggested|filename|AUTO|CANCEL}
  73. auto
  74. ORA-00308:cannotopenarchivedlog'/apps/oracle/11.2.0/db_1/dbs/arch1_24_925478204.dbf'
  75. ORA-27037:unabletoobtainfilestatus
  76. Linux-x86_64Error:2:Nosuchfileordirectory
  77. Additionalinformation:3
  78.  
  79.  
  80. ORA-00308:cannotopenarchivedlog'/apps/oracle/11.2.0/db_1/dbs/arch1_24_925478204.dbf'
  81. ORA-27037:unabletoobtainfilestatus
  82. Linux-x86_64Error:2:Nosuchfileordirectory
  83. Additionalinformation:3

3、场景模拟出来了,下面是修复过程

使用BBED,将文件头的SCN等关键信息修改到与控制文件control file相匹配即可

  1. SYS@xbtstsql>selectfile#,CHECKPOINT_CHANGE#fromv$datafile;
  2.  
  3. FILE#CHECKPOINT_CHANGE#
  4. ----------------------------
  5. 11233692
  6. 21233692
  7. 31233692
  8. 41233692
  9. 51233692
  10.  
  11. SYS@xbtstsql>selectCHECKPOINT_CHANGE#fromv$database;
  12.  
  13. CHECKPOINT_CHANGE#
  14. ------------------
  15. 1233692
  16.  
  17. SYS@xbtstsql>selectfile#,recover,fuzzy,CHECKPOINT_CHANGE#fromv$datafile_header;
  18.  
  19. FILE#RECFUZCHECKPOINT_CHANGE#
  20. ----------------------------------
  21. 1NONO1233692
  22. 2NONO1233692
  23. 3NONO1233692
  24. 4NONO1233692
  25. 5YESNO1233063

控制文件中datafile5的scn是:1233692,而数据文件头中的scn是:1233063

使用bbed将datafile5的数据文件头对应的SCN修改为与其他文件相同,我们先看一下users01.dbf这个文件文件

  1. BBED>setfilename'/dbdata/oradata/xbtst/users01.dbf'
  2. FILENAME/dbdata/oradata/xbtst/users01.dbf
  3.  
  4. BBED>setblock1
  5. BLOCK#1
  6.  
  7. BBED>map
  8. File:/dbdata/oradata/xbtst/users01.dbf(0)
  9. Block:1Dba:0x00000000
  10. ------------------------------------------------------------
  11. DataFileHeader
  12.  
  13. structkcvfh,860bytes@0
  14.  
  15. ub4tailchk@8188

因为我们要修改数据文件头,因此我们需要关注四个偏移量offset点,分别为484、492、140和148

1、datafile 的file header 存储在第一个block里

2、Oracle considers four attributes of this data structure when determining if a datafile is sync with the other data files of the database:(不同oracle版本offset可能不同)

(1)kscnbas (at offset 484) � SCN of last change to the datafile.

(2)kcvcptim (at offset 492) -Time of the last change to the datafile.

(3)kcvfhcpc (at offset 140) � Checkpoint count.

(4)kcvfhccc (at offset 148) � Unknown,but is always 1 less than thecheckpoint point count.

Oracle有4个属性来判断datafile 是否和其他的datafile 一致,如果都一致,可以正常操作,如果不一致,那么会报ORA-01113错误

下面我们看下这几个offset

  1. BBED>setoffset484
  2. OFFSET484
  3.  
  4. BBED>dump
  5. File:/dbdata/oradata/xbtst/users01.dbf(0)
  6. Block:1Offsets:484to995Dba:0x00000000
  7. ------------------------------------------------------------------------
  8. 1cd3120000000000bd384937010000001b00000030010000100051f202000000
  9. 0000000000000000000000000000000000000000000000000000000000000000
  10. 0000000000000000000000000000000000000000000000000000000000000000
  11. 0000000000000000000000000000000000000000000000000000000000000000
  12. 0000000000000000000000000000000000000000000000000000000000000000
  13. 0d000d000d000100000000000000000000000000020000010300000000000000
  14. 0000000000000000000000000000000000000000000000000000000000000000
  15. 0000000000000000000000000000000000000000000000000000000000000000
  16. 0000000000000000000000000000000000000000000000000000000000000000
  17. 0000000000000000000000000000000000000000000000000000000000000000
  18. 0000000000000000000000000000000000000000000000000000000000000000
  19. 0000000000000000000000000000000000000000000000000000000000000000
  20. 0000000000000000000000000000000000000000000000000000000000000000
  21. 0000000000000000000000000000000000000000000000000000000000000000
  22. 0000000000000000000000000000000000000000000000000000000000000000
  23. 0000000000000000000000000000000000000000000000000000000000000000
  24.  
  25. <32bytesperline>
  26.  
  27. BBED>setoffset492
  28. OFFSET492
  29.  
  30. BBED>dump
  31. File:/dbdata/oradata/xbtst/users01.dbf(0)
  32. Block:1Offsets:492to1003Dba:0x00000000
  33. ------------------------------------------------------------------------
  34. bd384937010000001b00000030010000100051f2020000000000000000000000
  35. 0000000000000000000000000000000000000000000000000000000000000000
  36. 0000000000000000000000000000000000000000000000000000000000000000
  37. 0000000000000000000000000000000000000000000000000000000000000000
  38. 0000000000000000000000000000000000000000000000000d000d000d000100
  39. 0000000000000000000000000200000103000000000000000000000000000000
  40. 0000000000000000000000000000000000000000000000000000000000000000
  41. 0000000000000000000000000000000000000000000000000000000000000000
  42. 0000000000000000000000000000000000000000000000000000000000000000
  43. 0000000000000000000000000000000000000000000000000000000000000000
  44. 0000000000000000000000000000000000000000000000000000000000000000
  45. 0000000000000000000000000000000000000000000000000000000000000000
  46. 0000000000000000000000000000000000000000000000000000000000000000
  47. 0000000000000000000000000000000000000000000000000000000000000000
  48. 0000000000000000000000000000000000000000000000000000000000000000
  49. 0000000000000000000000000000000000000000000000000000000000000000
  50.  
  51. <32bytesperline>
  52.  
  53. BBED>setoffset140
  54. OFFSET140
  55.  
  56. BBED>dump
  57. File:/dbdata/oradata/xbtst/users01.dbf(0)
  58. Block:1Offsets:140to651Dba:0x00000000
  59. ------------------------------------------------------------------------
  60. 7800000014ff4737770000000000000000000000000000000000000000000000
  61. 0000000000000000000000000000000000000000000000000000000000000000
  62. 0000000000000000000000000000000000000000000000000000000000000000
  63. 0000000000000000000000000000000000000000000000000000000000000000
  64. 0000000000000000000000000000000000000000000000000000000000000000
  65. 0000000000000000000000000000000000000000000000000000000000000000
  66. 0400000005005553455253000000000000000000000000000000000000000000
  67. 0000000004000000000000000000000000000000000000000000000000000000
  68. 00000000000000000000000000000000000000007ac921310100000000000000
  69. 0000000000000000000000000000000000000000000000000000000000000000
  70. 0000000000000000000000000000000000000000000000001cd3120000000000
  71. bd384937010000001b00000030010000100051f2020000000000000000000000
  72. 0000000000000000000000000000000000000000000000000000000000000000
  73. 0000000000000000000000000000000000000000000000000000000000000000
  74. 0000000000000000000000000000000000000000000000000000000000000000
  75. 0000000000000000000000000000000000000000000000000d000d000d000100
  76.  
  77. <32bytesperline>
  78.  
  79. BBED>setoffset148
  80. OFFSET148
  81.  
  82. BBED>dump
  83. File:/dbdata/oradata/xbtst/users01.dbf(0)
  84. Block:1Offsets:148to659Dba:0x00000000
  85. ------------------------------------------------------------------------
  86. 7700000000000000000000000000000000000000000000000000000000000000
  87. 0000000000000000000000000000000000000000000000000000000000000000
  88. 0000000000000000000000000000000000000000000000000000000000000000
  89. 0000000000000000000000000000000000000000000000000000000000000000
  90. 0000000000000000000000000000000000000000000000000000000000000000
  91. 0000000000000000000000000000000000000000000000000400000005005553
  92. 4552530000000000000000000000000000000000000000000000000004000000
  93. 0000000000000000000000000000000000000000000000000000000000000000
  94. 0000000000000000000000007ac9213101000000000000000000000000000000
  95. 0000000000000000000000000000000000000000000000000000000000000000
  96. 000000000000000000000000000000001cd3120000000000bd38493701000000
  97. 1b00000030010000100051f20200000000000000000000000000000000000000
  98. 0000000000000000000000000000000000000000000000000000000000000000
  99. 0000000000000000000000000000000000000000000000000000000000000000
  100. 0000000000000000000000000000000000000000000000000000000000000000
  101. 000000000000000000000000000000000d000d000d0001000000000000000000
  102.  
  103. <32bytesperline>

其中,位于484和488偏移量的是数据文件对应的SCN编号。在Oracle内部,SCN是使用wrap*4*1024*1024*1024+base来进行标示的。通常我们看到的数据库wrap都是0。位于492偏移量的是最后一次检查点对应的时间信息。位于140和148偏移量的是检查点次数。这些信息都是会由于时间推动和检查点动作引起变化,我们严格情况下,需要保证文件头块的信息和控制文件信息一致。


另外一点,由于Linux是Little字节系统,要关注写入时候的格式问题。最简单的方式是dump一下偏移量,看看是怎么保存的。

  1. BBED>dump
  2. File:/dbdata/oradata/xbtst/users01.dbf(0)
  3. Block:1Offsets:484to995Dba:0x00000000
  4. ------------------------------------------------------------------------
  5. 1cd3120000000000bd384937010000001b00000030010000100051f202000000
  6. 0000000000000000000000000000000000000000000000000000000000000000
  7. 0000000000000000000000000000000000000000000000000000000000000000

然后我们修改moe01.dbf的文件头(修改这几个offset,我这里只修改了484、492就可以open库了)

  1. BBED>setfilename'/dbdata/oradata/xbtst/moe01.dbf'
  2. FILENAME/dbdata/oradata/xbtst/moe01.dbf
  3.  
  4. BBED>setblock1
  5. BLOCK#1
  6.  
  7. BBED>setmodeedit
  8. MODEEdit
  9.  
  10. BBED>setoffset484
  11. OFFSET484
  12.  
  13. BBED>dump
  14. File:/dbdata/oradata/xbtst/moe01.dbf(0)
  15. Block:1Offsets:484to995Dba:0x00000000
  16. ------------------------------------------------------------------------
  17. a7d01200000000005220493701000000180000004d8d0000100051f202000000
  18. 0000000000000000000000000000000000000000000000000000000000000000
  19. 0000000000000000000000000000000000000000000000000000000000000000
  20. 0000000000000000000000000000000000000000000000000000000000000000
  21. 0000000000000000000000000000000000000000000000000000000000000000
  22. 0d000d000d000100000000000000000000000000020040010000000000000000
  23. 0000000000000000000000000000000000000000000000000000000000000000
  24. 0000000000000000000000000000000000000000000000000000000000000000
  25. 0000000000000000000000000000000000000000000000000000000000000000
  26. 0000000000000000000000000000000000000000000000000000000000000000
  27. 0000000000000000000000000000000000000000000000000000000000000000
  28. 0000000000000000000000000000000000000000000000000000000000000000
  29. 0000000000000000000000000000000000000000000000000000000000000000
  30. 0000000000000000000000000000000000000000000000000000000000000000
  31. 0000000000000000000000000000000000000000000000000000000000000000
  32. 0000000000000000000000000000000000000000000000000000000000000000
  33.  
  34. <32bytesperline>
  35.  
  36. BBED>m/x1cd31200484
  37. Warning:contentsofprevIoUsBIFILEwillbelost.Proceed?(Y/N)y
  38. File:/dbdata/oradata/xbtst/moe01.dbf(0)
  39. Block:1Offsets:484to995Dba:0x00000000
  40. ------------------------------------------------------------------------
  41. 1cd31200000000005220493701000000180000004d8d0000100051f202000000
  42. 0000000000000000000000000000000000000000000000000000000000000000
  43. 0000000000000000000000000000000000000000000000000000000000000000
  44. 0000000000000000000000000000000000000000000000000000000000000000
  45. 0000000000000000000000000000000000000000000000000000000000000000
  46. 0d000d000d000100000000000000000000000000020040010000000000000000
  47. 0000000000000000000000000000000000000000000000000000000000000000
  48. 0000000000000000000000000000000000000000000000000000000000000000
  49. 0000000000000000000000000000000000000000000000000000000000000000
  50. 0000000000000000000000000000000000000000000000000000000000000000
  51. 0000000000000000000000000000000000000000000000000000000000000000
  52. 0000000000000000000000000000000000000000000000000000000000000000
  53. 0000000000000000000000000000000000000000000000000000000000000000
  54. 0000000000000000000000000000000000000000000000000000000000000000
  55. 0000000000000000000000000000000000000000000000000000000000000000
  56. 0000000000000000000000000000000000000000000000000000000000000000
  57.  
  58. <32bytesperline>
  59.  
  60. BBED>m/xbd384937492
  61. BBED-00209:invalidnumber(bd384937)
  62.  
  63.  
  64. BBED>m/xbd38492
  65. File:/dbdata/oradata/xbtst/moe01.dbf(0)
  66. Block:1Offsets:492to1003Dba:0x00000000
  67. ------------------------------------------------------------------------
  68. bd38493701000000180000004d8d0000100051f2020000000000000000000000
  69. 0000000000000000000000000000000000000000000000000000000000000000
  70. 0000000000000000000000000000000000000000000000000000000000000000
  71. 0000000000000000000000000000000000000000000000000000000000000000
  72. 0000000000000000000000000000000000000000000000000d000d000d000100
  73. 0000000000000000000000000200400100000000000000000000000000000000
  74. 0000000000000000000000000000000000000000000000000000000000000000
  75. 0000000000000000000000000000000000000000000000000000000000000000
  76. 0000000000000000000000000000000000000000000000000000000000000000
  77. 0000000000000000000000000000000000000000000000000000000000000000
  78. 0000000000000000000000000000000000000000000000000000000000000000
  79. 0000000000000000000000000000000000000000000000000000000000000000
  80. 0000000000000000000000000000000000000000000000000000000000000000
  81. 0000000000000000000000000000000000000000000000000000000000000000
  82. 0000000000000000000000000000000000000000000000000000000000000000
  83. 0000000000000000000000000000000000000000000000000000000000000000
  84.  
  85. <32bytesperline>
  86.  
  87. BBED>m/x4937494
  88. File:/dbdata/oradata/xbtst/moe01.dbf(0)
  89. Block:1Offsets:494to1005Dba:0x00000000
  90. ------------------------------------------------------------------------
  91. 493701000000180000004d8d0000100051f20200000000000000000000000000
  92. 0000000000000000000000000000000000000000000000000000000000000000
  93. 0000000000000000000000000000000000000000000000000000000000000000
  94. 0000000000000000000000000000000000000000000000000000000000000000
  95. 000000000000000000000000000000000000000000000d000d000d0001000000
  96. 0000000000000000000002004001000000000000000000000000000000000000
  97. 0000000000000000000000000000000000000000000000000000000000000000
  98. 0000000000000000000000000000000000000000000000000000000000000000
  99. 0000000000000000000000000000000000000000000000000000000000000000
  100. 0000000000000000000000000000000000000000000000000000000000000000
  101. 0000000000000000000000000000000000000000000000000000000000000000
  102. 0000000000000000000000000000000000000000000000000000000000000000
  103. 0000000000000000000000000000000000000000000000000000000000000000
  104. 0000000000000000000000000000000000000000000000000000000000000000
  105. 0000000000000000000000000000000000000000000000000000000000000000
  106. 0000000000000000000000000000000000000000000000000000000000000000
  107.  
  108. <32bytesperline>
  109.  
  110. BBED>sumapply
  111. CheckvalueforFile0,Block1:
  112. current=0x1683,required=0x1683
  113.  
  114. BBED>verify
  115. DBVERIFY-Verificationstarting
  116. FILE=/dbdata/oradata/xbtst/moe01.dbf
  117. BLOCK=1
  118.  
  119.  
  120. DBVERIFY-Verificationcomplete
  121.  
  122. TotalBlocksExamined:1
  123. TotalBlocksProcessed(Data):0
  124. TotalBlocksFailing(Data):0
  125. TotalBlocksProcessed(Index):0
  126. TotalBlocksFailing(Index):0
  127. TotalBlocksEmpty:0
  128. TotalBlocksMarkedCorrupt:0
  129. TotalBlocksInflux:0
  130. Message531notfound;product=RDBMS;facility=BBED

这时我们再次查看各个数据文件头的scn,发现scn一致了

  1. SYS@xbtstsql>selectfile#,CHECKPOINT_CHANGE#fromv$datafile_header;
  2.  
  3. FILE#RECFUZCHECKPOINT_CHANGE#
  4. ----------------------------------
  5. 1NONO1233692
  6. 2NONO1233692
  7. 3NONO1233692
  8. 4NONO1233692
  9. 5YESNO1233692

试着open库

  1. SYS@xbtstsql>alterdatabaSEOpen
  2. 2;
  3. alterdatabaSEOpen
  4. *
  5. ERRORatline1:
  6. ORA-01113:file5needsmediarecovery
  7. ORA-01110:datafile5:'/dbdata/oradata/xbtst/moe01.dbf'
  8.  
  9.  
  10. SYS@xbtstsql>recoverdatafile5;
  11. Mediarecoverycomplete.
  12. SYS@xbtstsql>alterdatabaSEOpen;
  13.  
  14. Databasealtered.

看一下alert文件

  1. ALTERDATABASERECOVERdatafile5
  2. MediaRecoveryStart
  3. SerialMediaRecoverystarted
  4. MediaRecoveryComplete(xbtst)
  5. Completed:ALTERDATABASERECOVERdatafile5
  6. ThuNov1013:47:242016
  7. alterdatabaSEOpen
  8. ThuNov1013:47:252016
  9. Thread1openedatlogsequence27
  10. Currentlog#3seq#27mem#0:/dbdata/oradata/xbtst/redo03.log
  11. Successfulopenofredothread1
  12. MTTRadvisoryisdisabledbecauseFAST_START_MTTR_TARGETisnotset
  13. ThuNov1013:47:252016
  14. SMON:enablingcacherecovery
  15. [20910]SuccessfullyonlinedUndoTablespace2.
  16. Undoinitializationfinishedserial:0start:3710149144end:3710149224diff:80(0seconds)
  17. Verifyingfileheadercompatibilityfor11gtablespaceencryption..
  18. Verifying11gfileheadercompatibilityfortablespaceencryptioncompleted
  19. SMON:enablingtxrecovery
  20. DatabaseCharactersetisAL32UTF8
  21. NoResourceManagerplanactive
  22. replication_dependency_trackingturnedoff(noasyncmultimasterreplicationfound)
  23. StartingbackgroundprocessQMNC
  24. ThuNov1013:47:252016
  25. QMNCstartedwithpid=20,OSid=21409
  26. Completed:alterdatabaSEOpen

在本次恢复过程中,recover是可行的,原因是该库并没做过resetlog,如果datafile是在 resetlog之前就已经offline的数据文件,那recover是不可行的。

猜你在找的Oracle相关文章