dbaplus社群

重大故障!业务核心表被truncate删除,准备跑路……

完蛋!最近项目组同事说,核心业务表被truncate删除,也惊呆了,现在的业务都这么粗暴了,安全机制、作业规范形同虚设?接下来就给大家一起聊下,表被truncate,解决问题的关键就是找到关键的问题!

Image

一、truncate的说明

Oracle数据库中的TRUNCATE语句用于删除表中的所有数据,并释放占用的空间。它比使用DELETE语句删除所有行更快,因为它不会为每行记录执行DML操作,同时也不能闪回,在生产环境一般发生后,恢复比较麻烦...

Image

二、truncate恢复的办法

Image

1、Fy_Recover_Data

Fy_Recover_Data是利用Oracle表扫描机制、数据嫁接机制恢复TRUNCATE或者损坏数据的工具包,由纯PLSQL编写。

1.通过以下网址下载:http://www.hellodba.com/Download/FY_Recover_Data.zip2.解压下载下来的FY_Recover_Data.pckunzip FY_Recover_Data.zip?解压后得到一个文件FY_Recover_Data.pck3.使用sys用户执行解压后的脚本(我这里解压后的文件在/home/oracle/)SQL> @/home/oracle/FY_Recover_Data.pck这个脚本实际是在sys用户下创建了一个名为FY_Recover_Data的package4.执行exec fy_recover_data.recover_truncated_table('SCOTT','T');注:执行上的SQL产生2个表空间FY_REC_DATA、FY_RST_DATA5.使用sys用户把恢复的数据从scott.t$$中插回scott.t表注:scott.t$$中是scott.t表truncate之前的数据SQL> insert into scott.t select * from scott.t$$;13 rows created.SQL> commit;Commit complete.可以看到被truncate的数据已经恢复。
Image

2、ODU还原

ODU 全称为 Oracle Database Unloader,是用于 Oracle 数据库紧急恢复的软件,在各种原因造成的数据库不能打开或数据删除后没有备份时,使用 ODU 抢救数据,最大限度地减少数 据丢失。

意外 Truncate 表的事情时有发生,ODU 提供了方便的恢复 Truncate 表的功能。被 Truncate的表,只要原来的空间没有被重用(即数据被覆盖),则数据都是可以恢复的。

Image

3、BBED恢复

BBED(Oracle Block Browerand EDitor Tool)是Oracle 用来直接查看和修改数据文件数据的一个工具.通过此工具也可以恢复truncate的表。

Image

Image

4、GDUL恢复

gdul是一个免费的工具,由Oracle官方DBA+社群贡献。它支持多种导出格式,包括expdp和exp,并且支持ASM文件系统。此外,它支持绝大多数的列类型,并且可以在主流硬件平台上运行。

三、总结

表被truncate,解决问题的关键就是找到关键的问题,安全机制、规范的作业流程必不可少!

作者丨詹姆斯邦德007
来源丨公众号:IT邦德(ID:jeamesDB)
dbaplus社群欢迎广大技术人员投稿,投稿邮箱:[email protected]
Image
Image