使用Fy_Recover_data恢复被truncate的表
生活随笔
收集整理的这篇文章主要介绍了
使用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的表的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 调谷歌自动翻译工具
- 下一篇: WIN2000服务器安全配置(三)(转)