使用閃回查詢恢復誤碼刪除的資料

2021-06-16 07:05:29 字數 1455 閱讀 3043

閃回查詢通過對回滾段中儲存的前映象資料進行追溯,可以獲得變更之前的資料,從而在前映象被覆蓋之前,提供一種快捷的恢復和回退方式。

閃回特徵受到初始化引數undo_retention的影響,

alter system set undo_retention=10800 scope=both; 增大這個引數可能會導致更多的undo表空間使用。

在生產環境中修改這樣乙個引數需要謹慎:

1.盡量在測試後在生產環境中執行某行特定的維護操作。

2.在生產環境空閒時才執行某些特定的維護操作。

在oracle 10gr1 rac環境下修改undo_retention引數,使用如下命令:

alter system set undo_retention=18000 sid='*';

這條命令直接導致rac的其他節點掛起,oracle記錄了乙個相關的bug,bug號為4220405,oracle提示不指定具體sid的undo_retention修改在該版本中不被支援,可分別修改不同的例項。

通過閃回查詢恢復誤碼刪除資料的例項:

資料庫執行在歸檔模式下,可以首先通過v$archived_log檢視來確認資料庫的scn變化:

sql> col fscn for 99999999999999999999999

sql> col nscn for 9999999999999999999999

sql>select name,first_change# fscn,next_change# nscn,first_time from v$archived_log;

獲得當前的scn

sql>select dbms_flashback.get_system_change_number fscn from dual;

使用應用使用者嘗試閃回:

sql> connect username/password

現在資料:

sql>select count(*) from hs_passport;

建立恢復表如下:

sql>create table hs_passport_recov as select * from hs_passport where 1=0;

根據開發人員提供的大致誤操作時間,結合v$archived_log檢視,選擇適當scn向前執行閃回查詢:

sql>select count(*) from hs_passport as of scn 12929970422;

嘗試多個scn,獲取最佳值(如果能得知具體時間,那麼可以獲得準備的資料閃回);

sql>select count(*) from hs_passport as of scn &scn:

最後選擇恢復scn時間點

sql>insert into hs_passport_recov select * from hs_passport as of scn 129.....

向當前表中補回誤碼刪除的資料並確認資料是否補擠,至此閃回恢復成功。

使用oracle閃回查詢功能恢復之前刪除的資料

在誤刪除資料之後使用oracle閃回查詢功能恢復刪除的記錄 首先,使用了oracle的閃回查詢功能 flashback table test to timestamp to timestamp 2005 05 07 15 00 00 yyyy mm dd hh24 mi ss 但是發現此功能只能夠將...

oracle使用閃回功能恢復刪除的表資料

最近使用oracle資料庫時 匯入資料時 將主庫和目標庫 搞反 本來是先清掉目標庫 匯入主庫的資料 結果不小心將主庫的資料給刪了 正式資料 心急如憤 查了下資料 發現oracle9i起就有閃回功能 試了一下 select from acceptuser 發現一條資料都沒有 寫成下面帶閃回的 sele...

恢復oracle資料 回閃

1.刪除表後,可以採用如下操作 在 user recyclebin中找到最近操作過的表名稱,然後用閃回 只能用於10g及以上版本 flash back table table name to before drop 如果是刪了或修改裡面的資料,可以先建立乙個快表將刪除修改之前狀態的資料找回到這個表中...