Oracle 11G 閃回技術 使用閃回版本查詢

kingsql發表於2015-05-22

使用閃回版本查詢來獲取在給定的時間區間中,指定的行的不同版本。當COMMIT語句被執行時,一個新的行版本被建立。

閃回版本查詢使用VERSIONS BETWEEN子句:VERSIONS {BETWEEN {SCN | TIMESTAMP} start AND end}

startend是代表開始和結束的表示式,代表被查詢的時間區間。

閃回版本查詢返回一個表,包含行在指定的時間區間中的所有版本。在表中的每行都包含關於行版本的後設資料偽列。

這些資訊可以顯示資料庫何時和如何發生特定的改變。

12.1  Oracle閃回版本查詢行資料偽列

偽列

描述

VERSIONS_STARTSCN

VERSIONS_STARTTIME

行版本被建立時的SCNTIMESTAMP。這個偽列標識了最初擁有這個行版本的值的時候的時間。

使用這個值為閃回表或閃回查詢確定過去的目標時間。

如果這個偽列為NULL,則行版本在start之前被建立。(使用startend確定一個時間範圍)

VERSIONS_ENDSCN

VERSIONS_ENDTIME

行版本過期的SCNTIMESTAMP

如果為NULL,則表明行版本是在查詢的時間為當前版本,或對應於刪除操作的行。

VERSIONS_XID

標識建立行版本的事務

VERSIONS_OPERATION

事務執行的操作(I-INSERT D-DELETEU-UPDATE)。版本就是被插入、刪除、更新的行。即插入和更新操作之後、刪除操作之前的行。

對於索引鍵的使用者更新,閃回版本查詢會將一個UPDATE操作2個操作,即DELETEINSERT

 

給定的行版本從它的VERSIONS_START*開始到VERSIONS_END*一直有效。但不包括結束邊界點。

t[VERSIONS_START*, VERSIONS_END*)

--表明從2003.09.09-2003.10.25日,salary一直是10243

VERSIONS_START_TIME     VERSIONS_END_TIME     SALARY

-------------------     -----------------     ------

09-SEP-2003               25-NOV-2003             10243

--閃回版本查詢的典型應用

SELECT versions_startscn, versions_starttime, versions_endscn, versions_endtime, versions_xid, versions_operation, last_name, salary

  FROM employees

  VERSIONS BETWEEN TIMESTAMP

  TO_TIMESTAMP('2008-12-18 14:00:00', 'YYYY-MM-DD HH24:MI:SS')

  AND TO_TIMESTAMP('2008-12-18 17:00:00', 'YYYY-MM-DD HH24:MI:SS')

  WHERE first_name = 'John';

可以在閃回事務查詢中使用VERSIONS_XID來定位事務的後設資料,包括撤銷行改變的SQL語句和產生這個改變的使用者。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28389881/viewspace-1667737/,如需轉載,請註明出處,否則將追究法律責任。

相關文章