数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。锁机制用于管理对共享资源并发访问。

根据保护的对象不同,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 机制的更多相关文章

  1. Oracle 锁机制探究

    以前虽然在网上看到很多关于Oracle锁机制的描述,但总感觉哪里有缺陷不适合自己,因此花了点时间参考官网以及Tom Tyke的<Oracle 9i/10g/11g编程艺术>一书整理了一下O ...

  2. [Oracle] Lock&Latch梳理

    Oracle lock&latch 1. 概述 4种锁机制 lock latch pin mutex 保证资源在并发访问和修改时不被破坏 锁类型 行为 持有时间 级别 保护类型 lock 队列 ...

  3. 转载:Java Lock机制解读

    Java Lock机制解读 欢迎转载: https://blog.csdn.net/chengyuqiang/article/details/79181229 1.synchronized synch ...

  4. C# Note26: [MethodImpl(MethodImplOptions.Synchronized)]与lock机制

    在进行.NET开发时,经常会遇见如何保持线程同步的情况.在众多的线程同步的可选方式中,加锁无疑是最为常用的.如果仅仅是基于方法级别的线程同步,使用System.Runtime.CompilerServ ...

  5. 整理oracle 树形查询

    注:本文参考了<整理oracle 树形查询> sql树形递归查询是数据库查询的一种特殊情形,也是组织结构.行政区划查询的一种最常用的的情形之一.下面对该种查询进行一些总结: create ...

  6. 利用LOCK机制来定位前缀劫持者

    一.文章信息 作者:Tongqing Qiu, Lusheng Ji, Dan Pei等 单位:佐治亚理工学院.美国电话电报公司实验室.康奈尔大学等 来源:Conference on Usenix S ...

  7. Oracle 锁机制

    本文参考自:ORACLE锁机制 1.oracle是一个多用户使用的共享资源,当多个用户并发的操作同一数据行时,那么在oracle数据库中就会存在多个事务操作统一数据行的操作,如果不对并发操作进行控制, ...

  8. mongodb给我们提供了fsync+lock机制把数据暴力的刷到硬盘上

    能不能把数据暴力的刷到硬盘上,当然是可以的,mongodb给我们提供了fsync+lock机制就能满足我们提的需求. fsync+lock首先会把缓冲区数据暴力刷入硬盘,然后给数据库一个写入锁,其他实 ...

  9. JUC包Lock机制的支持--AQS

    在上一次总结中,提到了JUC包下使用Lock接口实现同步的方法,以及和Synchronized关键字的一些比较,那么使用Lock完成锁机制的底层支持又是什么呢?总结如下: 1 AQS是什么 AQS是一 ...

随机推荐

  1. linux 失败无连接 检查电缆吗

    将BOOTPROTO=dhcp改成 BOOTPROTO=static 改成手动获取IP的模式 原因: 虚拟机中的Linux目前是默认设成的自动获取IP设置,但你的网络中没有DHCP服务,所以会显示“正 ...

  2. 用Remastersys定制自己的Ubuntu安装光盘

    这两天因为要做Ubuntu的平台移植,一直在给自己电脑上的Ubuntu系统装各种软件,其间几次将内核破坏,导致不得不重装系统,经过几次痛苦的等待,痛定思痛,决定试一试能不能将自己的Ubuntu系统定制 ...

  3. Mater Nginx(2) - A Configuration Guide

    The basic configuration format Nginx global configuration parameters Using include files The HTTP se ...

  4. jquery easyui datebox 的使用

    看了jquery easyui databox的官方api,还可以加入倒是很简单,但是想要获得他的值和修改值就很费劲,不知道怎么弄,试了n次终于搞定.这里总结一下,供有相同问题的人查询. 1. 官方a ...

  5. linq中的contains条件

    linq中的contains条件   在sql查询语句中,in 在linq 中用contains,并且contains前面是数组,而后面是列名,如: SELECT distinct BH FROM c ...

  6. linux 已有目录挂载磁盘

    1.查看当前硬盘使用状况: [root@gluster_node1 ~]# df -h Filesystem            Size  Used Avail Use% Mounted on / ...

  7. (转)如何在Excel2013中制作条形码

    文章来源:http://www.officezhushou.com/excel2013/3905.html 注意:如果发现条形码不能移动的情况,请点击开发工具-设计模式,那么你就可以移动你的条形码了 ...

  8. HW4.32

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...

  9. hdoj 1241 Oil Deposits

    Oil Deposits Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  10. poj1873 The Fortified Forest 凸包+枚举 水题

    /* poj1873 The Fortified Forest 凸包+枚举 水题 用小树林的木头给小树林围一个围墙 每棵树都有价值 求消耗价值最低的做法,输出被砍伐的树的编号和剩余的木料 若砍伐价值相 ...