分类: DB2/Informix
2013-03-26 22:53:49
原文地址:DB2数据库硬件故障导致表损坏数据恢复实施步骤 作者:fengzhanhai
过程处理如下:
1、下午14:00 发现论坛应用无法访问检查日志发现数据库连接异常;
2、下午14:20登录论坛数据库服务器发现数据库实例已经停止,停止应用服务后重启数据库成功。再次启动应用发现数据库实例立即停止;
3、14:40左右查看数据库日志发现错误信息如下:
FUNCTION: DB2 UDB, database monitor, sqm___sqlmeiot, probe:70
MESSAGE : target type 0 failed to open DB2DETAILDEADLOCK with rc -2079522800怀疑为监控器文件损坏。
4、使用如下命令重建数据库监控器
db2 list tablespaces show detail
//查看表空间id
db2 list tablespace containers for 2
//查找监控器位置
db2 set event monitor db2detaildeadlock state 0
//设置状态为不可用
db2 drop event monitor db2detaildeadlock
//删掉该监控器
db2 create event monitor db2detaildeadlock for deadlocks with details write to file 'C:\DB2\NODE0000\SQL00002\DB2EVENT\db2detaildeadlock' maxfiles 100 maxfilesize 1024 buffersize 17 blocked append autostart
//重建监控器
5、重启实例后再次重启应用问题依然存在;
6、15:00--24:00继续分析日志发现如下信息
RETCODE : ZRC=0x86020019=-2046689255=SQLB_CSUM "Bad Page, Checksum Error" DIA8426C A invalid page checksum was found for page "".FUNCTION: DB2 UDB, buffer pool services, sqlbcres, probe:1100
MESSAGE : Obj={pool:2;obj:5;type:0} State=x27
经查找相关资料并使用SQL文:
db2 select tabname from syscat.tables where tbspaceid=2 and tableid=5 确认为jivemessage表损坏;
7、由于该数据库参数设置为不允许在线备份且离线备份脚本在接管该系统之前由于密码更改导致脚本备份数据都为空文件只好将生产库中能到处的数据量和测试环境拼接以保证用户的数据完整性;
8、导出jivemessage表结构
通过控制中心——生产ddl文件
9、查找到测试环境下的最后一条记录creationdate=001295252362821
10、在生产环境下查找出001295252362821日期后新增的数据:
SELECT * FROM DB2ADMIN.JIVEMESSAGE where creationdate>'001295252362821' ;
共274条
11、根据dll文件,生产jivemessage2,不带主键、索引、及外键
12、导入最近更新的数据到jivemessage2表中:
insert into jivemessage2 SELECT * FROM DB2ADMIN.JIVEMESSAGE where creationdate>'001295252362821'
13、从测试环境下导出原始数据(由于表中存在长字符类型,采用ixf格式备份数据)
export to e:\jivemessage.ixf of ixf select * from db2admin.jivemessage_bak
导出的行数:364987
14、追加历史数据到jivemessage2表中
import from e:\jivemessage.ixf of ixf COMMITCOUNT 10000 insert into jivemessage2
8、通过控制中心为jivemessage删除外键
9、通过控制中心为jivemessage删除主键
10、修改jivemessage名称为jivemessage_bk
11、修改jivemessage2名称为jivemessage
12、根据dll文件,为jivemessage创建主键
13、根据dll文件,修改外键名称,为jivemessage创建索引
14、为jivemessage创建外键,失败,查找不匹配项
select * from jivemessage threadid not in (select threadid from jivethread)
查找到2条记录并删除
再次创建外键,成功
15、删除该数据库损坏的表jivemessage并离线备份bbs数据库
16.更改该数据库的备份模式为在线备份:
db2 update db cfg for bbs using LOGRETAIN RECOVERY
db2 update db cfg for bbs using LOGARCHMETH1 DISK:D:\backup\archivelogbbs
17、重启实例后重新备份数据库后数据库恢复正常
18、启动论坛应用,测试(查询、发帖、删帖)正常。