oracle容灾之truncate数据恢复

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baomw/article/details/84337430

在我的另外几篇文章中,介绍了关于数据库闪回的一些内容,对于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数据恢复操作就算全部完成了!希望对大家有所帮助

猜你喜欢

转载自blog.csdn.net/baomw/article/details/84337430