ORA_ROWSCN 可以用来记录表中每一行数据最后修改时的SCN号,当应用使用乐观锁时,可以使用这列来控制版本。

创建表时默认是 NOROWDEPENDENCIES,查询时显示的是该行所在的 block 上最后一次修改的SCN
创建表时设置为 ROWDEPENDENCIES 时,每一行都有自己的 SCN

需要注意的是ROWDEPENDENCIES属性只有在创建表时使用才有效,对于已有的表,通过alter table 语句是无效的,因此需通过重建表的方式来解决。

create table NOROWDEPENDENCIES

默认是 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


create table ROWDEPENDENCIES

SQL> create table tmp_t101 (
     id integer 
	 ) rowdependencies;


insert into tmp_t101 values(1); 
commit;
insert into tmp_t101 values(2); 
commit;

SQL> select ora_rowscn,rowid,id from tmp_t101;


ORA_ROWSCN ROWID		      ID
---------- ------------------ ----------
 102234957 AAB1TrAABAAArWBAAA	       1
 102234959 AAB1TrAABAAArWBAAB	       2

可以看到 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

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐