暂无图片
Oracle DML锁 机制探究
最近更新:2022-03-11 14:21:05

1.1. 锁的基本概念

  • 锁的定义:锁(lock)机制用于管理对共享资源的并发访问,用于多用户的环境下,可以保证数据库的完整性和一致性。锁是防止访问相同资源的事务之间的破坏性,交互的机制。既可以是用户对象(例如表或行),也可以是对用户不可见的系统对象(例如共享数据结构和数据字典行)。
  • 锁的作用:在并发事务之间防止破坏性的交互作用,不需要用户的动作,自动使用最低的限制级别,在事务处理期间保持。
  • 为了确保并发用户在存取同一数据库对象时的正确性(即无丢失修改、可重复读、不读“脏”数据),数据库中引入了锁机制。基本的锁类型有两种:排它锁(Exclusive locks记为X锁)和共享锁(Share locks记为S锁)。
  1. 排它锁:若事务T对数据D加X锁,则其它任何事务都不能再对D加任何类型的锁,直至T释放D上的X锁;一般要求在修改数据前要向该数据加排它锁,所以排它锁又称为写锁。
  2. 共享锁:若事务T对数据D加S锁,则其它事务只能对D加S锁,而不能加X锁,直至T释放D上的S锁;一般要求在读取数据前要向该数据加共享锁,所以共享锁又称为读锁。

引用: 共享锁(S): 小明和小胖是好朋友,有一天他们俩得到了一份纸质版且纸比较破武功秘籍,为了让这份武功秘籍不再丢失什么内容,于是就用一个玻璃盒子存储起来。 image.png image.png 这时候小胖提议在盒子上加了一把锁,保护好里面的内容不被破坏。 image.png 加上锁之后,大家都能看,但是不能修改,难度增大了!大家都看到你们加锁了,并且这东西是免费的,所以我也要加锁,于是 image.png 这秘籍的外表框上加上了很多的锁,这些锁统称为共享锁(S) 我们通过图可以直到,共享属锁加上之后,我们只能看到秘籍(内容),但是想撕去一点点秘籍或修改上面的内容都不行,所以大家都只能看,不能修改,这就是共享锁为什么又称为读锁的原因。 如果要修改上面的内容或者换一本秘籍在玻璃里面展示的话,这个时候需要将所有的锁都去除掉,才能操作,否则就只能看 排它锁(X): 同样,有一本武功秘籍,这次被小胖捡到了,于是: image.png image.png 这个时候小明来了,看到之后 image.png 于是,这个箱子被小胖加上了排它锁(X),别人看不到也修改不了里面的内容,同时别人想加上其他锁也不能。 image.png 最后,不过小胖给了小明一个排它锁的钥匙,这个时候小明也能看箱子里面的内容,同时也可以修改箱子里面的内容。

1.2. Oracle 锁机制介绍

根据保护对象的不同,单实例Oracle数据库锁可以分为以下几大类:  DML lock(data locks,数据锁):用于保护数据的完整性;  DDL lock(dictionary locks,字典锁):用于保护数据库对象的结构(例如表、视图、索引的结构定义);  internal locks,latches,mutex,pin:保护内部数据库结构; 本文主要讨论DML(也可称为data locks,数据锁)锁。从封锁粒度(封锁对象的大小)的角度看,Oracle DML锁共有两个层次,即行级锁和表级锁。

1.3. 显式锁定和隐式锁定

有两种类型:显式锁定和隐式锁定。Oracle锁被自动执行,并且不要求用户干预的锁为隐式锁。对于SQL语句隐式锁是必须的,依赖被请求的动作。隐式锁定除SELECT外,对所有的SQL语句都发生。用户也可以手动锁定数据,这是显式锁定。

......