網(wǎng)站首頁 編程語言 正文
Oracle使用fy_recover_data恢復(fù)truncate刪除的數(shù)據(jù)_oracle
作者:yangjunfeng??????? ? 更新時間: 2022-09-13 編程語言前言
TRUNCATE不會逐個清除用戶數(shù)據(jù)塊上的數(shù)據(jù),而僅僅重置數(shù)據(jù)字典和元數(shù)據(jù)塊上的元數(shù)據(jù)(如存儲段頭和擴(kuò)展段圖)。也就是說,此時,其基本數(shù)據(jù)并未被破壞,而是被系統(tǒng)回收、等待被重新分配。
如果我們已經(jīng)有一套元數(shù)據(jù)及數(shù)據(jù)塊,然后將被TRUNCATE的用戶數(shù)據(jù)塊的內(nèi)容取代其用戶數(shù)據(jù)塊的內(nèi)容,是否可以“騙”過Oracle,讓它讀出這些數(shù)據(jù)呢? 回顧一下表掃描的過程,這個方法應(yīng)該是可行的。我們只要想辦法構(gòu)造出一個結(jié)構(gòu)相同、且具有完整元數(shù)據(jù)信息和格式化了的用戶數(shù)據(jù)塊的傀儡表對象,然后將被TRUNCATE的用戶數(shù)據(jù)塊找出,再將其數(shù)據(jù)內(nèi)容部分嫁接到傀儡對象的用戶數(shù)據(jù)塊,使Oracle以外這是傀儡對象的數(shù)據(jù),就能讓Oracle掃描并讀出數(shù)據(jù)內(nèi)容。
1.創(chuàng)建測試表
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.校驗數(shù)據(jù)
SQL> select count(*) from pak_tab;
COUNT(*)
----------
86262
總結(jié)
1,刪除因為恢復(fù)表自動創(chuàng)建的兩個表空間
- drop tablespace fy_rec_data including contents and datafiles;
- drop tablespace fy_rst_data including contents and datafiles;
2,truncate以后,要保證沒有新數(shù)據(jù)灌入
3,存儲該表的數(shù)據(jù)文件不能覆蓋。否則無法完成恢復(fù)。
4,緊急時刻可以將表空間設(shè)為只讀
5,備份的關(guān)鍵性,合理的備份策略是DBA最后的救命稻草,請重視備份!對數(shù)據(jù)懷有敬畏之心??!
原文鏈接:https://blog.51cto.com/yangjunfeng/5487576
相關(guān)推薦
- 2022-07-29 C++超詳細(xì)講解智能指針_C 語言
- 2022-07-12 如何利用python實現(xiàn)kmeans聚類_python
- 2022-10-23 C++繼承與菱形繼承詳細(xì)介紹_C 語言
- 2022-10-31 ViewPager實現(xiàn)圖片切換效果_Android
- 2022-07-03 python?for循環(huán)如何實現(xiàn)控制步長_python
- 2022-08-03 python中filter,map,reduce的作用_python
- 2022-03-22 C++實現(xiàn)簡易選課系統(tǒng)代碼分享_C 語言
- 2022-10-04 goland把go項目打包進(jìn)docker鏡像的全過程記錄_Golang
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支