• [整理]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通过回滚段提供给数据的一致性读

    ############################## 通往精神的路很多,物质只是其中一种 ##############################
    http://www.onejava.com/article/oracle/wip/wiptop.htm
    https://docs.oracle.com/cd/A60725_05/html/comnls/us/index.htm
    http://www.oracle.com/technetwork/cn/developer-tools/apex/getting-started-094884-zhs.html
    https://docs.oracle.com/cd/B34956_01/current/html/docset.html
  • 相关阅读:
    Windows下通过Xmanager远程桌面控制Linux
    kk
    Wingware.WingIDE.Professional.v3.2.9.1破解并激活
    CentOS LInux启动关闭和服务管理(zt)
    Windows 7开启ping
    apache和cgi问题
    CentOS启动时自动加载内核模块
    bash shell执行、排错、启动配置文件
    程序员都应该好好想想!
    有点意思啊!
  • 原文地址:https://www.cnblogs.com/pompeii2008/p/5435473.html
Copyright © 2020-2023  润新知