AI智能
改变未来

Oracle 锁的种类


Oracle通过多种锁机制来维护并发性:

Latch:保护chain链。

Lock:保护数据块,数据行。
X 排他锁
S 共享锁

行级锁:当一个DML事务开始时,在行数据头部加上行级别(也叫行标记指向事务槽)。
行级锁,不影响其他会话对其访问,因为可以构造CR块。

事务锁:一个事务只有一个事务锁,因为行级锁而产生的。
一个事务如果有了行级锁,就会有事务锁。

表级锁:
行级排他锁: RX锁
1.当我们进行DML时,会自动在被更新的表上添加RX锁,也可以执行lock命令显式的在表上添加RX锁
2.允许其他事务通过DML语句修改相同表里的其他数据行。
3.允许使用lock命令对表添加RX锁定。
4.不允许其他事务对表添加X锁(删除表)。
行级共享锁: RS锁
Select … from for update
以DML的形式读 行级锁,事务锁正常加,但是在表级别上RS锁
共享锁:S锁
排他锁:X锁
通过lock table in exclusive mode命令添加X锁。(删除表)
共享行级排他锁

例如:当删除一个表时,Oracle要确保这个表中所有的事务都提交了。
如果Oracle读取这个表的每一行数据,来判断是否有行级锁,效率会极低。
Oracle仅会读取表级锁RX,如果存在RX锁,那么代表该表中正在有事务进行,无法删除表,因为删除表需要给表加表级排他锁X,X与RX互斥。

RX锁的兼容:
一个表上可以存在多个RX
A事务修改一个表的行数据,产生相对应的行级锁,自己的事务锁,也需要在表上加上表级锁 RX。
B事务修改该表的其他行数据,产生相对应的行级锁,自己的事务锁,以及表级锁RX。

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Oracle 锁的种类