使用ORA_ROWSCN實現樂觀鎖定

壹頁書發表於2014-10-20
實現樂觀鎖定一般使用時間戳或者版本列的方式
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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章