「數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)」Oracle數(shù)據(jù)庫(kù)誤truncate table的數(shù)據(jù)恢復(fù)
數(shù)據(jù)恢復(fù)環(huán)境:
Oracle 11g R2數(shù)據(jù)庫(kù)。
數(shù)據(jù)庫(kù)故障情況:
數(shù)據(jù)庫(kù)管理員誤truncate table CM_CHECK_ITEM_HIS,表數(shù)據(jù)丟失,業(yè)務(wù)查詢到該表時(shí)報(bào)錯(cuò)。數(shù)據(jù)庫(kù)備份不可用,表數(shù)據(jù)無(wú)法查詢。
*Oracle數(shù)據(jù)庫(kù)小知識(shí):
Truncate原理:ORACLE會(huì)在數(shù)據(jù)字典和Segment Header中更新表的Data Object ID,而實(shí)際數(shù)據(jù)部分的塊則不會(huì)做修改。由于數(shù)據(jù)字典與段頭的DATA_OBJECT_ID與后續(xù)的數(shù)據(jù)塊中的并不一致,所以O(shè)RACLE服務(wù)進(jìn)程在讀取全表數(shù)據(jù)時(shí)不會(huì)讀取到已經(jīng)被TRUNCATE的記錄。
Oracle數(shù)據(jù)庫(kù)數(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)行任何操作。查詢?cè)摫?,?shù)據(jù)庫(kù)中該表的記錄為0條。
北亞數(shù)據(jù)恢復(fù)——Oracle數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)
注: Os:win server 2008R2。數(shù)據(jù)庫(kù)版本:win_oracle_11.2.0.1_x64;
2、對(duì)system表空間文件進(jìn)行分析,找到truncate表的原始數(shù)據(jù)所在的位置。
北亞數(shù)據(jù)恢復(fù)——Oracle數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)
3、解析表所在的數(shù)據(jù)文件,找到truncate的數(shù)據(jù)。
4、將truncate的數(shù)據(jù)插入到數(shù)據(jù)庫(kù)中。
總結(jié):通過解析system01.dbf文件,北亞數(shù)據(jù)恢復(fù)工程師找到truncate的數(shù)據(jù)所在的位置,找到被刪除的數(shù)據(jù)。解析表所在的數(shù)據(jù)文件,將truncate的數(shù)據(jù)插入到數(shù)據(jù)庫(kù)中。
在數(shù)據(jù)庫(kù)中,查找被truncate,發(fā)現(xiàn)數(shù)據(jù)回來(lái)了,直接備份數(shù)據(jù)。
北亞數(shù)據(jù)恢復(fù)——Oracle數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)
5、Exp導(dǎo)出scott用戶;
下一篇:「瞬馬科技」硬盤格式化后能恢復(fù)數(shù)據(jù)嗎?