Flashback Query閃回查詢
從oracle9i就提供了基本形式的閃回查詢:可以查詢過去某個時間的資料庫狀態。工作原理是將查詢指定的時間對映到一個scn,每當查詢找到自從該scn以來更改的一個塊,它將轉到撤銷段以提取回滾此更改所需的撤銷資料。嚴格上說這種回滾是臨時性的,並且僅對執行閃回查詢的會話可見,顯然,為了成功執行閃回查詢,撤銷資料必須是可用的。
在後續版本中,大大增強了閃回查詢的功能,現在它可以用來檢索一個行的所有版本,反轉各個事務,或反轉某個時間以來對錶作出的所有更改。當然,也可以保證閃回成功執行---------但是做到這一點要付出代價:它可能引起事務失敗。
注意:所有形式的閃回查詢以來撤銷資料來重構它在過去某個時間點的資料。
(1)首先建立一個測試表regions_backup:
HR@orcl 07-OCT-14>select * from regions_backup;
REGION_ID REGION_NAME
---------- -------------------------
1 Europe
2 Americas
3 Asia
4 Middle East and Africa
REGION_ID REGION_NAME
---------- -------------------------
1 Europe
2 Americas
3 Asia
4 Middle East and Africa
(2)記錄時間:
HR@orcl 07-OCT-14>alter session set nls_date_format='yy-mm-dd hh24:mi:ss';
Session altered.
HR@orcl 14-10-07 20:17:28>select sysdate from dual;
SYSDATE
-----------------
14-10-07 20:17:36
(3)從表中刪除一些行,並且提交更改:
HR@orcl 14-10-07 20:18:24>select * from regions_backup;
REGION_ID REGION_NAME
---------- -------------------------
1 Europe
4 Middle East and Africa
(3)查詢針對以前某個時間的表:
HR@orcl 14-10-07 20:22:25>select * from regions_backup as of timestamp to_timestamp('14-10-07 20:17:36','yy-mm-dd hh24:mi:ss');
REGION_ID REGION_NAME
---------- -------------------------
1 Europe
2 Americas
3 Asia
4 Middle East and Africa
REGION_ID REGION_NAME
---------- -------------------------
1 Europe
2 Americas
3 Asia
4 Middle East and Africa
(4)查詢組合實時資料和歷史資料,以瞭解刪除了哪些行。該查詢的輸出可以用於修復的目的,以便將那些行重新插入回表中:
HR@orcl 14-10-07 20:23:00>select * from regions_backup as of timestamp to_timestamp('14-10-07 20:17:36','yy-mm-dd hh24:mi:ss') minus select * from regions_backup;
REGION_ID REGION_NAME
---------- -------------------------
2 Americas
3 Asia
REGION_ID REGION_NAME
---------- -------------------------
2 Americas
3 Asia
儘管針對過去某個時間點的資料執行查詢是有用的,但是有時也希望完成一系列選擇。透過使用DBMS_FLASHBACK程式包可以將整個會話回退到過去某個時間:
HR@orcl 07-OCT-14>execute dbms_flashback.enable_at_time(to_timestamp('14-10-07 20:17:36','yy-mm-dd hh24:mi:ss'));
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
HR@orcl 07-OCT-14>select * from regions_backup;
REGION_ID REGION_NAME
---------- -------------------------
1 Europe
2 Americas
3 Asia
4 Middle East and Africa
REGION_ID REGION_NAME
---------- -------------------------
1 Europe
2 Americas
3 Asia
4 Middle East and Africa
從此以後,所有查詢將看到的資料庫在指定時間的狀態。其他所有會話將看到實時資料-----但是在取消閃回之前這個會話將看到一個凍結版本的資料庫。
HR@orcl 07-OCT-14>update regions_backup set region_id=5 where region_name='EUROPE';
update regions_backup set region_id=5 where region_name='EUROPE'
*
ERROR at line 1:
ORA-08182: operation not supported while in Flashback mode
update regions_backup set region_id=5 where region_name='EUROPE'
*
ERROR at line 1:
ORA-08182: operation not supported while in Flashback mode
HR@orcl 07-OCT-14>execute dbms_flashback.disable;
PL/SQL procedure successfully completed.
HR@orcl 07-OCT-14>select * from regions_backup;
REGION_ID REGION_NAME
---------- -------------------------
1 Europe
4 Middle East and Africa
PL/SQL procedure successfully completed.
HR@orcl 07-OCT-14>select * from regions_backup;
REGION_ID REGION_NAME
---------- -------------------------
1 Europe
4 Middle East and Africa
當處於閃回模式時,無法執行DML命令,否則會丟擲錯誤,只能執行select語句。
閃回查詢(透過一個查詢或使用DBMS_FLASHBACK)可以回退到多久以前取決於撤銷段的內容。如果構造過時的結果集所需的撤銷資料不可用,那麼查詢將會失敗並給出一個ORA-08180錯誤訊息“No snapshot found based on specified time“。
啟用閃回查詢的語法接受時間戳或scn,如果使用scn,那麼閃迴轉到的時間點是精確的,如果指定某個時間,那麼它將對映到一個scn上並且精度是3秒。
注意:可以查詢以前某個時間點的資料庫,但是永遠不能對過去版本的資料執行DML。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29800581/viewspace-1314386/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 閃回版本查詢(Flashback Version Query)
- [閃回特性之閃回版本查詢]Flashback Version Query
- 聊聊閃回版本查詢Flashback Version Query
- 【閃回特性之閃回事務查詢】Flashback Transaction Query
- oracle flashback特性(1.4)--閃回查詢之Transaction queryOracle
- 【Flashback】使用檢視快速獲得Flashback Query閃回查詢資料
- 全面學習oracle flashback特性(1.4)--閃回查詢之Transaction queryOracle
- 聊聊閃回事務查詢Flashback Transaction Query
- flashback query閃回資料
- 【徵文】全面學習oracle flashback特性(1.4)--閃回查詢之Transaction queryOracle
- Oracle閃回技術--Flashback Version QueryOracle
- Oracle9i Flashback Query 閃回查詢總結 --- (通過SCN恢復)Oracle
- oracle flashback特性(1.2)--閃回查詢之As of scnOracle
- 閃回之 Flashback Query (dml表、過程、函式、包等)、Flashback version Query函式
- 使用FLASHBACK_TRANSACTION_QUERY查詢回滾事務SQLSQL
- 閃回查詢之閃回版本查詢
- 閃回查詢之閃回表查詢
- oracle flashback特性(1.1)--閃回查詢之As of timestampOracle
- 【閃回特性之閃回查詢】使用閃回查詢(select as of)
- 閃回表、閃回查詢
- oracle flashback特性(1.5)--閃回查詢之制約因素Oracle
- Oracle9i,.10g 閃回查詢(flashback)Oracle
- 閃回查詢
- 閃回(關於閃回查詢)
- 閃回刪除、閃回查詢
- 全面學習oracle flashback特性(1.2)--閃回查詢之As of scnOracle
- Oracle Flashback query查詢的侷限Oracle
- 基本閃回查詢和閃回表
- 閃回技術一:閃回查詢
- 閃回版本查詢與閃回事務查詢
- oracle閃回查詢Oracle
- 閃回查詢(轉)
- 閃回查詢(1)
- oracle 閃回查詢Oracle
- 使用dbms_flashback工具包實現閃回查詢功能
- 全面學習oracle flashback特性(1.1)--閃回查詢之As of timestampOracle
- 【徵文】全面學習oracle flashback特性(1.2)--閃回查詢之As of scnOracle
- oracle 閃回 flashbackOracle