「數(shù)據(jù)庫數(shù)據(jù)恢復(fù)」Oracle數(shù)據(jù)庫誤truncate table的數(shù)據(jù)恢復(fù)
數(shù)據(jù)恢復(fù)環(huán)境:
Oracle 11g R2數(shù)據(jù)庫。
數(shù)據(jù)庫故障情況:
數(shù)據(jù)庫管理員誤truncate table CM_CHECK_ITEM_HIS,表數(shù)據(jù)丟失,業(yè)務(wù)查詢到該表時報錯。數(shù)據(jù)庫備份不可用,表數(shù)據(jù)無法查詢。
*Oracle數(shù)據(jù)庫小知識:
Truncate原理:ORACLE會在數(shù)據(jù)字典和Segment Header中更新表的Data Object ID,而實(shí)際數(shù)據(jù)部分的塊則不會做修改。由于數(shù)據(jù)字典與段頭的DATA_OBJECT_ID與后續(xù)的數(shù)據(jù)塊中的并不一致,所以O(shè)RACLE服務(wù)進(jìn)程在讀取全表數(shù)據(jù)時不會讀取到已經(jīng)被TRUNCATE的記錄。
Oracle數(shù)據(jù)庫數(shù)據(jù)恢復(fù)過程:

1、為保護(hù)用戶的數(shù)據(jù),本文檔模擬構(gòu)建與用戶生產(chǎn)環(huán)境相同的故障。Scott用戶創(chuàng)建表emp1,復(fù)制emp表,連續(xù)復(fù)制多次,總記錄數(shù)為:7340032條。truncate表emp1,之后沒有進(jìn)行任何操作。查詢該表,數(shù)據(jù)庫中該表的記錄為0條。
北亞數(shù)據(jù)恢復(fù)——Oracle數(shù)據(jù)庫數(shù)據(jù)恢復(fù)
注: Os:win server 2008R2。數(shù)據(jù)庫版本:win_oracle_11.2.0.1_x64;
2、對system表空間文件進(jìn)行分析,找到truncate表的原始數(shù)據(jù)所在的位置。
北亞數(shù)據(jù)恢復(fù)——Oracle數(shù)據(jù)庫數(shù)據(jù)恢復(fù)
3、解析表所在的數(shù)據(jù)文件,找到truncate的數(shù)據(jù)。
4、將truncate的數(shù)據(jù)插入到數(shù)據(jù)庫中。
總結(jié):通過解析system01.dbf文件,北亞數(shù)據(jù)恢復(fù)工程師找到truncate的數(shù)據(jù)所在的位置,找到被刪除的數(shù)據(jù)。解析表所在的數(shù)據(jù)文件,將truncate的數(shù)據(jù)插入到數(shù)據(jù)庫中。
在數(shù)據(jù)庫中,查找被truncate,發(fā)現(xiàn)數(shù)據(jù)回來了,直接備份數(shù)據(jù)。
北亞數(shù)據(jù)恢復(fù)——Oracle數(shù)據(jù)庫數(shù)據(jù)恢復(fù)
5、Exp導(dǎo)出scott用戶;
下一篇:「瞬馬科技」硬盤格式化后能恢復(fù)數(shù)據(jù)嗎?