LOCK-来自 oracle 文档-concept
又看了一遍 oracel 文档中 concept 的 lock 说明,基本上 lock 的概念理解的有些条
理了..
a.
Concept
i.
锁定机制
:
锁是并发访问的时候用于保护共享资源不被同时并发修
改
.
信息的完整性
(integrity).
行级别的锁
(TX),oracle
提供的是
non-escalate(
非升级
)
的
,
其他的
数据库
escalate lock
要么覆盖所有行甚至整个表
(
需要额外的资
源去管理
lock). Oracle
只锁住要修改的行
-
允许更多的并发访问
,
冲突最小
;
而且因为
oracle
的锁信息是和行一起存储的
,
所以
oracle
可以锁定无限的行而无需用户进行任何没必要的等待
.
ii.
自动锁
:
用户无须干预
,oracle server
自动获得锁当
sql
语句执行的
时候
.
锁的类型或模式
(mode)
包括排他锁
(exclusive)
和共享
(share)
锁
.
级别有表级
,
行级
.
无论排他还是共享
,query
都可以继续运行
.
iii.
手动锁
:
用户也可以手动锁定
,
在行级
(?select for update?)
或者表
级
.
iv.
锁定周期
(duration):
1.
锁的持有周期到事务的结束
.
注意
savepoint
点的概念
,
如果
rollback
到
savepoint
点
,
那原来该点之后的修改所持有的锁
被释放
.(
因为做了部分
rollback
嘛
)
v.
锁的转换
(conversion)
和升级
(escalation)
1.
锁转换
: (
是说锁的
Level
或
degree
的改变
)
在行级别
,
如果
一个事务持有了排他的行锁
,
则已经是最高限制了
,
所以锁不
会进行其他转换了
.
但在表级别
,
如果开始持有的是低级别
的锁
,
则有可能在继续使用的过程中根据需要会自动转换成
高级别的锁
.
比如
:
先看看
v$lock
的
lock mode
说明
:
Lock mode in which the session holds the lock:
0 - none
1 - null (NULL)
2 - row-S (SS)
3 - row-X (SX)
4 - share (S)
5 - S/Row-X (SSX)
6 - exclusive (X)
U1 用户 session1:
SQL> update emp set sal=sal+10 where job='CLERK';