ORA_ROWSCN 可以用来记录表中每一行数据最后修改时的SCN号,当应用使用乐观锁时,可以使用这列来控制版本。
创建表时默认是 NOROWDEPENDENCIES,查询时显示的是该行所在的 block 上最后一次修改的SCN 创建表时设置为 ROWDEPENDENCIES 时,每一行都有自己的 SCN
需要注意的是ROWDEPENDENCIES属性只有在创建表时使用才有效,对于已有的表,通过alter table 语句是无效的,因此需通过重建表的方式来解决。
默认是 NOROWDEPENDENCIES
SQL> create table tmp_t100 ( id integer ); insert into tmp_t100 values(1); commit; insert into tmp_t100 values(2); commit;可以看到 ORA_ROWSCN 是相同的。
SQL> select ora_rowscn,rowid,id from tmp_t100; ORA_ROWSCN ROWID ID ---------- ------------------ ---------- 102234285 AAB1TqAABAAArP5AAA 1 102234285 AAB1TqAABAAArP5AAB 2 SQL> update tmp_t100 set id=3 where id=2; commit; SQL> select ora_rowscn,rowid,id from tmp_t100; ORA_ROWSCN ROWID ID ---------- ------------------ ---------- 102234349 AAB1TqAABAAArP5AAA 1 102234349 AAB1TqAABAAArP5AAB 3可以看到 ORA_ROWSCN 是不同的。
SQL> update tmp_t101 set id=3 where id=2; commit; SQL> select ora_rowscn,rowid,id from tmp_t101; ORA_ROWSCN ROWID ID ---------- ------------------ ---------- 102234957 AAB1TrAABAAArWBAAA 1 102234988 AAB1TrAABAAArWBAAB 3参考: https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/ORA_ROWSCN-Pseudocolumn.html#GUID-8071AAB0-F656-4C93-B926-0BCE1439F121