联系:手机/微信(+86 17813235971) QQ(107644445)
作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]
一个朋友数据库因异常断电,数据库不能正常启动,使用dbv检测错误如下:
C:\Users\XIFENFEI\Downloads>dbv file=users01.dbf end=5 DBVERIFY: Release 11.2.0.3.0 - Production on 星期二 6月 5 18:17:27 2012 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. DBVERIFY - 开始验证: FILE = C:\USERS\XIFENFEI\DOWNLOADS\USERS01.DBF 页 1 标记为损坏 Corrupt block relative dba: 0x00000001 (file 0, block 1) Bad header found during dbv: Data in bad block: type: 11 format: 2 rdba: 0x00000000 last change scn: 0x0000.00000000 seq: 0x1 flg: 0x04 spare1: 0x0 spare2: 0x0 spare3: 0x0 consistency value in tail: 0x00000b01 check value in block header: 0x2f1f computed block checksum: 0x0 页 2 标记为损坏 Corrupt block relative dba: 0x00000002 (file 0, block 2) Bad header found during dbv: Data in bad block: type: 29 format: 2 rdba: 0x01000002 last change scn: 0x0000.0018c7fa seq: 0x2 flg: 0x04 spare1: 0x0 spare2: 0x0 spare3: 0x0 consistency value in tail: 0xc7fa1d02 check value in block header: 0x82ca computed block checksum: 0x0 页 3 标记为损坏 Corrupt block relative dba: 0x00000003 (file 0, block 3) Bad header found during dbv: Data in bad block: type: 30 format: 2 rdba: 0x01000003 last change scn: 0x0000.0018c7fa seq: 0x1 flg: 0x04 spare1: 0x0 spare2: 0x0 spare3: 0x0 consistency value in tail: 0xc7fa1e01 check value in block header: 0x32c9 computed block checksum: 0x0 页 4 标记为损坏 Corrupt block relative dba: 0x00000004 (file 0, block 4) Bad header found during dbv: Data in bad block: type: 30 format: 2 rdba: 0x01000004 last change scn: 0x0000.00004adc seq: 0x1 flg: 0x04 spare1: 0x0 spare2: 0x0 spare3: 0x0 consistency value in tail: 0x4adc1e01 check value in block header: 0x8199 computed block checksum: 0x0 页 5 标记为损坏 Corrupt block relative dba: 0x00000005 (file 0, block 5) Bad header found during dbv: Data in bad block: type: 30 format: 2 rdba: 0x01000005 last change scn: 0x0000.00004ade seq: 0x1 flg: 0x04 spare1: 0x0 spare2: 0x0 spare3: 0x0 consistency value in tail: 0x4ade1e01 check value in block header: 0xc190 computed block checksum: 0x0 DBVERIFY - 验证完成 检查的页总数: 5 处理的页总数 (数据): 0 失败的页总数 (数据): 0 处理的页总数 (索引): 0 失败的页总数 (索引): 0 处理的页总数 (其他): 0 处理的总页数 (段) : 0 失败的总页数 (段) : 0 空的页总数: 0 标记为损坏的总页数: 5 流入的页总数: 0 加密的总页数 : 0 最高块 SCN : 0 (0.0)
对于这样的错误,特别是Corrupt block relative dba出现奇怪的提示(file 0),我第一反应就是数据文件header出现了问题.在eygle的耐心帮忙和提示下,使用bbed重现了该错误,并且找出了dbv中两个dba(Corrupt block relative dba和rdba)和bbed中相对应的值.通过实验重现相关结果.
dbv检查无坏块
[oracle@xifenfei tmp]$ dbv file=/u01/oracle/oradata/ora11g/xifenfei02.dbf blocksize=8192 DBVERIFY: Release 11.2.0.3.0 - Production on Fri Jun 1 03:34:46 2012 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. DBVERIFY - Verification starting : FILE = /u01/oracle/oradata/ora11g/xifenfei02.dbf Block Checking: DBA = 25179275, Block Type = KTB-managed data block data header at 0xb526707c kdbchk: row locked by non-existent transaction table=0 slot=0 lockid=2 ktbbhitc=3 Page 13451 failed with check code 6101 Block Checking: DBA = 25179287, Block Type = KTB-managed data block data header at 0xb527f064 kdbchk: row locked by non-existent transaction table=0 slot=0 lockid=2 ktbbhitc=2 Page 13463 failed with check code 6101 DBVERIFY - Verification complete Total Pages Examined : 15360 Total Pages Processed (Data) : 12932 Total Pages Failing (Data) : 2 Total Pages Processed (Index): 0 Total Pages Failing (Index): 0 Total Pages Processed (Other): 291 Total Pages Processed (Seg) : 0 Total Pages Failing (Seg) : 0 Total Pages Empty : 2137 Total Pages Marked Corrupt : 0 Total Pages Influx : 0 Total Pages Encrypted : 0 Highest block SCN : 1551567 (0.1551567)
修改数据块rdba_kcbh
BBED> set block 150 BLOCK# 150 BBED> map File: /u01/oracle/oradata/ora11g/xifenfei02.dbf (1) Block: 150 Dba:0x00400096 ------------------------------------------------------------ KTB Data Block (Table/Cluster) struct kcbh, 20 bytes @0 struct ktbbh, 96 bytes @20 struct kdbh, 14 bytes @124 struct kdbt[1], 4 bytes @138 sb2 kdbr[71] @142 ub1 freespace[910] @284 ub1 rowdata[6994] @1194 ub4 tailchk @8188 BBED> p kcbh struct kcbh, 20 bytes @0 ub1 type_kcbh @0 0x06 ub1 frmt_kcbh @1 0xa2 ub1 spare1_kcbh @2 0x00 ub1 spare2_kcbh @3 0x00 ub4 rdba_kcbh @4 0x01800096 ub4 bas_kcbh @8 0x00131e6f ub2 wrp_kcbh @12 0x0000 ub1 seq_kcbh @14 0x01 ub1 flg_kcbh @15 0x04 (KCBHFCKV) ub2 chkval_kcbh @16 0x4aae ub2 spare3_kcbh @18 0x0000 BBED> m /x 00000000 offset 4 File: /u01/oracle/oradata/ora11g/xifenfei02.dbf (1) Block: 150 Offsets: 4 to 515 Dba:0x00400096 ------------------------------------------------------------------------ 00000000 6f1e1300 00000104 ae4a0000 01000000 01280100 6f1e1300 00000000 03003200 90008001 ffff0000 00000000 00000000 00000000 00800000 6c781200 09001d00 05030000 8c02c000 b4000500 00800000 b0191300 02000900 fc020000 b011c000 0b011400 00800000 6c1e1300 00000000 00000000 00014700 ffffa000 2e048e03 8e030000 4700e90b 540cb30c 120d710d d00d2f0e 8e0eed0e 4c0fab0f 0a106910 c8102711 8611e711 4812aa12 0c136713 c2131f14 7c14df14 4115a015 ff156416 c9162517 8117de17 3b18a118 07196119 bb19191a 771ad61a 351b941b f31b521c b11c101d 6f1dd71d 3f1eaa1e 151f2e04 99040405 6f05da05 4506b006 1b078607 f1075c08 c7082c09 9109f609 5b0ac00a 250b870b 48004900 4a004b00 4c004d00 4e004f00 5000ffff 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 2c000e03 53595308 565f245f 4c4f434b ff03c20f 5eff0456 49455707 786f0912 12230407 786f0912 12230413 32303131 2d30392d 31383a31 373a3334 3a303305 56414c49 44014e01 4e014e02 c1022c00 0e065055 424c4943 0756245f 4c4f434b ff03c20f 5fff0753 594e4f4e 594d0778 6f091212 23040778 6f091212 23041332 3031312d 30392d31 383a3137 3a33343a 30330556 414c4944 014e014e 014e02c1 022c000e 03535953 07565f24 4c4f434b <32 bytes per line> BBED> sum apply Check value for File 1, Block 150: current = 0x4bb8, required = 0x4bb8
dbv检测数据文件
发现提示坏块文件的rdba就是我们刚刚修改的rdba_kcbh值
[oracle@xifenfei tmp]$ dbv file=/u01/oracle/oradata/ora11g/xifenfei02.dbf blocksize=8192 DBVERIFY: Release 11.2.0.3.0 - Production on Fri Jun 1 03:40:44 2012 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. DBVERIFY - Verification starting : FILE = /u01/oracle/oradata/ora11g/xifenfei02.dbf Page 150 is marked corrupt Corrupt block relative dba: 0x01800096 (file 6, block 150) Bad header found during dbv: Data in bad block: type: 6 format: 2 rdba: 0x00000000 last change scn: 0x0000.00131e6f seq: 0x1 flg: 0x04 spare1: 0x0 spare2: 0x0 spare3: 0x0 consistency value in tail: 0x1e6f0601 check value in block header: 0x4bb8 computed block checksum: 0x0 Block Checking: DBA = 25179275, Block Type = KTB-managed data block data header at 0xb52a807c kdbchk: row locked by non-existent transaction table=0 slot=0 lockid=2 ktbbhitc=3 Page 13451 failed with check code 6101 Block Checking: DBA = 25179287, Block Type = KTB-managed data block data header at 0xb52c0064 kdbchk: row locked by non-existent transaction table=0 slot=0 lockid=2 ktbbhitc=2 Page 13463 failed with check code 6101 DBVERIFY - Verification complete Total Pages Examined : 15360 Total Pages Processed (Data) : 12931 Total Pages Failing (Data) : 2 Total Pages Processed (Index): 0 Total Pages Failing (Index): 0 Total Pages Processed (Other): 291 Total Pages Processed (Seg) : 0 Total Pages Failing (Seg) : 0 Total Pages Empty : 2137 Total Pages Marked Corrupt : 1 Total Pages Influx : 0 Total Pages Encrypted : 0 Highest block SCN : 1551567 (0.1551567)
修改datafile header的kcvfhrfn值
BBED> set block 1 BLOCK# 1 BBED> map File: /u01/oracle/oradata/ora11g/xifenfei02.dbf (1) Block: 1 Dba:0x00400001 ------------------------------------------------------------ Data File Header struct kcvfh, 860 bytes @0 ub4 tailchk @8188 BBED> p kcvfhrfn ub4 kcvfhrfn @368 0x00000006 BBED> m /x 00000000 Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y File: /u01/oracle/oradata/ora11g/xifenfei02.dbf (1) Block: 1 Offsets: 368 to 879 Dba:0x00400001 ------------------------------------------------------------------------ 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 e3b38c2e 04a91100 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 797c1900 00000000 3e3bba2e 01000000 11000000 b40e0000 1000ba8a 02000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 0a000a00 0a000100 00000000 00000000 00000000 02008001 bb050c00 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 <32 bytes per line> BBED> sum apply Check value for File 1, Block 1: current = 0x1daf, required = 0x1daf
dbv验证数据文件
这里如果验证所有数据文件快,会发现所有类此Corrupt block relative dba: 0×00000001 (file 0, block 1)提示.这里证明datafile header 的kcvfhrfn 影响dbv检查数据文件坏块的一个标准之一
[oracle@xifenfei tmp]$ dbv file=/u01/oracle/oradata/ora11g/xifenfei02.dbf blocksize=8192 start=1 end=4 DBVERIFY: Release 11.2.0.3.0 - Production on Fri Jun 1 03:43:27 2012 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. DBVERIFY - Verification starting : FILE = /u01/oracle/oradata/ora11g/xifenfei02.dbf Page 1 is marked corrupt Corrupt block relative dba: 0x00000001 (file 0, block 1) Bad header found during dbv: Data in bad block: type: 11 format: 2 rdba: 0x01800001 last change scn: 0x0000.00000000 seq: 0x1 flg: 0x04 spare1: 0x0 spare2: 0x0 spare3: 0x0 consistency value in tail: 0x00000b01 check value in block header: 0x1daf computed block checksum: 0x0 Page 2 is marked corrupt Corrupt block relative dba: 0x00000002 (file 0, block 2) Bad header found during dbv: Data in bad block: type: 29 format: 2 rdba: 0x01800002 last change scn: 0x0000.0017accf seq: 0x1 flg: 0x04 spare1: 0x0 spare2: 0x0 spare3: 0x0 consistency value in tail: 0xaccf1d01 check value in block header: 0x2626 computed block checksum: 0x0 Page 3 is marked corrupt Corrupt block relative dba: 0x00000003 (file 0, block 3) Bad header found during dbv: Data in bad block: type: 30 format: 2 rdba: 0x01800003 last change scn: 0x0000.0017accf seq: 0x1 flg: 0x04 spare1: 0x0 spare2: 0x0 spare3: 0x0 consistency value in tail: 0xaccf1e01 check value in block header: 0x4ef4 computed block checksum: 0x0 Page 4 is marked corrupt Corrupt block relative dba: 0x00000004 (file 0, block 4) Bad header found during dbv: Data in bad block: type: 30 format: 2 rdba: 0x01800004 last change scn: 0x0000.00119bf4 seq: 0x1 flg: 0x04 spare1: 0x0 spare2: 0x0 spare3: 0x0 consistency value in tail: 0x9bf41e01 check value in block header: 0x810a computed block checksum: 0x0 DBVERIFY - Verification complete Total Pages Examined : 4 Total Pages Processed (Data) : 0 Total Pages Failing (Data) : 0 Total Pages Processed (Index): 0 Total Pages Failing (Index): 0 Total Pages Processed (Other): 0 Total Pages Processed (Seg) : 0 Total Pages Failing (Seg) : 0 Total Pages Empty : 0 Total Pages Marked Corrupt : 4 Total Pages Influx : 0 Total Pages Encrypted : 0 Highest block SCN : 0 (0.0)
总结说明
1.dbv检测数据文件坏块的时候会读取数据文件头的kcvfhrfn值,如果这个值出现问题,可能导致数据文件中的所有数据块都异常,具体表现就是Corrupt block relative dba项异常
2.dbv检查数据文件坏块中显示的rdba对应于数据块的rdba_kcbh值