恢復ORACLE被誤更新或刪除資料的方法

2021-07-23 14:09:33 字數 1447 閱讀 4483

有時候我們在操作oracle資料庫的時候,可能由於sql寫錯了導致把資料update錯了,或者delete刪除掉了,那麼這時候如何去恢復之前的資料呢?

莫著急,我們可以採用oracle的基於時間查詢as of timestamp的辦法進行恢復資料。下面以具體例子進行講解用法。

1、比如,我的wl_notify_task表目前有三條資料,大家重點關注parameter欄位。

2、我現在做乙個update操作,要把id=1的parameter欄位更新為param_test8,但是由於我操作的失誤,id=1條件忘了加了,導致整表更新了。導致其他記錄的parameter欄位全部都是param_test8

update wl_notify_task set parameter = 『param_test8′

杯具發生了,那麼如何再找到我之前的記錄是什麼呢??

3、沒事,我們可以採用oracle的基於時間查詢的辦法查詢出3分鐘前的表的記錄情況,查詢sql如下:

select * from wl_notify_taskas of timestamp sysdate – 3/1440

對sql的解釋說明:

sysdate :當前時間

1440 :24h*60m=1440m

3:3分鐘前

4、通過上面的查詢,我們看到了在update之前的資料情況。那麼把資料恢復回去就很簡單了,通過id關聯的方式更新回去即可。如下:

update wl_notify_task t1 

set t1.parameter = 

(select parameter 

from wl_notify_task as of timestamp sysdate – 3 / 1440 

where t1.id = id)

這種做法也是dba常用的恢復資料的手段。對於刪除的情況,那麼就通過insert辦法重新把記錄插入表即可。

最後需要 特別提醒大家注意 的是,sql中的  sysdate-3/1440  代表查詢3分鐘前的記錄情況,由於是和當前時間sysdate的距離3分鐘前,所以這個隨著隔的時間不同及時間的推移是會變化的,一般的做法是在真正做恢復時的update前,需要先select查詢一下比如3分鐘前的資料是否是我們想要的資料,確認無誤後立即做恢復的update。如果資料不是我們想要的,那麼就需要通過調節分鐘數直到找到我們想要的資料。這種辦法適合小批量資料,如果是大批量資料且很重要的資料的話,建議大家新建一張結構相同的表,先把as of timestamp查詢出來的資料存到新錶中,再進行恢復操作,因為這樣資料不再受時間差的影響,確保資料是準確的,無論你何時開始做恢復操作。

**:

恢復ORACLE被誤更新或刪除資料的辦法

有時候我們在操作oracle資料庫的時候,可能由於sql寫錯了導致把資料update錯了,或者delete刪除掉了,那麼這時候如何去恢復之前的資料呢?莫著急,我們可以採用oracle的基於時間查詢as of timestamp的辦法進行恢復資料。下面以具體例子進行講解用法。1 比如,我的wl not...

恢復ORACLE被誤更新或刪除資料的方法

有時候我們在操作oracle資料庫的時候,可能由於sql寫錯了導致把資料update錯了,或者delete刪除掉了,那麼這時候如何去恢復之前的資料呢?莫著急,我們可以採用oracle的基於時間查詢as of timestamp的辦法進行恢復資料。下面以具體例子進行講解用法。1 比如,我的wl not...

oracle資料被誤更新,如何回滾?

得益於自己的好習慣,每次更新資料都是在測試庫把sql先跑一遍,才敢到線上庫執行。其實即使出錯了,還有恢復的餘地。步驟如下。步驟一 select from js gkb unit as oftimestamp to timestamp 20201223 14 30 00 yyyymmdd hh24 m...