如果一不小心對oracle資料庫中的資料進行了誤刪除操作,那麼如何進行資料恢復呢(不考慮全庫備份和利用歸檔日誌)?如果使用的是9i以及之後的版本,那麼我們可以採用閃回技術對誤刪除的資料進行恢復。方式有兩種。
原理:利用oracle提供的閃回方法,如果在刪除資料後還沒做大量的操作(只要保證被刪除資料的塊沒被覆寫),就可以利用閃回方式直接找回刪除的資料。
*確定刪除資料的時間(在刪除資料之前的時間就行,不過最好是刪除資料的時間點)。
*用語句找出刪除的資料。
*把刪除的資料重新插入原表。
方式1:基於時間戳的資料恢復 as of timestamp
1、首先要查詢到系統的當前時間,必須以系統時間的時間戳為基準。
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
2、查詢當前系統時間20分鐘前的資料。sysdate是系統函式,用來取得當前的系統時間(以天為單位),sysdate-20/1440,得出的就是距當前時間20分鐘前的記錄了(60*24=1440)。
select * from 表名 as of timestamp sysdate-20/1440;
3、將20分鐘前的資料重新插回表中(注意不要存在相同的主鍵)。由於在時間上的不準確,可能會導致恢復的資料中包括了一些已經在表中的資料。這就會引起主鍵不唯一的衝突,為了避免這樣衝突,建議將步驟2的資料恢復到新錶中。
**恢復到原來的表**
insert into 表名 (select * from 表名 as of timestamp sysdate-20/1440 );
**恢復到新錶**
create table 新錶名
as select * from 誤操作的表
as of timestamp sysdate-20/1440 ;時間點
注意:
as of timestamp方式的使用非常方便,但是在某些情況下,我們建議使用as of scn的方式執行flashback query。如需要對多個相互有主外來鍵約束的表進行恢復時,如果使用as of timestamp的方式,可能會由於時間點不統一的緣故造成資料選擇或插入失敗,通過as of scn方式則能夠確保記錄處理的時間點一致。
方式2:基於scn的資料恢復 as of scn
1、獲得當前資料庫的scn號,查詢到的scn號為:1499223
select current_scn from v$database; (切換到sys使用者或system使用者查詢)
2、查詢當前scn號之前的scn
select * from 表名 as of scn 1499220; (確定刪除的資料是否存在,如果存在,則恢復資料;如果不是,則繼續縮小scn號)
3、恢復刪除且已提交的資料
flashback table 表名 to scn 1499220;
參考鏈結 恢復oracle資料庫誤刪資料
一 通過scn恢復刪除 1 獲得當前資料庫的scn號 select current scn from v database 切換到sys使用者或system使用者查詢 查詢到的scn號為 1499223 2 查詢當前scn號之前的scn select from 表名 as of scn 149922...
oracle資料庫誤刪閃回恢復
由於誤操作導致資料庫執行ddl drop操作,可以通過 站閃回恢復 首先查詢 站的資訊 select object name,original name,partition name,type ts name,createtime,droptime from recyclebin order by ...
Oracle資料庫使用delete誤刪資料恢復
恢復方式 一.根據時間恢復 1 查詢資料庫當前時間 目的是為了檢查資料庫時間是否與你電腦時間相近,避免時間不同而將資料恢復到錯誤時間點 select to char sysdate,yyyy mm dd hh24 mi ss from dual 2 查詢刪除資料時間點之前的資料 select fro...