New pseudo Column ORA_ROWSCN after 10g

在Oracle 10g之后版本中提供了一个新的伪列,ORA_ROWSCN,该伪列用来显示行级的SCN。

注意:只有在create table时加上ROWDEPENDENCIES关键字,才可以启动行级SCN的记录,否则ORA_ROWSCN只会显示该行所在的block头部记录的SCN。ROWDEPENDENCIES关键字只有在创建表的时候可以使用,表一旦被创建该属性则无法变更。

SQL> select ora_rowscn,a.* from dept a;
 
ORA_ROWSCN DEPTNO DNAME          LOC
---------- ------ -------------- -------------
   1514356     10 ACCOUNTING     NEW YORK
   1514356     20 RESEARCH       DALLAS
   1514356     30 SALES          CHICAGO
   1514356     40 OPERATIONS     BOSTON

怎么使用ORA_ROWSCN则需要发挥大家智慧。下面是两则有趣的例子。

1. 如何使用ORA_ROWSCN来避免更新在选取了之后又被其它会话更新过的记录,从而避免使用select … for update来锁定数据行。
ORA_ROWSCN: The pseudo Column

2. 如何在不开启Audit的情况下,估算某表被最新改动的时间(不是DDL改动,而是DML改动)。
When was a table last changed?

在你们的应用中使用到这个伪列了吗?