使用Fy_Recover_data恢复被truncate的表
參考文檔:
Fy_Recover_Data ———— 用于數(shù)據(jù)恢復(fù)的PLSQL包 [HelloDBA.COM]
移花接木————利用Oracle表掃描機(jī)制恢復(fù)被Truncate的數(shù)據(jù) [HelloDBA.COM]?
?詳細(xì)的原理,可以看以上的兩個(gè)文檔,以上兩個(gè)文檔是作者的文檔。
-- 創(chuàng)建測(cè)試表,并將其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;表被截?cái)唷QL> select count(*) from test;COUNT(*) ----------0SQL>-- 導(dǎo)入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 ---程序包已創(chuàng)建。程序包體已創(chuàng)建。SQL>-- 開始執(zhí)行恢復(fù),輸入?yún)?shù)schema,table_name ,如果出現(xiàn)無(wú)法寫入文件的報(bào)錯(cuò),建立對(duì)應(yīng)的文件夾,這里報(bào)錯(cuò)無(wú)法創(chuàng)建'c:\temp\FY_REC_DATA.DAT,手工創(chuàng)建c:\temp后執(zhí)行成功
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 過(guò)程已成功完成。SQL>-- 從上面的記錄中,可以看到表被恢復(fù)為sys.test$$?
SQL> select count(*) from test$;COUNT(*) ----------0SQL> select count(*) from test$$;COUNT(*) ----------72713SQL>-- 將恢復(fù)出來(lái)的表的數(shù)據(jù),插入到test表中
insert into test select * from test$$ ; select count(*) from test$$;SQL> insert into test select * from test$$ ;已創(chuàng)建 72713 行。SQL> commit;提交完成。SQL> select count(*) from test$$;COUNT(*) ----------72713SQL>-- drop掉表test$,test$$,對(duì)test表無(wú)影響
SQL> drop table test$ purge;表已刪除。SQL> drop table test$$ purge;表已刪除。SQL> select count(*) from test;COUNT(*) ----------72713SQL>備注(從網(wǎng)上看到的,自己未測(cè)試):
1 如果truncate后,表又被寫入數(shù)據(jù),有新的數(shù)據(jù)進(jìn)入,則無(wú)法用該方法還原出來(lái)。
2 如果表數(shù)據(jù)文件塊被覆蓋了。則無(wú)法恢復(fù)出完整的數(shù)據(jù)
建議: 表被truncate后,迅速將表所在的表空間或者文件read only。防止數(shù)據(jù)寫入進(jìn)去,然后再使用該方法恢復(fù)。
END
總結(jié)
以上是生活随笔為你收集整理的使用Fy_Recover_data恢复被truncate的表的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 调谷歌自动翻译工具
- 下一篇: Python近红外光谱分析与机器学习、深