oracle閃回版本查詢學習
自己做了個實驗,看看閃回版本查詢是咋回事。
閃回版本的查詢是基於undo表空間的。所以undo一定要夠用夠大,並且undo日誌儲存的時間最好也夠長,否則查詢時會報錯:ORA-30052:下限快照表示式無效。這個時候要麼修改查詢的時間範圍,要麼把undo日誌的儲存時間設定大一些:alter system set undo_retention=1800 scope=both;
閃回版本查詢語句可以用以下兩種:
1) select versions_starttime, versions_endtime, versions_xid, versions_operation, t.* FROM lxm.t VERSIONS
BETWEEN TIMESTAMP TO_TIMESTAMP('2016-08-31 13:50:00', 'YYYY-MM-DD HH24:MI:SS') AND TO_TIMESTAMP('2016-08-31 14:05:00', 'YYYY-MM-DD HH24:MI:SS');
或者
select versions_startscn, versions_endtime, versions_xid, versions_operation, t.* FROM lxm.t VERSIONS
BETWEEN TIMESTAMP TO_TIMESTAMP('2016-08-31 13:50:00', 'YYYY-MM-DD HH24:MI:SS') AND TO_TIMESTAMP('2016-08-31 14:05:00', 'YYYY-MM-DD HH24:MI:SS');
2) select xid,commit_scn,commit_timestamp,operation,undo_sql from flashback_transaction_query q where q.xid in (select versions_xid from lxm.t versions between
TIMESTAMP TO_TIMESTAMP('2016-08-31 13:50:00', 'YYYY-MM-DD HH24:MI:SS') AND TO_TIMESTAMP('2016-08-31 14:05:00', 'YYYY-MM-DD HH24:MI:SS'));
第一種語句:
先看第一種語句的實驗結果:
versions_xid 表示事務編號。我分別做了insert、update和delete的操作。主要是 update,如果versions_starttime 和 versions_endtime的值一樣,那麼這兩條記錄分別記錄update前和update後的值,帶U的那條記錄就是update後的值,不帶U的記錄就是update前的值。
下面這個圖表示做了兩次update:
注:這裡的scn號是系統的currernt_scn號,可以用以下語句查詢:
select current_scn from v$database;
scn號可以和時間戳互相轉換,語句如下:
select to_char(scn_to_timestamp(1963220),'YYYY-MM-DD HH24:MI:SS') from dual;
select timestamp_to_scn(to_date('2011-04-14 11:10:25','YYYY-MM-DD HH24:MI:SS')) from dual;
這種語句查詢不需要例項做任何額外的改動。
第二種語句:
第二種語句如果想要執行結果成功,需要例項做一些改變。例項需要開啟補充日誌記錄。否則查詢出來的結果operation欄位只有UNKOWN和BEGIN兩個值,undo_sql欄位則為空。
開啟補充日誌記錄:
SQL> alter database add supplemental log data;
Database altered.
SQL> alter database add supplemental log data (primary key) columns;
Database altered.
檢視是否開啟補充日誌記錄:
SQL> select SUPPLEMENTAL_LOG_DATA_MIN,SUPPLEMENTAL_LOG_DATA_PK,SUPPLEMENTAL_LOG_DATA_UI from v$database;
SUPPLEMENTAL_LOG_DATA_MIN SUPPLEMENTAL_LOG_DATA_PK SUPPLEMENTAL_LOG_DATA_UI
------------------------- ------------------------ ------------------------
YES YES NO
第二種語句查詢的實驗結果:
可以看到結果比第一種查詢語句簡潔明瞭得多,展示了操作型別,撤銷操作的sql語句。
最後補充:普通使用者在執行閃回事務查詢之前,必須為使用者授予適當的DBMS_FLASHBACK包上的許可權。
grant execute on dbms_flashback to user;
grant select any transaction to user;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28497416/viewspace-2124283/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 學習Oracle10g:閃回版本查詢Oracle
- 閃回查詢之閃回版本查詢
- Oracle閃回查詢,閃回版本查詢與閃回事務查詢的使用區別總結Oracle
- Oracle 11G 閃回技術 閃回版本查詢和閃回事務查詢Oracle
- Oracle 11g 閃回版本查詢Oracle
- 閃回版本查詢與閃回事務查詢
- 閃回版本查詢操作
- Oracle 11G 閃回技術 使用閃回版本查詢Oracle
- oracle閃回查詢Oracle
- oracle 閃回查詢Oracle
- 閃回版本查詢技術:
- [閃回特性之閃回版本查詢]Flashback Version Query
- oracle的閃回查詢Oracle
- oracle的回閃查詢Oracle
- 全面學習oracle flashback特性(1.2)--閃回查詢之As of scnOracle
- 閃回查詢之閃回表查詢
- 閃回版本查詢(Flashback Version Query)
- Oracle Database 10g新特性-閃回版本查詢OracleDatabase
- 【閃回特性之閃回查詢】使用閃回查詢(select as of)
- 全面學習oracle flashback特性(1.4)--閃回查詢之Transaction queryOracle
- 全面學習oracle flashback特性(1.1)--閃回查詢之As of timestampOracle
- 【徵文】全面學習oracle flashback特性(1.2)--閃回查詢之As of scnOracle
- 閃回表、閃回查詢
- 【備份恢復】閃回技術之閃回版本查詢
- 聊聊閃回版本查詢Flashback Version Query
- Oracle 11G 閃回技術 使用Oracle閃回查詢Oracle
- 閃回查詢
- 全面學習oracle flashback特性(1.5)--閃回查詢之制約因素Oracle
- 【徵文】全面學習oracle flashback特性(1.1)--閃回查詢之As of timestampOracle
- 【徵文】全面學習oracle flashback特性(1.4)--閃回查詢之Transaction queryOracle
- 閃回(關於閃回查詢)
- 閃回刪除、閃回查詢
- Oracle 11g 閃回查詢Oracle
- 10g新特性——閃回版本查詢
- 【徵文】全面學習oracle flashback特性(1.5)--閃回查詢之制約因素Oracle
- 基本閃回查詢和閃回表
- 閃回技術一:閃回查詢
- 閃回查詢(轉)