Oracle使用fy_recover_data恢復(fù)truncate刪除的數(shù)據(jù)
前言
TRUNCATE不會(huì)逐個(gè)清除用戶數(shù)據(jù)塊上的數(shù)據(jù),而僅僅重置數(shù)據(jù)字典和元數(shù)據(jù)塊上的元數(shù)據(jù)(如存儲(chǔ)段頭和擴(kuò)展段圖)。也就是說,此時(shí),其基本數(shù)據(jù)并未被破壞,而是被系統(tǒng)回收、等待被重新分配。
如果我們已經(jīng)有一套元數(shù)據(jù)及數(shù)據(jù)塊,然后將被TRUNCATE的用戶數(shù)據(jù)塊的內(nèi)容取代其用戶數(shù)據(jù)塊的內(nèi)容,是否可以“騙”過Oracle,讓它讀出這些數(shù)據(jù)呢? 回顧一下表掃描的過程,這個(gè)方法應(yīng)該是可行的。我們只要想辦法構(gòu)造出一個(gè)結(jié)構(gòu)相同、且具有完整元數(shù)據(jù)信息和格式化了的用戶數(shù)據(jù)塊的傀儡表對(duì)象,然后將被TRUNCATE的用戶數(shù)據(jù)塊找出,再將其數(shù)據(jù)內(nèi)容部分嫁接到傀儡對(duì)象的用戶數(shù)據(jù)塊,使Oracle以外這是傀儡對(duì)象的數(shù)據(jù),就能讓Oracle掃描并讀出數(shù)據(jù)內(nèi)容。
1.創(chuàng)建測(cè)試表
SQL> create table pak_tab as select * from dba_objects; Table created. SQL> select count(*) from pak_tab; COUNT(*) ---------- 86262
2.truncate table pak_tab
SQL> truncate table pak_tab; Table truncated. SQL> select count(*) from pak_tab; COUNT(*) ---------- 0 SQL> select owner from sys.pak_tab where rownum<=1; OWNER ------------------------------ SYS
3 編譯fy_recover_data包
SQL> @fy_recover_data.pck Package created. Package body created.
4.執(zhí)行fy_recover_data包
SQL> exec fy_recover_data.recover_truncated_table('sys','pak_tab'); PL/SQL procedure successfully completed. SQL> SELECT COUNT(*) FROM pak_tab; COUNT(*) ---------- 0 SQL> SELECT COUNT(*) FROM pak_tab$$; COUNT(*) ---------- 86262
5.把數(shù)據(jù)插回原表
SQL> alter table pak_tab nologging; Table altered. SQL> insert /*+append*/ into pak_tab select * from pak_tab$$; 86262 rows created. SQL> commit; Commit complete. SQL> alter table pak_tab logging; Table altered.
6.校驗(yàn)數(shù)據(jù)
SQL> select count(*) from pak_tab; COUNT(*) ---------- 86262
總結(jié)
1,刪除因?yàn)榛謴?fù)表自動(dòng)創(chuàng)建的兩個(gè)表空間
- drop tablespace fy_rec_data including contents and datafiles;
- drop tablespace fy_rst_data including contents and datafiles;
2,truncate以后,要保證沒有新數(shù)據(jù)灌入
3,存儲(chǔ)該表的數(shù)據(jù)文件不能覆蓋。否則無法完成恢復(fù)。
4,緊急時(shí)刻可以將表空間設(shè)為只讀
5,備份的關(guān)鍵性,合理的備份策略是DBA最后的救命稻草,請(qǐng)重視備份!對(duì)數(shù)據(jù)懷有敬畏之心!!
到此這篇關(guān)于Oracle使用fy_recover_data恢復(fù)truncate刪除的數(shù)據(jù)的文章就介紹到這了,更多相關(guān)Oracle 恢復(fù)truncate刪除數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Oracle數(shù)據(jù)塊實(shí)現(xiàn)原理深入解讀
Oracle對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)文件(datafile)中的存儲(chǔ)空間進(jìn)行管理的單位是數(shù)據(jù)塊(data block),本文將詳細(xì)介紹2012-11-11Oracle創(chuàng)建設(shè)置查詢權(quán)限用戶的方法
這篇文章主要給大家介紹了關(guān)于Oracle創(chuàng)建設(shè)置查詢權(quán)限用戶的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Oracle具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08Oracle?sysaux表空間異常增長(zhǎng)的完美解決方法
sysaux表空間會(huì)因?yàn)槎喾N情況而增大,下面這篇文章主要給大家介紹了關(guān)于Oracle?sysaux表空間異常增長(zhǎng)的完美解決方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04Oracle實(shí)現(xiàn)同表更新或插入的三種方案
這篇文章主要給大家介紹了Oracle實(shí)現(xiàn)同表更新或插入的三種方案,文章通過代碼示例和圖文結(jié)合講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-11-11oracle邏輯運(yùn)算符與其優(yōu)先級(jí)簡(jiǎn)介
這篇文章主要介紹了oracle邏輯運(yùn)算符與其優(yōu)先級(jí)的相關(guān)內(nèi)容,涉及一些代碼示例,具有一定參考價(jià)值。若有不當(dāng)之處,歡迎指出。2017-09-09Oracle如何給數(shù)據(jù)庫(kù)添加約束過程解析
這篇文章主要介紹了Oracle如何給數(shù)據(jù)庫(kù)添加約束過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09