如何恢復被更新掉的資料

2021-09-26 06:51:35 字數 2360 閱讀 5310

參考:oracle誤刪表內資料,如何恢復

/*1.flashback query*/

/*這裡只是查出被刪之前的資料,如果要恢復,則把查詢出來的資料匯出為sql,然後找到原表,重新匯入資料即可*/

--閃回到15分鐘前

select

*from orders as

oftimestamp

(systimestamp -

interval

'15'

minute

)where..

....

--這裡可以使用day、second、month替換minute,例如:

select

*from orders as

oftimestamp

(systimestamp -

interval

'2'day

)--閃回到某個時間點

select

*from orders as

oftimestamp to_timestamp (

'01-sep-04 16:18:57.845993'

,'dd-mon-rr hh24:mi:ss.ff'

)where..

.--閃回到兩天前

select

*from orders as

oftimestamp

(sysdate -2)

where..

....

.../*2.flashback drop*/

1.flashback table orders to before drop

;--2.如果源表已經重建,可以使用rename to子句:

flashback table

order

to before drop

rename

to order_old_version;

/*3.flashback table*/

--1.首先要啟用行遷移:

alter

table

order

enable

row movement;

--2.閃回表到15分鐘前:

flashback table

order

totimestamp systimestamp -

interval

'15'

minute

;--閃回到某個時間點:

flashback table

order

totimestamp to_timestamp(

'2007-09-12 01:15:25 pm'

,'yyyy-mm-dd hh:mi:ss am'

)

select province_dept_name,province_dept_id,province_duty_id,province_duty_name

from t_table_name as of timestamp sysdate-80/1440

where project_cd=『b19302327125000』

參考:select * from wl_notify_task as of timestamp sysdate – 3/1440

對sql的解釋說明:

sysdate :當前時間

1440 :24h*60m=1440m

3:3分鐘前

通過上面的查詢,我們看到了在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恢復被drop掉的表

以前只知道windows有個 站,今天聽說oracle也有個 站!在oracle中可能不小心會drop掉乙個表,如果沒有定期做備份的話,將會帶來很大的麻煩。如果有的情況下,每天的資料都很重要,而定期備份的週期又稍長,情況恐怕也不容樂觀!不過還好oracle有個 站,概念就跟windows裡的 站一模...

在Oracle中恢復被DROP掉的表

在oracle中可能不小心會drop掉乙個表,如果沒有定期做備份的話,將會帶來很大的麻煩。如果有的情況下,每天的資料都很重要,而定期備份的週期又稍長,情況恐怕也不容樂觀 以前只知道windows有個 站,今天聽說oracle也有個 站 不過還好oracle有個 站,概念就跟windows裡的 站一模...

在Oracle中恢復被DROP掉的表

在oracle中可能不小心會drop掉乙個表,如果沒有定期做備份的話,將會帶來很大的麻煩。如果有的情況下,每天的資料都很重要,而定期備份的週期又稍長,情況恐怕也不容樂觀 以前只知道windows有個 站,今天聽說oracle也有個 站 不過還好oracle有個 站,概念就跟windows裡的 站一模...