您好,登錄后才能下訂單哦!
今天小編給大家分享一下Oracle怎么使用fy_recover_data恢復truncate刪除的數據的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
TRUNCATE不會逐個清除用戶數據塊上的數據,而僅僅重置數據字典和元數據塊上的元數據(如存儲段頭和擴展段圖)。也就是說,此時,其基本數據并未被破壞,而是被系統回收、等待被重新分配。
如果我們已經有一套元數據及數據塊,然后將被TRUNCATE的用戶數據塊的內容取代其用戶數據塊的內容,是否可以“騙”過Oracle,讓它讀出這些數據呢? 回顧一下表掃描的過程,這個方法應該是可行的。我們只要想辦法構造出一個結構相同、且具有完整元數據信息和格式化了的用戶數據塊的傀儡表對象,然后將被TRUNCATE的用戶數據塊找出,再將其數據內容部分嫁接到傀儡對象的用戶數據塊,使Oracle以外這是傀儡對象的數據,就能讓Oracle掃描并讀出數據內容。
SQL> create table pak_tab as select * from dba_objects; Table created. SQL> select count(*) from pak_tab; COUNT(*) ---------- 86262
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
SQL> @fy_recover_data.pck Package created. Package body created.
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
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.
SQL> select count(*) from pak_tab; COUNT(*) ---------- 86262
以上就是“Oracle怎么使用fy_recover_data恢復truncate刪除的數據”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。