网站首页 > 技术文章 正文
oracle中的锁
1、Table Locks (TM)
当事务通过INSERT、UPDATE、DELETE、MERGE和FOR UPDATE对表进行修改时,就会获得一个表锁,也称为TM锁子句,或锁表语句。DML操作需要表锁来为事务保留对表的DML访问权限,并防止DDL与事务冲突的操作。
2、Row Share (RS)
这个锁,也称为子共享表锁(SS),表示持有表上锁的事务已锁定表中的行并打算锁定更新它们。行共享锁是表锁中限制最少的一种模式,它为表提供最高程度的并发性。
3、Row Exclusive Table Lock (RX)
这个锁,也称为subexclusive table lock (SX),通常表示持有锁的事务已经更新了表行或发出了SELECT…FOR UPDATE。SX锁允许其他事务在同一表中同时查询、插入、更新、删除或锁定行。因此,SX锁允许多个事务为同一个表获取同步的SX和子共享表锁。
4、Share Table Lock (S)
事务持有的共享表锁允许其他事务查询表(除了SELECT…FOR UPDATE),但只允许更新如果一个事务持有共享表锁。由于多个事务可能同时持有一个共享表锁,因此持有此锁不足以确保事务可以修改表。
5、Share Row Exclusive Table Lock (SRX)
这个锁,也称为共享-subexclusive table锁(SSX),比共享表锁有更多的限制。一次只能获得一个事务SSX锁定给定的表。事务持有的SSX锁允许其他事务查询表(除了SELECT…FOR UPDATE),但不更新表。
6、Exclusive Table Lock (X)
此锁是最严格的,禁止其他事务执行任何类型的DML语句或将任何类型的锁放在表上。
因为ORACLE要处理不同的并发功能,一旦处理不了那么多并发,就需要排队,为保证排队的公平就会出现各种优先级,因此衍生出很多锁模式,来支持不同业务层的并发需求。
在同一个session里面,你执行一个UPDATE语句,在表上有DML锁,那自己能去做DDL语句吗,比如DROP,因为是同一个session,所以不涉及并发,自己做一个update不提交,随后drop table也是可以的
行锁:0、6两类锁
表锁:0、1、2、3、4、5、6七类锁
0(none)
1(null)
2(RS)
3(RX)
4(S)
5(SRX)
6(X)
R是ROW行,S是SHARE共享,X是eXclusive排他,独占锁的意思
null 空
一般的SELECT,在表和行上都是0级锁1:null 空
1级锁有:Select有时会在v$locked_object出现。
Row-S 行共享(RS):共享表锁,sub share
2级锁有:Lock Row Share,create index online
>>表锁的情况下
locked_mode 2不影响后一个locked_mode 2、3、4、5的会话,如果后一个会话locked_mode为6,则后一个会话操作会提示ora-00054错误。
ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired
>>行锁的情况下
locked_mode 2对应行锁0级锁,不影响其他会话。
3:Row-X 行独占(RX):用于行的修改,sub exclusive
3级锁有:Insert, Update, Delete, Select for update,Lock Row Exclusive
>>表锁的情况下
locked_mode 3不影响后一个locked_mode 3的会话,但如果后一个会话locked_mode为4,5,6,则后一个会话操作会提示ora-00054错误。
ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired
>>行锁的情况下
locked_mode 3的表锁对应行锁6级锁,两个会话对同一行则影响。
4:Share 共享锁(S):阻止其他DML操作,share
4级锁有:Create Index, Lock Share
5:S/Row-X 共享行独占(SRX):阻止其他事务操作,share/sub exclusive
5级锁有:Lock Share Row Exclusive
具体来讲有主外键约束时update/delete ... ; 可能会产生4,5的锁。
6:exclusive 独占(X):独立访问使用,exclusive
6级锁有:Drop table, Drop Index, Alter table,Truncate table, Lock Exclusive。
猜你喜欢
- 2024-10-17 关于Oracle数据库外键相关命令总结
- 2024-10-17 基于oracle中锁的6种模式及如何释放锁
- 2024-10-17 如何看懂oracle执行计划(上) oraclesql执行计划怎么看
- 2024-10-17 数据迁移报错--违反唯一性约束 ora-00001: 违反唯一约束条件
- 2024-10-17 Oracle 建立索引原则及索引的优缺点
- 2024-10-17 从零开始学习Oracle之事务与锁 事务在oracle中的应用
- 2024-10-17 SQL CHECK 约束 sqlcheck约束表达式in
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端md5加密 (49)
- 前端路由 (55)
- 前端数组 (65)
- 前端定时器 (47)
- 前端接口 (46)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle约束 (46)
- oracle 中文 (51)
- oracle链接 (47)
- oracle的函数 (57)
- mac oracle (47)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)