標籤:ber ane 儲存 而且 讀取 快照 刪掉 是的 啟動
今天在操作資料庫的時候,探索資料操作錯誤,想要恢複,但是沒有用事務,按理說,設定成不預設提交事務,此時所做的各種操作都沒有反應到資料庫中。這時,你可以rollback事務,撤銷所有未提交的修改。不過,一旦commit了的話,就真沒辦法撤銷了。好在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‘‘);
後面的參數為要還原的時間點
第二種:利用ORacle的快照進行尋找某個時間點的資料
select * from tablename AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL ‘100‘ MINUTE)
or
select * from tablename as of timestamp to_timestamp(2011-05-21 11:40:00‘,‘YYYY-MM-DD HH24:MI:SS‘);
這樣可以查詢到指定的時間段的資料,再把查詢到的資料複製到原來的表中。
例:
如果我們在前5分鐘誤刪除了表emp中的資料,我們可以進行如下操作:
找回未經處理資料
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
ORACLE資料恢複方法(提交事務也可以)