db2dart诊断数据页损坏问题

 

db2dart诊断数据页损坏问题

2009-06-18 09:26 牛新庄 清华大学出版社
《深入解析DB2--高级管理、内部体系结构与诊断案例》第9章高级诊断,本章介绍的工具有db2dart和inspect、db2pdcfg、db2trc、db2_call_stack和db2nstck,并结合这些工具给出了大量的诊断问题的实例。本节为大家介绍db2dart诊断数据页损坏问题。

AD:


    9.1.4  db2dart诊断数据页损坏问题

    下面我们讨论一个实际的案例,请看下面的db2diag.log文件:

       
       
    1. 2008-09-22-11.46.45.864000+480 I805726H366 LEVEL: Error  
    2. PID : 1860 TID : 2732 PROC : db2syscs.exe  
    3. INSTANCE: DB2INST NODE : 000  
    4. FUNCTION: DB2 UDB, buffer pool services, sqlbReadAndReleaseBuffers, probe:13  
    5. RETCODE : ZRC=0x86020001=-2046689279=SQLB_BADP "page is bad" 
    6. DIA8400C A bad page was encountered.  
    7. 2008-09-22-11.46.45.910000+480 I806094H413 LEVEL: Error  
    8. PID : 1860 TID : 2732 PROC : db2syscs.exe  
    9. INSTANCE: DB2INST NODE : 000  
    10. FUNCTION: DB2 UDB, buffer pool services, sqlbReadAndReleaseBuffers, probe:13  
    11. DATA #1 : String, 126 bytes  
    12. Obj={pool:34;obj:6;type:0} State=x27 Page=140354 Cont=0 Offset=140352   
    13. BlkSize=12  
    14. sqlbReadAndReleaseBuffers error: num-pages=8  
    15.  
    16. 2008-09-22-11.46.45.942000+480 I806509H593 LEVEL: Error  
    17. PID : 1860 TID : 2732 PROC : db2syscs.exe  
    18. INSTANCE: DB2INST NODE : 000  
    19. MESSAGE : SQLB_OBJECT_DESC  
    20. DATA #1 : Hexdump, 68 bytes  
    21. 0x04B6B5DC : 2200 0600 2200 0600 0000 0000 003A A2A6 "..."........:..  
    22. 0x04B6B5EC : 40E5 0000 0000 0000 0000 0000 0000 0000 @...............  
    23. 0x04B6B5FC : 0000 0000 0101 0000 2700 0000 0000 0000 ........'.......  
    24. 0x04B6B60C : 0010 0000 2000 0000 0100 0000 2200 0600 .... ......."...  
    25. 0x04B6B61C : 408C 7400 @.t.  
    26. SQL1034C The database is damaged.   
    27. 2008-09-22-11.46.46.020000+480 I807104H356 LEVEL: Error  
    28. PID : 1860 TID : 2732 PROC : db2syscs.exe  
    29. INSTANCE: DB2INST NODE : 000  
    30. FUNCTION: DB2 UDB, buffer pool services, sqlbErrorHandler, probe:0  
    31. RETCODE : ZRC=0x86020001=-2046689279=SQLB_BADP "page is bad" 
    32. DIA8400C A bad page was encountered.  
    33.  
    34. 2008-09-22-11.46.46.020000+480 I807462H351 LEVEL: Error  
    35. PID : 1860 TID : 2732 PROC : db2syscs.exe  
    36. INSTANCE: DB2INST NODE : 000  
    37. FUNCTION: DB2 UDB, buffer pool services, sqlbErrorHandler, probe:0  
    38. DATA #1 : String, 75 bytes  
    39. Obj={pool:34;obj:6;type:0} State=x27  
    40. --注:Obj={pool:34;obj:6;type:0} State=x27,"pool"指的表空间ID,"obj"指的  
    41. 对象ID  
    42. Prefetcher Error, in sqlbProcessRange  
    43.  
    44. 2008-09-22-11.46.46.020000+480 I807815H593 LEVEL: Error  
    45. PID : 1860 TID : 2732 PROC : db2syscs.exe  
    46. INSTANCE: DB2INST NODE : 000  
    47. MESSAGE : SQLB_OBJECT_DESC  
    48. DATA #1 : Hexdump, 68 bytes  
    49. 0x04B6B5DC : 2200 0600 2200 0600 0000 0000 003A A2A6 "..."........:..  
    50. 0x04B6B5EC : 40E5 0000 0000 0000 0000 0000 0000 0000 @...............  
    51. 0x04B6B5FC : 0000 0000 0101 0000 2700 0000 0000 0000 ........'.......  
    52. 0x04B6B60C : 0010 0000 2000 0000 0100 0000 2200 0600 .... ......."...  
    53. 0x04B6B61C : 408C 7400 @.t. 

    可以从系统表中读取判断是哪个表受到损坏。例如:

       
       
    1. select tabname from syscat.tables where tbspaceid=34 and tableid=6 

    数据库最严重的故障莫过于数据库损坏。从上面的例子来看,我们的数据库中有数据页受到损坏。出现SQL1034C错误时,我们首先执行操作系统命令。例如在AIX操作系统上,执行"errpt -d H -T PERM"命令来判断系统是否出现硬件损坏。然后尝试使用"db2 restart db sample"命令让数据库执行崩溃恢复。

    如果上述办法不能解决问题,那么最好的办法是从备份恢复数据库。如果无法从备份恢复,那么可以根据损坏的原因尝试相应的解决方案。对于存储问题导致部分数据文件损坏,但是数据库还可以连接的情况,可以采用导出数据库的表结构和数据的方法来恢复数据库。当然对于损坏的表,导出是无法完成的。这时可以使用db2dart的导出数据功能来导出这些损坏的表的数据。如果数据库损坏到已经无法连接的程度,那么除了从备份恢复,唯一的办法就是使用db2dart来导出所有数据了。下面展示了使用db2dart命令时的提示信息:

       
       
    1. 运行命令 db2dart [DBNAME] /DDEL  
    2.  
    3. Table object data formatting start.  
    4. # Please enter  
    5. Table ID or name, tablespace ID, first page, num of pages:  
    6.    # (suffic page number with 'p' for pool relative), 
    按照提示输入表名、表空间ID、起始页数、需要导出的页数。如果你的数据库非常大的话,这将是一个工作量非常大的事情。因此建议大家做好数据库备份。
     
     
    inspect命令使用案例
    2009-06-18 09:26 牛新庄 清华大学出版社
    《深入解析DB2--高级管理、内部体系结构与诊断案例》第9章高级诊断,本章介绍的工具有db2dart和inspect、db2pdcfg、db2trc、db2_call_stack和db2nstck,并结合这些工具给出了大量的诊断问题的实例。本节为大家介绍inspect命令使用案例。

    AD:


      9.1.5  inspect命令使用案例

      inspect命令类似于db2dart命令,它同样可以用来检查数据库、表空间和表。 inspect命令和db2dart命令的主要区别是:inspect命令需要与数据库连接,并且可以在该数据库上同时有多个活动的数据库连接时执行;而db2dart命令在执行之前需要断开所有数据库连接,数据库上不能有活动的数据库连接。

      inspect命令可以在有其他用户连接的情况下验证数据库的完整性。例如,使用"db2 inspect check database results keep <filename>"命令可以验证整个数据库的完整性,具体语法如下所示:

           
           
      1. db2 " inspect check database results keep inspect.rel "   
      2. DB20000I  INSPECT 命令成功完成。 

      在Windows平台下,输出文件在"C:\IBM\SQLLIB\实例名"或DB2INSTPORF变量指定的目录下;在Linux/UNIX平台下,输出文件在"$INSTHOME/sqllib/db2dump"目录下。输出的文件需要由db2instpf命令进行格式化,db2instpf命令的语法是:

           
           
      1. db2inspf <data file> <out file> 

      例如:

           
           
      1. db2inspf INSPECT.rel INSPECT.out 

      执行inspect命令时还可以加很多参数,使用时可以执行"db2 ? inspect"查看详细的命令选项。下面我们举几个inspect的使用案例:

      例如,如果希望只检查表空间2中的数据,可执行以下命令:

           
           
      1. db2 "inspect check tablespace tbspaceid 2 results keep inspect.rel"   
      2. DB20000I  INSPECT 命令成功完成。 

      对数据库从表空间11对象2开始执行一致性检查,可执行以下命令:

           
           
      1. db2 inspect check database begin TBSPACEID 11 OBJECTID 2 results checkts.out 

      产生的checkts.out报告的具体信息如下所示:

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

      请填写红包祝福语或标题

      红包个数最小为10个

      红包金额最低5元

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

      抵扣说明:

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

      余额充值