oracle容灾之truncate数据恢复
日期: 2018-11-22 分类: 个人收藏 309次阅读
在我的另外几篇文章中,介绍了关于数据库闪回的一些内容,对于drop和delete的数据闪回。对于truncate,可能有一些数据库知识的应该会知道,在正常逻辑中,如果我们将表truncate掉了,是找不回来了,TRUNCATE TABLE 是一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。
那么问题来了,如果我们生产过程中,一不小心,将业务表truncate掉了该怎么办呢?其实也是有办法解决的,具体操作过程如下:
1,新建测试表t_test,插入几条测试数据
2,执行我们truncate命令,清除t_test中的所有数据
3,truncate恢复需要一个存储过程fy_recover_data(我个人觉得,能写出这种存储过程的,怕真的是科学家级别的了)
下载地址:https://download.csdn.net/download/xxbb0101/10275209
4,下载完成后,使用sys用户登录db(注意一定要sys用户登录,否则会出现执行报错的情况),然后执行存储过程
5,在command界面,登录sys用户,执行命令:exec fy_recover_data.recover_truncated_table('userName','tableName');
注意该程序有两个参数,前一个为被truncate表所在用户的用户名,后者为表名
4,用被普通用户登录,查询临时表:select * from tablename$$;(临时表名为表名+“$$”)
可见,被truncate掉的数据已经全部在我们的临时表中了
5,最后将临时表的数据全部插入的业务表即可,你看业务表数据,已经被全部恢复了
6,到此虽然我们数据恢复工作已经做完了,但是由于其恢复需要生成临时表文件,所以我们要找到其对应的表空间文件,做相关删除操作,可以看到生成的临时表空间为;FY_RST_DATA
7,根据数据字典DBA_DATA_FILES,查出该表空间对应的磁盘文件
8,在磁盘上找到对应的文件,rm即可
到此为止,整个truncate数据恢复操作就算全部完成了!希望对大家有所帮助
除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
精华推荐