10g中的新偽列ORA_ROWSCN總結

litterbaby發表於2007-09-23
10g中的新偽列ORA_ROWSCN總結[@more@]

10g中的新偽列ORA_ROWSCN總結

這個偽列是10g中引進的,在oracle的官方文件上說的是:這個偽列是為了提供每一行最近修改的SCN的上限。

For each row, ORA_ROWSCN returns the conservative upper bound system change number (SCN) of the most recent change to the row.

不過oracle隨後也說這是一行最新修改的大致SCN的確定。為什麼是這樣的哪?Oracle解釋說是這個SCN的跟蹤是對這個行駐留塊的事務提交的SCN而得到的。

This pseudocolumn is useful for determining approximately when a row was last updated. It is not absolutely precise, because Oracle tracks SCNs by transaction committed for the block in which the row resides.

如果需要更為精細,精確的每一行的SCN的話,就需要在新增表的時候新增一個行級獨立的跟蹤。例如:

CREATE TABLE ... NOROWDEPENDENCIES | ROWDEPENDENCIES

同時在使用這個偽列的時候,有一定的限制:

1、不能用於查詢檢視使用,但是可以在DML語句的where子句上使用

Select × from ***

Where ora_rowscn =***

2、不能用於flashback

這裡解釋一下為什麼這個偽列會有誤差?

其實原因很簡單,以為Oracle是透過讀資料塊中的ITL上的SCN來返回的數值。

做個試驗。

新增一個表

SQL> create table t as select rownum a from all_objects where rownum <11;

Table created

SQL> select a,ora_rowscn from t;

A ORA_ROWSCN

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

1 4926419

2 4926419

3 4926419

4 4926419

5 4926419

6 4926419

7 4926419

8 4926419

9 4926419

10 4926419

10 rows selected

SQL>

這時候會發現這10行都是放在一個資料塊中。而且SCN都是一樣的

SQL> select a,ora_rowscn,rowid from t;

A ORA_ROWSCN ROWID

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

1 4926419 AAANNQAAEAAAAA8AAA

2 4926419 AAANNQAAEAAAAA8AAB

3 4926419 AAANNQAAEAAAAA8AAC

4 4926419 AAANNQAAEAAAAA8AAD

5 4926419 AAANNQAAEAAAAA8AAE

6 4926419 AAANNQAAEAAAAA8AAF

7 4926419 AAANNQAAEAAAAA8AAG

8 4926419 AAANNQAAEAAAAA8AAH

9 4926419 AAANNQAAEAAAAA8AAI

10 4926419 AAANNQAAEAAAAA8AAJ

10 rows selected

SQL>

修改一個行的數值。

SQL> update t set a=11 where a=1;

1 row updated

SQL> commit;

Commit complete

再次查詢,會發現所有的行都改變了。

SQL> select a,ora_rowscn,rowid from t;

A ORA_ROWSCN ROWID

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

11 4926492 AAANNQAAEAAAAA8AAA

2 4926492 AAANNQAAEAAAAA8AAB

3 4926492 AAANNQAAEAAAAA8AAC

4 4926492 AAANNQAAEAAAAA8AAD

5 4926492 AAANNQAAEAAAAA8AAE

6 4926492 AAANNQAAEAAAAA8AAF

7 4926492 AAANNQAAEAAAAA8AAG

8 4926492 AAANNQAAEAAAAA8AAH

9 4926492 AAANNQAAEAAAAA8AAI

10 4926492 AAANNQAAEAAAAA8AAJ

10 rows selected

SQL>

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

相關文章