Oracle資料庫中對誤刪資料的快速恢復

2021-08-11 02:44:40 字數 1547 閱讀 5631

如果一不小心對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...