在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?
在你们的应用中使用到这个伪列了吗?