Flashback的目的在有Flashback之前,如果你對資料誤操作,並已提交,這時想回退該誤操作,將會是很件麻煩的事情。有人可能會說可以用備份恢複到誤操作之前,但正確的操作資料也一起沒了。唯一可能的辦法就是日誌挖掘,但日誌挖掘非常繁瑣,很難定位。因此,Oracle推出了Flashback技術,主要目的就是為了恢複誤操作。Flashback家族介紹資料庫層級:Flashback Database
表層級:Flashback Drop和Flashback Table,Flashback Data Archive
記錄層級:Flashback Version Query和Flashback Transaction Query
| Flashback家族 |
Flashback Log
|
Tablespace Recycle Bin
|
UNDO |
作用
|
Flashback Database
|
Yes |
|
|
復原資料庫 |
Flashback Drop
|
|
Yes |
|
恢複誤刪除的表 |
Flashback Version Query
|
|
|
Yes |
恢複誤操作的資料 |
Flashback Transaction Query
|
|
|
Yes |
同上 |
Flashback Table
|
|
|
Yes |
同上
|
Flashback 技術發展曆程Flashback Version/Transaction Query 和 Flashback TableFlashback Query和Flashback Table都是利用undo實現回退功能,當需要閃回到過去某一時刻時,先利用Flashback Query查詢,確認閃回的SCN或Timestamp,然後再利用Flashback Table真正實現閃回。
1. 9i 的 Flashback Query
9i的Flashback Query可以查詢過去某個時間點對象的狀態,測試如下:
系統目前時間為:
A105024@O02DMS1>alter session set nls_date_format='yyyy-mm-dd:hh24:mi:ss';
A105024@O02DMS1>select sysdate from dual;
SYSDATE
-------------------
2011-12-16:02:51:16
test表裡有一條資料:
A105024@O02DMS1>select * from test;
ID
----------
1
現把該資料刪除:
A105024@O02DMS1>delete from test;
A105024@O02DMS1>commit;
此時test表中無資料:
A105024@O02DMS1>select * from test;
no rows selected
但是可以通過Flashback Query查詢刪除之前的資料:
A105024@O02DMS1>select * from test as of timestamp to_timestamp('2011-12-16:02:51:16','yyyy-mm-dd:hh24:mi:ss');
ID
----------
1
必要時還可以恢複資料:
A105024@O02DMS1>insert into test select * from test as of timestamp to_timestamp('2011-12-16:02:51:16','yyyy-mm-dd:hh24:mi:ss');
A105024@O02DMS1>commit;