使用ORA_ROWSCN實現樂觀鎖定
實現樂觀鎖定一般使用時間戳或者版本列的方式
oracle還可以使用ora_rowscn偽列實現
ora_rowscn可以檢視塊級或者行級大致的SCN資訊,可以用於樂觀鎖定的判斷.並且可以看到塊或者行大致修改的時間。
Oracle文件描述如下
如果使用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文件描述如下
如果使用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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Redis CAS樂觀鎖實現Redis
- 【mybatis-plus】什麼是樂觀鎖?如何實現“樂觀鎖”MyBatis
- SQL SERVER樂觀鎖定和悲觀鎖定使用例項SQLServer
- Java 中的悲觀鎖和樂觀鎖的實現Java
- SQLServer樂觀鎖定和悲觀鎖定例項SQLServer
- 悲觀鎖與樂觀鎖的實現(詳情圖解)圖解
- 樂觀鎖和悲觀鎖策略的區別與實現
- 利用MySQL中的樂觀鎖和悲觀鎖實現分散式鎖MySql分散式
- 悲觀鎖和樂觀鎖
- laravel樂觀鎖和悲觀鎖Laravel
- mysql悲觀鎖以樂觀鎖MySql
- 理解樂觀鎖和悲觀鎖
- MySQL鎖(樂觀鎖、悲觀鎖、多粒度鎖)MySql
- MySQL 樂觀鎖MySql
- 樂觀鎖CAS
- java-樂觀鎖與悲觀鎖Java
- MybatisPlus - [03] 樂觀鎖&悲觀鎖MyBatis
- 關於庫存超賣問題,悲觀鎖和樂觀鎖的不同實現
- [轉帖]SQL Server 鎖機制 悲觀鎖 樂觀鎖 實測解析SQLServer
- 關於樂觀鎖與悲觀鎖的實際應用
- SSM (十五) 樂觀鎖與悲觀鎖的實際應用SSM
- MySQL樂觀鎖和悲觀鎖介紹MySql
- Java中的鎖之樂觀鎖與悲觀鎖Java
- 經典問題之樂觀鎖和悲觀鎖及使用場景
- 面試必備之悲觀鎖與樂觀鎖面試
- Redis的事務、樂觀鎖和悲觀鎖Redis
- MySQL 悲觀鎖與樂觀鎖的詳解MySql
- 面試必備之樂觀鎖與悲觀鎖面試
- Java彌散系列 - 樂觀鎖與悲觀鎖Java
- Spring Boot2+JPA之悲觀鎖和樂觀鎖實戰Spring Boot
- Java鎖?分散式鎖?樂觀鎖?行鎖?Java分散式
- 【鎖機制】共享鎖、排它鎖、悲觀鎖、樂觀鎖、死鎖等等
- Java併發:樂觀鎖Java
- 樂觀鎖與悲觀鎖及應用舉例
- 資料庫中的悲觀鎖和樂觀鎖資料庫
- JPA和Hibernate的樂觀鎖與悲觀鎖
- Java中的樂觀鎖——無鎖策略Java
- 深入分析CAS(樂觀鎖)