您的位置:首页 > 数据库 > Oracle

Oracle 锁的种类

2020-07-14 06:27 120 查看

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。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: