db2崩溃后怎么恢复处理

最近客户这边的数据库出了点问题,有几个存储过程运行的很慢,基本确定是由于某一个表最近数据量过大,以前只有几万条数据的几个表最近变成了千万条数据,而且每天都会有3个存储过程会用到这个表,由于会对表数据进行匹配核对再进行插入删除操作,消耗时间很长,所以我就想备份一下这个表到另一个表然后reorg table,试试能不能优化一下,没想到备份的时候直接卡死了,然后只能db2stop force,但是之后却不能db2start,会报SQL6036N START or STOP DATABASE MANAGER command is already in progress.之后也试了db2_kill还是不能重启,最后无奈试了试重启linux服务器,然后start以后不能连接数据库,连接会报SQL1015N The database is in an inconsistent state. SQLSTATE=55025。查看db2diag.log文件发现crash recovery失败(失败原因应该是bufferpool页数太少),我基本确定只有备份的那一个表有问题,不连接数据库的话我也不会修改bufferpool,也不能drop那个表,现在应该怎么处理最好~

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答

本次提问扣除的有问必答次数,已经为您补发到账户,我们后续会持续优化,扩大我们的服务范围,为您带来更好地服务。

数据库在进行大量的运算和数据处理的过程中,IO、CPU等资源消耗非常高的时候,强制停止数据库。db2stop force

结果数据库命令迟迟没有响应。这个时候对数据库进行其他操作均无响应,执行启动命令,返回SQL6036N。此时说明数据库已经hung了。

或 调试存储过程,导致数据库hung,想要通过控制中心重启下db2,结果长时间没有任何反应,再想重新连接时报错,如下

SQL6036N START 或 STOP DATABASE MANAGER 命令已在处理之中。

db2stop 命令同样会报相同的错

解决办法:

删除/home/username/sqllib/ctrl/db2strst.lck文件,默认这个文件是空的。

执行db2_kill,会提示:Application ipclean:Removing DB2 engine and client IPC resources for db2name.

重新启动db2start,查看数据库的活动状态:db2 list active databases 会显示当前活动库,这时候说明数据库已经恢复正常了。

采纳一下,可以通过执行数据库的命令解决