如何進(jìn)行恢復(fù)PLSQL閃回誤刪除FlashBack Delete表
1.SCN 概念
SCN是當(dāng)Oracle數(shù)據(jù)庫更新后,由DBMS自動維護(hù)去累積遞增的一個數(shù)字。Oracle數(shù)據(jù)庫中一共有4種SCN分別為
系統(tǒng)檢查點SCN: 系統(tǒng)檢查點SCN位于控制文件中,當(dāng)檢查點進(jìn)程啟動時(ckpt),Oracle就把系統(tǒng)檢查點的SCN存儲到控制文件中
2. 使用閃回操作時一些前提條件
-
該表的Flashback權(quán)限
-
擁有該表的SELECT\INSERT\DELETE\ALTER權(quán)限
-
必須保證表示ROW MOVEMENT
-
采用PURGE參數(shù)刪除表中數(shù)據(jù)時不能使用Flashback進(jìn)行恢復(fù)
3. 閃回查詢
-
作用: 用以查詢以前的被刪除資料,用以在執(zhí)行刪除恢復(fù)時,有一個正確的scn或者時間戳,系統(tǒng)并沒有進(jìn)行恢復(fù)
-
語法: select * from bxj_tst_recyclebin as of [scn or timestamp]
4. 閃回恢復(fù)
-
作用: 通過已確認(rèn)的SCN和時間戳對表被刪除的數(shù)據(jù)真正進(jìn)行恢復(fù)
-
語法: flashback table bxj_tst_recyclebin to [scn or timestamp]
5. 閃回查詢恢復(fù)前,執(zhí)行以下語句
alter table bxj_tst_recyclebin enable row movement
二、案例1 - 通過時間戳進(jìn)行閃回恢復(fù)
Step1. 創(chuàng)建8筆測試資料如下
Step2. 刪除其中4筆資料,COMMIT后無法Rollback,通過flashback進(jìn)行恢復(fù)
Step3.1 通過時間間隔確定需恢復(fù)的時間戳,在沒有恢復(fù)之前, 通過閃回查詢該事件戳為8筆資料,確定以該時間戳進(jìn)行恢復(fù)
alter table bxj_tst_recyclebin enable row movement
Step3.2 直接通過具體的時間戳進(jìn)行恢復(fù), 在沒有恢復(fù)之前, 通過閃回查詢該事件戳為8筆資料,確定以該時間戳進(jìn)行恢復(fù)
Step4. 通過flashback進(jìn)行恢復(fù)
flashback table bxj_tst_recyclebin to timestamp(systimestamp - interval'600'second);
flashback table bxj_tst_recyclebin to timestamp(to_timestamp(to_date('20140702 11:40:00','YYYYMMDD HH:MI:SS')));
Step5. 恢復(fù)完成后,無需閃回查詢,即可以查詢到該4筆被刪除資料
三、案例2 - 通過SCN進(jìn)行閃回恢復(fù)
Step1. 系統(tǒng)一旦將事物Commit后,會系統(tǒng)產(chǎn)生一個SCN,一旦發(fā)現(xiàn)誤刪除數(shù)據(jù),馬上查詢當(dāng)前的SCN
Step2. 通過閃回查詢,確認(rèn)該SCN是否能查詢出該4筆被刪除資料
Step4. SCN確認(rèn)無誤后,進(jìn)行閃回恢復(fù)操作
flashback table bxj_tst_recyclebin to scn 10132214657206
Step5. 恢復(fù)完成后,無需閃回查詢,即可以查詢到該4筆被刪除資料
原文鏈接:http://www.cnblogs.com/eastsea/p/3819908.html