PLSQL_閃回刪除FlashBack Delete表誤刪除如何進行恢復(案例)

一、摘要


在PLSQL開發時,有時候會遇到對錶中數據的誤刪除,其實遇到這種情況不需要緊張,如果問題較大,請DBA幫忙,如果只是小問題,只需自己處理,利用flashback閃回操作即可,可可將表進行恢復

在刪除中數據時,系統會自動記錄一個SCN和時間戳,按SCN和時間戳就可以查詢出被誤刪除的資料

1.SCN 概念

SCN是當Oracle數據庫更新後,由DBMS自動維護去累積遞增的一個數字。Oracle數據庫中一共有4種SCN分別爲

系統檢查點SCN: 系統檢查點SCN位於控制文件中,當檢查點進程啓動時(ckpt),Oracle就把系統檢查點的SCN存儲到控制文件中

2. 使用閃回操作時一些前提條件

  • 該表的Flashback權限
  • 擁有該表的SELECT\INSERT\DELETE\ALTER權限
  • 必須保證表示ROW MOVEMENT
  • 採用PURGE參數刪除表中數據時不能使用Flashback進行恢復

3. 閃回查詢

  • 作用: 用以查詢以前的被刪除資料,用以在執行刪除恢復時,有一個正確的scn或者時間戳,系統並沒有進行恢復
  • 語法: select * from bxj_tst_recyclebin as of [scn or timestamp]

4. 閃回恢復

  • 作用:  通過已確認的SCN和時間戳對錶被刪除的數據真正進行恢復
  • 語法: flashback table bxj_tst_recyclebin to [scn or timestamp]

5. 閃回查詢恢復前,執行以下語句

alter table bxj_tst_recyclebin enable row movement

 

二、案例1 - 通過時間戳進行閃回恢復


Step1. 創建8筆測試資料如下

Step2. 刪除其中4筆資料,COMMIT後無法Rollback,通過flashback進行恢復

Step3.1  通過時間間隔確定需恢復的時間戳,在沒有恢復之前, 通過閃回查詢該事件戳爲8筆資料,確定以該時間戳進行恢復

alter table bxj_tst_recyclebin enable row movement

Step3.2  直接通過具體的時間戳進行恢復, 在沒有恢復之前, 通過閃回查詢該事件戳爲8筆資料,確定以該時間戳進行恢復

Step4. 通過flashback進行恢復

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. 恢復完成後,無需閃回查詢,即可以查詢到該4筆被刪除資料

 

三、案例2 - 通過SCN進行閃回恢復


Step1. 系統一旦將事物Commit後,會系統產生一個SCN,一旦發現誤刪除數據,馬上查詢當前的SCN

Step2. 通過閃回查詢,確認該SCN是否能查詢出該4筆被刪除資料

Step4. SCN確認無誤後,進行閃回恢復操作

flashback table bxj_tst_recyclebin to scn 10132214657206

Step5. 恢復完成後,無需閃回查詢,即可以查詢到該4筆被刪除資料 


轉自:點擊打開

發佈了58 篇原創文章 · 獲贊 13 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章