实现乐观锁定一般使用时间戳或者版本列的方式
oracle还可以使用ora_rowscn伪列实现
ora_rowscn可以查看块级或者行级大致的SCN信息,可以用于乐观锁定的判断.并且可以看到块或者行大致修改的时间。
Oracle文档描述如下
http://docs.oracle.com/cd/E11882_01/server.112/e41084/pseudocolumns007.htm#SQLRF50953
如果使用ora_rowscn查看行级scn信息,首先需要设置表的属性为ROWDEPENDENCIES
下面通过实验查看
drop table t1;
create table t1
(
id int primary key,
name varchar2(20) not null,
createtime date default sysdate
) ROWDEPENDENCIES ;
insert into t1(id,name) values(1,'test1');
commit;
--稍等一会儿
exec Dbms_lock.sleep(10);
insert into t1(id,name) values(2,'test2');
commit;
--稍等一会儿
exec Dbms_lock.sleep(15);
insert into t1(id,name) values(3,'test3');
commit;
set linesize 400;
select
to_char(scn_to_timestamp(ora_rowscn),'yyyy-mm-dd HH24:mi:ss') scn_time,
ora_rowscn scn,
id,name,
to_char(createtime,'yyyy-mm-dd HH24:mi:ss') ct from t1;
select table_name,dependencies from user_tables;
但是相应的,每行的存储空间增加6 byte
他相对于版本列,优点在于可以查看该行大致的更新时间
相对于时间戳,优点在于免去手工更新维护时间戳的工作
oracle还可以使用ora_rowscn伪列实现
ora_rowscn可以查看块级或者行级大致的SCN信息,可以用于乐观锁定的判断.并且可以看到块或者行大致修改的时间。
Oracle文档描述如下
http://docs.oracle.com/cd/E11882_01/server.112/e41084/pseudocolumns007.htm#SQLRF50953
如果使用ora_rowscn查看行级scn信息,首先需要设置表的属性为ROWDEPENDENCIES
下面通过实验查看
drop table t1;
create table t1
(
id int primary key,
name varchar2(20) not null,
createtime date default sysdate
) ROWDEPENDENCIES ;
insert into t1(id,name) values(1,'test1');
commit;
--稍等一会儿
exec Dbms_lock.sleep(10);
insert into t1(id,name) values(2,'test2');
commit;
--稍等一会儿
exec Dbms_lock.sleep(15);
insert into t1(id,name) values(3,'test3');
commit;
set linesize 400;
select
to_char(scn_to_timestamp(ora_rowscn),'yyyy-mm-dd HH24:mi:ss') scn_time,
ora_rowscn scn,
id,name,
to_char(createtime,'yyyy-mm-dd HH24:mi:ss') ct from t1;
select table_name,dependencies from user_tables;
但是相应的,每行的存储空间增加6 byte
他相对于版本列,优点在于可以查看该行大致的更新时间
相对于时间戳,优点在于免去手工更新维护时间戳的工作
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29254281/viewspace-1304853/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29254281/viewspace-1304853/