ITPub博客

首页 > 数据库 > Oracle > 10g中的新伪列ORA_ROWSCN总结

10g中的新伪列ORA_ROWSCN总结

原创 Oracle 作者:litterbaby 时间:2007-09-23 12:26:19 0 删除 编辑
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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    131
  • 访问量
    431847