这几天需要从一个备份集中恢复一个数据库,恢复后发现问题很多,本身这个备份中可能有存在不完整的log,处理完一个个问题后发现还是有表损坏,在db2diag中其日志
这几天需要从一个备份集中恢复一个数据库,恢复后发现问题很多,本身这个备份中可能有存在不完整的log,处理完一个个问题后发现还是有表损坏,在db2diag中其日志信息如下,倒是很清楚的看到损坏对象:DB2数据库坏块代码
2014-04-27-05.06.42.071142-240 I36137A535 LEVEL: Severe
PID : 14680376 TID : 13881 PROC : db2sysc 0
INSTANCE: db2rilo NODE : 000 DB : WEB
APPHDL : 0-40 APPID: 9.32.130.62.37608.140427090600
AUTHID : DEVPRCBK
EDUID : 13881 EDUNAME: db2agent (WEB) 0
FUNCTION: DB2 UDB, data management, sqldFetchDirect, probe:4603
RETCODE : ZRC=0x87040001=-2029780991=SQLD_BADPAGE "Bad Data Page"
DIA8500C A data file error has occurred, record id is "".
2014-04-27-05.06.42.071901-240 I36673A555 LEVEL: Severe
PID : 14680376 TID : 13881 PROC : db2sysc 0
INSTANCE: db2rilo NODE : 000 DB : WEB
APPHDL : 0-40 APPID: 9.32.130.62.37608.140427090600
AUTHID : DEVPRCBK
EDUID : 13881 EDUNAME: db2agent (WEB) 0
FUNCTION: DB2 UDB, trace services, sqlt_logerr_string (secondary logging fu, probe:0
MESSAGE : TABLESPACE ATTRIBUTES:
DATA #1 : String, 73 bytes
Tablespace Seed = 5, Bufferpool ID = 7, Extent Size = 16, Page Size = 8k
2014-04-27-05.06.42.072336-240 I37229A535 LEVEL: Severe
PID : 14680376 TID : 13881 PROC : db2sysc 0
INSTANCE: db2rilo NODE : 000 DB : WEB
APPHDL : 0-40 APPID: 9.32.130.62.37608.140427090600
AUTHID : DEVPRCBK
EDUID : 13881 EDUNAME: db2agent (WEB) 0
FUNCTION: DB2 UDB, trace services, sqlt_logerr_string (secondary logging fu, probe:0
MESSAGE : PAGE OBJECT IDENTIFIERS:
DATA #1 : String, 51 bytes
Tablespace ID = 5, Object ID = 72, Object Type = 0
2014-04-27-05.06.42.072612-240 I37765A511 LEVEL: Severe
PID : 14680376 TID : 13881 PROC : db2sysc 0
INSTANCE: db2rilo NODE : 000 DB : WEB
APPHDL : 0-40 APPID: 9.32.130.62.37608.140427090600
AUTHID : DEVPRCBK
EDUID : 13881 EDUNAME: db2agent (WEB) 0
FUNCTION: DB2 UDB, trace services, sqlt_logerr_string (secondary logging fu, probe:0
MESSAGE : PAGE NUMBERS:
DATA #1 : String, 38 bytes
Obj Page = 15430, Pool Page = 1061398
2014-04-27-05.06.42.072878-240 I38277A485 LEVEL: Severe
PID : 14680376 TID : 13881 PROC : db2sysc 0
INSTANCE: db2rilo NODE : 000 DB : WEB
APPHDL : 0-40 APPID: 9.32.130.62.37608.140427090600
AUTHID : DEVPRCBK
EDUID : 13881 EDUNAME: db2agent (WEB) 0
FUNCTION: DB2 UDB, trace services, sqlt_logerr_string (secondary logging fu, probe:0
MESSAGE : lifeLSN:
DATA #1 : String, 17 bytes
000000003CA9A178
分析:对于DB2中数据库出现坏块问题,如果没有使用该表时候,并不会影响数据库的正常使用,一旦有访问该表的会话,那么会造成整个数据库实例宕机,从而影响业务的应用,所以问题比较棘手,对于此类问题没有很好的解决,唯独可以通过db2dart离线方式将表中的数据导出,并且将表mark为unvaliable后重建即可,db2dart只开放了部分免费功能,如标记索引,导出数据,表空间高水位线处理及一些查看功能,但是对于标记表失效需要客服提供密码才可以使用。其实根据上面提供的信息已经比较完全了,只需要找出是那张表表即可。
Tablespace ID = 5, Object ID = 72, Object Type = 0
其中tablespace id即是坏块所在表的表空间ID,object id对应出现坏块的对象ID,可以是表索引或LOB,object type代表损坏对象的类型,0表示表,1表示索引,还有其他的LOB之类的吧,不过很少见,,上面可见损坏的是表,所以所以根据信息就可以通过syscat.tables查看损坏的表名称: