暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

开始聊聊恶心的“锁”-- 1.一个故事了解Oracle有哪些锁

InDataBase 2021-04-26
338

ORACLE主要有三大类的锁,分别是:

⊙ DML锁

⊙ DDL锁

⊙ 内部锁或LATCH

它们涉及的对象会有所不同


DML就是我们的DELETE,UPDATE,INSERT语句,它操作的是表,视图等可见的SCHEMA对象。

DDL语句是ALTER TABLE,CREATE TABLE等语句,同样对象是表,视图,存储过程等,也是可见的SCHEMA对象。

这些对象如果是共享的话,就涉及到资源竞争。所以必须要用锁来进行限制资源的访问,这个锁我们叫LATCH。


LATCH没咋研究过,主要说说DML和DDL锁。


DML锁 


DML锁是用来控制多个用户并行访问的数据确保一致性。

它确保在某一事务期间修改的数据,不能让另一个用户进行修改。

DML锁还可以确保如果被修改表的事务还没有结束的话,不允许在表上做DDL。


问:你做一个UPDATE语句,在表上有DML锁,那自己能去做DDL语句吗,比如DROP?这样可以吗?

答案是可以的,因为Oracle中的锁是用于控制并发的,在这个问题中,操作者都是同一个Session,不涉及并发,所以可以执行。


DML锁定按对象级别不同分: 

⊙ 行级锁 TX(行对象上)

⊙ 表级锁 TM(表对象上)


TX是事务排他锁 Transaction eXclusive

TM是表级的管理锁 Table Manager


恶心的图来了:Oracle锁模式一览

PS:S是Share共享,X是Exclusive排他

之所以设计这么多种锁模式,目的是为了在不同场景下可以应对。

这个表格确实背不下来,但看着表格可以讲个故事,有助于理解。


故事开始:

有一个商店供人闲逛、购物等,客户依照自己的情况,通过不同的通道进入商店。


第1类人,闲逛的客人(走0号通道)

第2类人,闲逛的老弱病残孕客人(走1号通道)

第3类人,先拿回去试用,如果满意再确认付款的客人。(走2号通道)

第4类人,不闲逛,进店直接买的客人(走3号通道)

第5类人,大款,把整个商店包下来,供别人闲逛,预约,但不能买东西。(走4号通道)(多个大款同时存在是不冲突)

第6类人,心胸狭窄的大款,如果第6类人包下商店后,另一个第6类人不允许包了。(走5号通道)第6类人包下点后,仍然可以让1,2,3类人闲逛、预约,但依然不能买东西。

第7类人,大哥来了,只允许第1,2类人闲逛。(走6号通道)


商场会有很多柜台,你要买卖或者打算买卖时需要获得柜台锁。

只有拿到打开柜子的钥匙,才能打开柜子的锁,取出商品,卖给打算买或者立即买的客人。

开始类比

Oracle的表 => 商店

Oracle7类表级锁 => 商店的7个通道,由A0至A6的7个门卫把关

Oracle行级锁 => 柜台锁, 由营业员把关


先了解到这,下次具体聊聊行级锁、表级锁。



翻翻历史,温故知新

死锁与悲观锁、乐观锁不是一类东西

骨灰级科普-Oracle的序列可能不连续

后台翻页必用的rownum,你知道它的处理逻辑吗?

总在面试时被问COUNT(*)、COUNT(1)哪个快?

NVL系与Decode系,他们的差别你了解吗?

骨灰级科普-Oracle中的NULL,神马也不是

SQL也可以不那么简单

文章转载自InDataBase,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论