ORACLE數據恢復方法(提交事務也能夠)

今天在操做數據庫的時候,發現數據操做錯誤,想要恢復,可是沒有用事務,按理說,設置成不默認提交事務,此時所作的各類操做都沒有反應到數據庫中。這時,你能夠rollback事務,撤銷全部未提交的修改。不過,一旦commit了的話,就真沒辦法撤銷了。好在oracle還有時間戳方法。數據庫

第一種方法:oracle

1.打開Flash存儲的權限
ALTER TABLE tablename ENABLE row movement ;
2.把表還原到指定時間點
flashback table tablename to timestamp to_timestamp(''2011-02-28 10:40:00'',''yyyy-mm-dd hh24:mi:ss'');
後面的參數爲要還原的時間點.net

 

第二種:利用ORacle的快照進行查找某個時間點的數據
select * from tablename AS OF TIMESTAMP  (SYSTIMESTAMP - INTERVAL '100' MINUTE)blog

or事務

select * from tablename as of timestamp to_timestamp(2011-05-21 11:40:00','YYYY-MM-DD HH24:MI:SS');flash

這樣能夠查詢到指定的時間段的數據,再把查詢到的數據複製到原來的表中。it

例:io

若是咱們在前5分鐘誤刪除了表emp中的數據,咱們能夠進行以下操做:table

找回原始數據date

Select * from emp as of timestamp sysdate  -  6/1440

刪除原來的表   刪掉後建立一個備份表

Create table emp as (select * from emp as of timestamp sysdate - 6/1440);

能夠作差,找到刪除的記錄=6分鐘前的原始數據—如今表中的記錄 再插入原來的表中提交

Insert into emp 

Select * From

(

select * From emp as of timestamp sysdate - 6/1440 Minus Select * from emp)

 

--timestamp(ags) 方法

--interval(時間間隔)類型用來存儲兩個時間戳之間的時間間隔

--當要回覆被刪除的數據的時候

 

--查詢500分鐘以前的數據

select * from emp as of timestamp(systimestamp - interval '500' minute)

--查詢600秒以前的數據

select * from emp as of timestamp(systimestamp - interval '600' second)

--查詢5小時以前的數據

select * from emp as of timestamp(systimestamp - interval '5' hour)

--查詢一天以前的數據

select * from emp as of timestamp(systimestamp - interval '1' day)

--查詢1分鐘前的數據 (1天=1440分鐘) date-number=date

select * from emp as of timestamp sysdate - 1/1440

--查詢5小時前的數據

select * from emp as of timestamp sysdate - 5/24

--查詢 5小時內數據=內前刪除的5小時前表中的數據-如今表中的數據

--minus減去

select * from

(select * from emp as of timestamp sysdate -5000/1440 minus select * from emp)

從9i開始,oracle提供了閃回(flashback)功能。使用flashback table語句從撤銷段中(undo segmeng)讀取改表的過去映像,同時利用oracle9i中引入的回閃查詢功能重建錶行。Undo_retention給出了回閃支持的最小時間。也就是說flashback最少能夠支持undo_retention給出的時間,若是系統比較閒,則能夠回閃更長的時間。若是系統處於忙時,有可能重用尚未達到undo_retention時間吸納是的數據空間。注意:使用閃回的一個前提是表不能進行ddl操做,不但不能對ddl操做進行回閃,並且,沒法閃回到ddl操做之前的數據了。

注意:不啓動行移動功能,不能閃回表

Alter table emp enable row movement;

這個命令的做用就是容許ORACLE修改分配給行的rowid。在ORACLE中,插入一行時就會爲它分配一個rowid,並且這一行永遠擁有這個rowid。閃回表處理時會對EMP表完成DELETE 操做,而且從新插入行,這樣就會爲這些行分配一個新的rowid。要支持閃回功能就必須容許ORACLE執行這個操做。

 

原文:http://blog.csdn.net/jiajane/article/details/49280277

相關文章
相關標籤/搜索