1. 程式人生 > >Oracle資料庫誤刪,誤修改已經提交的恢復方法

Oracle資料庫誤刪,誤修改已經提交的恢復方法

以前給自己制定了一個計劃,一個月至少寫一篇部落格。感覺這個已經被我默默的給破化了,以前這樣想的就是給自己一些計劃去學習新的東西。最近感覺狀態很差,沒有心情學習(也許是因為過年,也許是因為公司)。自己入這行也這麼久了,感覺看不到前途的光芒,有點轉行的念頭了。不發牢騷了,把今天的部落格寫了好以後給自己做個參考。
我們在對錶操作的時候可能因為自己寫的update語句或者delete語句對錶產生了計劃之外的影響,然後這個時候你又把資料給提交了。這個時候想把資料恢復回來可就有點麻頭了,當時我是感覺有點手足無措。但是首先想到的一點就是資料回滾,以前沒有處理過這樣的問題首先想到的自己網上搜一些資料。網上的資料大多是針對於誤刪或者誤增的恢復,我當時的情況是修改的資料,所以就有點小出入。其實Oracle資料庫裡面有個功能是對錶裡面每個時間節點的資料有個備份功能,我們只要把當時誤操作之前那個時間段之前的資料查出來然後重新插入到表裡面就可以了。但是對於修改的資料這樣直接操作會出現問題,因為是對同一個多個主鍵ID操作多次是不允許的。
INSERT INTO bpm_worklist(SELECT *
     FROM bpm_worklist AS OF TIMESTAMP SYSDATE - 3 / 24 --查詢當前日期-1小時前的時間點該表資料。
   MINUS
   SELECT * FROM bpm_worklist);

首先解釋一下這段SQL:查出最近一個小時的記錄跟現有的記錄去重就是你一個小時前的記錄,然後把它重新插入到你的表的記錄裡面。但是對於你修改了多條表裡面的記錄這個SQL是會報錯的。所以你就應該查出一個小時前的記錄然後把資料匯出,刪除資料之後匯入你匯出的資料。

select
* from bpm_worklist AS OF TIMESTAMP TO_TIMESTAMP('2018-02-03 23:00:00', 'yyyy-mm-dd hh24:mi:ss');

這裡我換一下查詢的時間格式,其實跟上面的那個差不多。