欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

使用Fy_Recover_data恢复被truncate的表

发布时间:2023/12/29 编程问答 40 豆豆
生活随笔 收集整理的这篇文章主要介绍了 使用Fy_Recover_data恢复被truncate的表 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

参考文档:

Fy_Recover_Data ———— 用于数据恢复的PLSQL包 [HelloDBA.COM]

移花接木————利用Oracle表扫描机制恢复被Truncate的数据 [HelloDBA.COM] 

 详细的原理,可以看以上的两个文档,以上两个文档是作者的文档。

-- 创建测试表,并将其truncate掉 

conn / as sysdba create table test as select * from dba_objects ; select count(*) from test;SQL> select count(*) from test;COUNT(*) ----------73019SQL>

-- truncate掉表 

truncate table test; select count(*) from test;SQL> truncate table test;表被截断。SQL> select count(*) from test;COUNT(*) ----------0SQL>

-- 导入FY_Recover_Data.pck包 

sqlplus /nolog conn / as sysdba @d:\FY_Recover_Data.pckSQL> @d:\FY_Recover_Data.pck 输入 files 的值: 30 原值 30: -- 1. Temp Restore and Recover tablespace & files --- 新值 30: -- 1. Temp Restore and Recover tablespace 30 ---程序包已创建。程序包体已创建。SQL>

-- 开始执行恢复,输入参数schema,table_name ,如果出现无法写入文件的报错,建立对应的文件夹,这里报错无法创建'c:\temp\FY_REC_DATA.DAT,手工创建c:\temp后执行成功

set serveroutput on exec fy_recover_data.recover_truncated_table('SYS','TEST');D:\app\19c\OPatch>sqlplus /nologSQL*Plus: Release 19.0.0.0.0 - Production on 星期六 7月 9 16:21:56 2022 Version 19.15.0.0.0Copyright (c) 1982, 2021, Oracle. All rights reserved.SQL> conn / as sysdba 已连接。 SQL> set serveroutput on SQL> exec fy_recover_data.recover_truncated_table('SYS','TEST'); 16:23:51: Use existing Directory Name: FY_DATA_DIR 16:23:52: Recover Tablespace: FY_REC_DATA; Data File: FY_REC_DATA.DAT 16:23:52: Restore Tablespace: FY_RST_DATA; Data File: FY_RST_DATA.DAT 16:23:52: Recover Table: SYS.TEST$ 16:23:53: Restore Table: SYS.TEST$$ 16:24:01: Copy file of Recover Tablespace: FY_REC_DATA_COPY.DAT 16:24:01: begin to recover table SYS.TEST 16:24:02: New Directory Name: TMP_HF_DIR 16:24:03: Recovering data in datafile D:\APP\ZHAOBINBIN\ORADATA\TESTWIN\SYSTEM01.DBF 16:24:03: Use existing Directory Name: TMP_HF_DIR 16:25:09: 1408 truncated data blocks found. 16:25:09: 72713 records recovered in backup table SYS.TEST$$ 16:25:09: Total: 1408 truncated data blocks found. 16:25:09: Total: 72713 records recovered in backup table SYS.TEST$$ 16:25:09: Recovery completed. 16:25:09: Data has been recovered to SYS.TEST$$PL/SQL 过程已成功完成。SQL>

-- 从上面的记录中,可以看到表被恢复为sys.test$$ 

SQL> select count(*) from test$;COUNT(*) ----------0SQL> select count(*) from test$$;COUNT(*) ----------72713SQL>

-- 将恢复出来的表的数据,插入到test表中

insert into test select * from test$$ ; select count(*) from test$$;SQL> insert into test select * from test$$ ;已创建 72713 行。SQL> commit;提交完成。SQL> select count(*) from test$$;COUNT(*) ----------72713SQL>

-- drop掉表test$,test$$,对test表无影响

SQL> drop table test$ purge;表已删除。SQL> drop table test$$ purge;表已删除。SQL> select count(*) from test;COUNT(*) ----------72713SQL>

备注(从网上看到的,自己未测试):
1 如果truncate后,表又被写入数据,有新的数据进入,则无法用该方法还原出来。
2 如果表数据文件块被覆盖了。则无法恢复出完整的数据
建议: 表被truncate后,迅速将表所在的表空间或者文件read only。防止数据写入进去,然后再使用该方法恢复。

END

总结

以上是生活随笔为你收集整理的使用Fy_Recover_data恢复被truncate的表的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。