Oracle利用閃回恢復誤刪資料

2021-09-07 20:04:39 字數 2215 閱讀 5163

相信不少可愛的程式猿都拜讀過《資料庫從刪庫到跑路》一書,我們常常會因為需求的無限變更而氣得發瘋,從而使出畢生所學,刪庫!可惜,這招威力過猛,殺敵一千自損八百,通常跑路還學不會,最後都自食惡果。好了,回歸主題,倘若真的手誤刪除了資料怎麼辦?第一時間請冷靜下來,別方,還有補救的方法。在oracle資料庫中,可以利用閃回來恢復已經刪除的表資料。閃回有兩種方法,根據時間和scn號恢復。

根據時間恢復

select

*from zhxg_xio_test as

oftimestamp

(systimestamp -

interval

'5'minute

)

其中這裡的5是指5分鐘前zhxg_xio_test表的資料,執行完檢查是否存在剛誤刪的資料,如果有的話匯出查詢出來的資料,重新匯入即可。當然,這樣查出來的資料不僅包括被誤刪的資料,還有未刪的資料,想要查詢出被刪的也不難,如下:

select

*from zhxg_xio_test as

oftimestamp

(systimestamp -

interval

'5'minute

)where testid notin(

select testid from zhxg_xio_test

)

這樣就能把5分鐘前的該錶與現在的表做對比,把現在表沒有的資料,既被刪除的查詢出來。查詢出來的結果直接利用plsql等工具直接匯出,然後重新導進此表。當然,也可以

利用scn號恢復

select current_scn from v$database

;

利用這條語句可以查詢到目前的scn號,下面演示下如何用scn號恢復資料,其實具體理解跟以上用時間恢復差不多。首先我們檢視一開始表中的資料

select

*from zhxg_xio_test;

這是原來表中的全部資料

再檢視目前的scn號

select current_scn from v$database

;

輸出34128886129然後執行刪除其中一條資料

delete

from zhxg_xio_test where testid =

'002'

;

再檢視一次目前的scn號

select current_scn from v$database

;

此時輸出34128886252,會發現scn號比上一次的34128886129增加了不少,其實在每一次的操作後資料庫都會自動對scn號增加的。相反,我們可以利用scn號的遞減來檢視執行刪除操作之前的資料,具體操作如下:

select

*from zhxg_xio_test as

of scn 34128886129

;

其中34128886129是一開始查詢時的scn號,查詢出來發現資料就是一開始的樣子

當然,在真正的環境中並不知道在執行刪除操作之前的scn號,只能手動慢慢遞減scn號去查詢,比如可以從34128886240再到34128886230等慢慢遞減。那麼同理,相應的也可以只查詢出被刪除的資料

select

*from zhxg_xio_test as

of scn 34128886129

where testid notin(

select testid from zhxg_xio_test

);

被刪除的資料

然後匯出成sql指令碼,再重新匯入即可恢復。

oracle資料庫誤刪閃回恢復

由於誤操作導致資料庫執行ddl drop操作,可以通過 站閃回恢復 首先查詢 站的資訊 select object name,original name,partition name,type ts name,createtime,droptime from recyclebin order by ...

恢復oracle資料 回閃

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

利用Oracle閃回技術恢復誤運算元據

在操作oracle的過程中,有的時候會誤操作表資料,例如更新或者刪除,如何找到誤操作前的資料呢?oracle提供了閃回技術,可以訪問過去某一時間的資料 如果時間太長或者操作過於頻繁有可能找不到 舉例,建立表test sj salary,初始化指令碼 create table test sj sala...