分类: DB2/Informix
2014-08-25 22:24:35
原文地址:DB2误删数据后的恢复方法实践 作者:fengzhanhai
1、在源库中使用以下语句生成重定向脚本:
db2 "restore db dbname from /yourdbparth taken at timestamp into dbname redirect generate script redirect.sql "
2、修改重定向脚本,注意表空间的高水位线,每个表空间大小不得低于高水位线:
执行重定向恢复:db2 -tvf redirect.sql
恢复期间可以使用db2pd -utilities 查看进度。恢复完成后进行数据库的前滚。误操作大概发生在12月5号11:50(备份介质的时间是20131130223004)
3、查看时区:db2 "values current timezone" 发现是正8,所以在前滚中使用USING LOCAL TIME时需要向前推8个小时,我们首先执行前滚到12月4号的11:40
4、开始前滚
db2 "rollforward database mydb to 2013-12-04-03.40.00.000000 USING LOCAL TIME overflow log path (归档日志在测试机上的位置)",注意这里不加complete或者stop,因为我们还需要前滚。
可以通过db2 rollforward db mydb query status来查看前滚情况,关注下一个日志。
5、第二次前滚
db2 "rollforward database mydb to 2013-12-05-03.40.00.000000 USING LOCAL TIME overflow log path (归档日志在测试机上的位置)"
6、最后一次前滚
再次使用db2 rollforward db mydb query status查看前滚情况发现下一个日志是在11:50后生成的,此时继续前滚的风险:可能需要重新进行恢复+前滚
于是执行最后一次前滚:db2 "rollforward database mydb to 2013-12-05-03.41.00.000000 USING LOCAL TIME and stop overflow log path (归档日志在测试机上的位置)"
7、数据恢复
使用export和load的方式数据恢复到源库中,要注意LOAD需要带nonrecoverable子句,否则让数据库挂起你就死定了。
以上完~~~
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
db2其他问题小记:
存储过程执行突然执行缓慢,问题解决思路?
对于以往执行正常,当前执行缓慢的情况,思路如下:
将存储过程中的语句进行拆分,逐条执行动态SQL,观察执行时间
如果很快:
1、需要先了解最近是否有大量新数据导入;
2、是否新建索引;
3、获取当前存储过程执行计划A检查最近是否正常,如果异常先将该存储过程所涉及的所有表runstats执行存储过程如果还是缓慢,rebind package重新绑定该存储过程所涉及的包获取rebind后的存储过程的执行计划B最后,对比 执行计划A 与 执行计划B
--获得存储过程的包名
1、先指定存储过程名 rpt.aa10001
2、获取 pkgname
select b.*,c.PROCSCHEMA,c.PROCNAME from
syscat.STATEMENTS b, syscat.PROCEDURES c,syscat.ROUTINEDEP d
where b.pkgname=d.bname
and c.SPECIFICNAME=d.SPECIFICNAME
and c.PROCSCHEMA=d.ROUTINESCHEMA
and c.PROCSCHEMA='FLT' and c.PROCNAME='FLIGHTDATA' --指定存储过程名
PS:runstats仅是更新执行计划的一方面(对于动态SQL生效,但对于存储过程无效)还需rebind包(对于更新存储过程执行计划方才有效)
--重新绑定包,rebind包
db2 rebind package rpt.P621357
3、动态SQL立即生效,更新package cache中的执行计划
flush package cache dynamic