[整理]Oracle LOCK 机制
数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。锁机制用于管理对共享资源的并发访问。
根据保护的对象不同,Oracle数据库锁可以分为以下几大类:
DML锁(data locks,数据锁),用于保护数据的完整性;主要包括TM锁和TX锁,其中TM锁称为表级锁(DML Enqueue 锁:用于确保在修改表的内容时,表的结构不会改变),TX锁称为事务锁或行级锁(事物发起第一个修改时会得到TX锁,而且会一直持有这个锁,直至事务执行提交或回滚)。
DDL锁(dictionary locks,字典锁),用于保护数据库对象的结构,如表、索引等的结构定义;主要包括排它DDL锁、共享DDL锁、可中断解析锁
内部锁和闩(internal locks and latches),保护数据库的内部结构,应用于SGA;
行级锁基本原理:
行级锁的信息是置于数据块中的,如果要修改某一条记录的值,其实就是在访问相应的block,并且分配一个ITL,然后通过rowid访问rowpiece header ,如果第二个字节lock byte(lock byte只占用1个字节,最大值为255,这也是为什么maxtrans最大为255)为0,则将其改为分配的ITL slot number。另外一个事务如果也想要修改数据,就会发现lock byte不为0,如果第一个事务还没有结束,则第二个事务进入enqueue等待,也就是transaction enqueue。
v$lock.LMODE字段中的数字对应的锁类型
LMODE(Lockmode in which the session holds the lock):
0 -none
1 -null (NULL)
2 -row-S (SS) ----Row Share (RS|SS)
3 -row-X (SX) ----Row Exclusive Table Lock (RX|SX)
4 -share (S) ----Share Table Lock (S)
5 -S/Row-X (SSX) -----Share Row Exclusive Table Lock (SRX|SSX)
6 -exclusive (X) ------Exclusive Table Lock (X)
值 | 锁模式 | 锁描述 | SQL |
0 | NONE | ||
1 | NULL | 空 | SELECT |
2 | SS(ROW-S) | 行级共享锁 其他对象只能查询这些数据行 | SELECT FOR UPDATE、LOCK FOR UPDATE、 LOCK ROW SHARE |
3 | SX(ROW-X) | 行级排它锁 在提交前不允许做DML操作 | INSERT、UPDATE、DELETE、 LOCK ROW SHARE |
4 | S(SHARE) | 共享锁 | CREATE INDEX、LOCK SHARE |
5 | SSX(S/ROW-X) | 共享行级排它锁 | LOCK SHARE ROW EXCLUSIVE |
6 | X(eXclusive) | 排它锁 | ALTER TABLE、DROP TABLE、DROP INDEX、 TRUNCATE TABLE、LOCK EXCLUSIVE |
各种TM锁类型的兼容情况如下:
RS|SS |
RX|SX |
S |
SRX|SSX |
X |
|
RS|SS |
√ |
√ |
√ |
√ |
× |
RX|SX |
√ |
√ |
× |
× |
× |
S |
√ |
× |
√ |
× |
× |
SRX|SSX |
√ |
× |
× |
× |
× |
X |
× |
× |
× |
× |
× |
以下是一些针对ORACLE锁的直观阐述:
只有被修改时,行才会被锁定。
当一条语句修改了一条记录,只有这条记录上被锁定,在Oracle数据库中不存在锁升级。
当某行被修改时,它将阻塞别人对它的修改。
当一个事务修改一行时,将在这个行上加上行锁(TX),用于阻止其它事务对相同行的修改。
读永远不会阻止写。
读不会阻塞写,但有唯一的一个例外,就是select ...for update。
写永远不会阻塞读。
当一行被修改后,Oracle通过回滚段提供给数据的一致性读
[整理]Oracle LOCK 机制的更多相关文章
- Oracle 锁机制探究
以前虽然在网上看到很多关于Oracle锁机制的描述,但总感觉哪里有缺陷不适合自己,因此花了点时间参考官网以及Tom Tyke的<Oracle 9i/10g/11g编程艺术>一书整理了一下O ...
- [Oracle] Lock&Latch梳理
Oracle lock&latch 1. 概述 4种锁机制 lock latch pin mutex 保证资源在并发访问和修改时不被破坏 锁类型 行为 持有时间 级别 保护类型 lock 队列 ...
- 转载:Java Lock机制解读
Java Lock机制解读 欢迎转载: https://blog.csdn.net/chengyuqiang/article/details/79181229 1.synchronized synch ...
- C# Note26: [MethodImpl(MethodImplOptions.Synchronized)]与lock机制
在进行.NET开发时,经常会遇见如何保持线程同步的情况.在众多的线程同步的可选方式中,加锁无疑是最为常用的.如果仅仅是基于方法级别的线程同步,使用System.Runtime.CompilerServ ...
- 整理oracle 树形查询
注:本文参考了<整理oracle 树形查询> sql树形递归查询是数据库查询的一种特殊情形,也是组织结构.行政区划查询的一种最常用的的情形之一.下面对该种查询进行一些总结: create ...
- 利用LOCK机制来定位前缀劫持者
一.文章信息 作者:Tongqing Qiu, Lusheng Ji, Dan Pei等 单位:佐治亚理工学院.美国电话电报公司实验室.康奈尔大学等 来源:Conference on Usenix S ...
- Oracle 锁机制
本文参考自:ORACLE锁机制 1.oracle是一个多用户使用的共享资源,当多个用户并发的操作同一数据行时,那么在oracle数据库中就会存在多个事务操作统一数据行的操作,如果不对并发操作进行控制, ...
- mongodb给我们提供了fsync+lock机制把数据暴力的刷到硬盘上
能不能把数据暴力的刷到硬盘上,当然是可以的,mongodb给我们提供了fsync+lock机制就能满足我们提的需求. fsync+lock首先会把缓冲区数据暴力刷入硬盘,然后给数据库一个写入锁,其他实 ...
- JUC包Lock机制的支持--AQS
在上一次总结中,提到了JUC包下使用Lock接口实现同步的方法,以及和Synchronized关键字的一些比较,那么使用Lock完成锁机制的底层支持又是什么呢?总结如下: 1 AQS是什么 AQS是一 ...
随机推荐
- linux 失败无连接 检查电缆吗
将BOOTPROTO=dhcp改成 BOOTPROTO=static 改成手动获取IP的模式 原因: 虚拟机中的Linux目前是默认设成的自动获取IP设置,但你的网络中没有DHCP服务,所以会显示“正 ...
- 用Remastersys定制自己的Ubuntu安装光盘
这两天因为要做Ubuntu的平台移植,一直在给自己电脑上的Ubuntu系统装各种软件,其间几次将内核破坏,导致不得不重装系统,经过几次痛苦的等待,痛定思痛,决定试一试能不能将自己的Ubuntu系统定制 ...
- Mater Nginx(2) - A Configuration Guide
The basic configuration format Nginx global configuration parameters Using include files The HTTP se ...
- jquery easyui datebox 的使用
看了jquery easyui databox的官方api,还可以加入倒是很简单,但是想要获得他的值和修改值就很费劲,不知道怎么弄,试了n次终于搞定.这里总结一下,供有相同问题的人查询. 1. 官方a ...
- linq中的contains条件
linq中的contains条件 在sql查询语句中,in 在linq 中用contains,并且contains前面是数组,而后面是列名,如: SELECT distinct BH FROM c ...
- linux 已有目录挂载磁盘
1.查看当前硬盘使用状况: [root@gluster_node1 ~]# df -h Filesystem Size Used Avail Use% Mounted on / ...
- (转)如何在Excel2013中制作条形码
文章来源:http://www.officezhushou.com/excel2013/3905.html 注意:如果发现条形码不能移动的情况,请点击开发工具-设计模式,那么你就可以移动你的条形码了 ...
- HW4.32
import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...
- hdoj 1241 Oil Deposits
Oil Deposits Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tota ...
- poj1873 The Fortified Forest 凸包+枚举 水题
/* poj1873 The Fortified Forest 凸包+枚举 水题 用小树林的木头给小树林围一个围墙 每棵树都有价值 求消耗价值最低的做法,输出被砍伐的树的编号和剩余的木料 若砍伐价值相 ...