1.flash query
需要有flashback any table的系統權限或者是該表的flashback對象權限。
需要有該表的SELECT, INSERT, DELETE, ALTER權限
必須保證該表ROW MOVEMENT
A.drop table:
在普通使用者下使用 flashback table test to before drop;
但是在sys下面會報錯ORA-38305: object not in RECYCLE BIN
如果删除一個表,而不想放到資源回收筒中,可以利用purge選項在drop語句中,如
drop table tablename purge
另外,還有一些需要注意的地方
·drop tablespace tsname including contents時,表空間内的所有對象包括資源回收筒内的對象都将被清除。
·隻執行drop tablespace,如果有永久對象将不能執行,如果僅僅是有資源回收筒内的對象,将先清除資源回收筒,然後删除表空間
·如果drop user username cascade時,所有對象将被删除,而且不放入資源回收筒
B.delete/update/insert:
可以使用下列語句查詢曆史資料,但是超過undo_retention(預設15分鐘)的時候就不一定能查到:
SELECT * FROM test AS OF TIMESTAMP
TO_TIMESTAMP('2009-01-9 09:00:00', 'YYYY-MM-DD HH:MI:SS')WHERE XXX
但是作了truncate等DDL操作用上面的查詢就,不能用閃回了
會報ORA-01466: 無法讀取資料 - 表定義已更改
執行FLASHBACK TABLE XXXXXXXXXX的時候必須先
alter table test enable ROW MOVEMENT
然後
FLASHBACK TABLE test TO TIMESTAMP TO_TIMESTAMP('2009-01-08 19:37:15', 'YYYY-MM-DD HH24:MI:SS')
多個表都需要flash back就可以
FLASHBACK TABLE test,test1,test2 TO TIMESTAMP TO_TIMESTAMP('2009-01-08 19:37:15', 'YYYY-MM-DD HH24:MI:SS')
10g的flashback table有如下特性
· 線上操作
· 恢複到指定時間點或者SCN的任何資料.
· 自動恢複相關屬性,如索引,觸發器等
· 滿足分布式的一緻性
· 滿足資料一緻性,所有相關對象将自動一緻
文法為:
FLASHBACK TABLE test TO TIMESTAMP TO_TIMESTAMP('2009-01-08 19:37:15', 'YYYY-MM-DD HH24:MI:SS')
FLASHBACK TABLE test TO SCN 123456;
FLASHBACK TABLE test TO TIMESTAMP '2009-01-08 19:37:15' ENABLE TRIGGERS;
其中ENABLE TRIGGERS表示觸發器恢複之後為enable狀态,而預設為disable狀态。
以上的都是可以線上作,因為它使用的undo裡面的資料。
C.truncate table 不能恢複,其他對象比如package等就需要flash database了
D.其他操作:
a.
select versions_starttime,versions_endtime, versions_xid,versions_operation
from test versions
between timestamp minvalue and maxvalue
order by versions_starttime
在上述查詢中,列 versions_starttime、versions_endtime、versions_xid、versions_operation是僞列,
還有一些僞列,如versions_startscn和versions_endscn顯示了該時刻的系統更改号。列versions_xid顯示了更改該行的事務辨別符
b.某一段時間内的操作
select dummy,versions_starttime,versions_endtime, versions_xid,versions_operation from test
versions between timestamp to_date('2009-01-09 08:30:00','yyyy-mm-dd hh24:mi:ss') and to_date('2009-01-09 08:30:00','yyyy-mm-dd hh24:mi:ss')
2.Flashback Transaction Query:
select * from FLASHBACK_TRANSACTION_QUERY
必須在SYS使用者下執行
裡面查詢的是undo的SQL,比如删除了一筆資料,裡面的就是插入資料的SQL,如果知道v$transaction的xid就可以查到這條undo SQL
3.flash database:
資料不要超過db_flashback_retention_target(預設一天),否則就有可能救不回來。
使用的回閃區域,是以,與下列的參數有關系
db_recovery_file_dest = /oracle/compard/flashbackarea
db_recovery_file_dest_size = 2G
db_flashback_retention_target = 1440
這些參數要事先設定好,否則mount下執行flashback on的時候,會報錯誤:
ORA-38706: Cannot turn on FLASHBACK DATABASE logging.
ORA-38709: Recovery Area is not enabled.
在mount狀态下,确認資料庫開啟到archivelog模式,打開回閃,指令如下:
alter database flashback on;
用下列指令确認資料庫是否開啟在閃回模式下
select flashback_on from v$database;
如果發現資料庫出問題,需要回閃,就可以使用下列指令,将整個資料庫回閃到過去某個時刻。
flashback database to timestamp TO_TIMESTAMP('2008-01-08 19:46:15', 'YYYY-MM-DD HH24:MI:SS');
alter database open read only;
看看是否正确,如果不正确,可以退到mount下繼續閃回
如果确認恢複的是正确的就是用這條SQL,把資料庫打開alter database open resetlogs;
試了一下,依次執行下面的這三條SQL都可以成功:
flashback database to timestamp TO_TIMESTAMP('2008-01-14 10:00:15', 'YYYY-MM-DD HH24:MI:SS');
flashback database to timestamp TO_TIMESTAMP('2008-01-14 09:58:34', 'YYYY-MM-DD HH24:MI:SS');
flashback database to timestamp TO_TIMESTAMP('2008-01-14 10:07:15', 'YYYY-MM-DD HH24:MI:SS');