相信不少可愛的程式猿都拜讀過《資料庫從刪庫到跑路》一書,我們常常會因為需求的無限變更而氣得發瘋,從而使出畢生所學,刪庫!可惜,這招威力過猛,殺敵一千自損八百,通常跑路還學不會,最後都自食惡果。好了,回歸主題,倘若真的手誤刪除了資料怎麼辦?第一時間請冷靜下來,別方,還有補救的方法。在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...