zoukankan      html  css  js  c++  java
  • oracle锁

    1.概念

    数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即X锁)和共享锁(Share Locks,即S锁)。

    当数据对象被加上排它锁时,其他的事务不能对它读取和修改;加了共享锁的数据对象可以被其他事务读取,但不能修改。

    根据保护对象的不同,Oracle数据库锁可以分为以下几大类:

    1) DML lock(data locks,数据锁):用于保护数据的完整性,主要包括TM锁(表级锁)和TX锁(事务锁或行级锁);

    2) DDL lock(dictionary locks,字典锁):用于保护数据库对象的结构(例如表、视图、索引的结构定义);

    3) Internal locks 和latches(内部锁与闩):保护内部数据库结构;

    4) Distributed locks(分布式锁):用于OPS(并行服务器)中;

    5) PCM locks(并行高速缓存管理锁):用于OPS(并行服务器)中

    我们只关注数据锁

    DML语句修改行时,对该行产生行级锁;
    同时,DML语句所在的事务,产生一个事务锁TX;
    同时,行级锁会对所在表产生一个TM(Table Manager)表级锁RX(Row exclusive);
     

    2. TX锁(事务锁或行级锁)

    TX的本义是Transaction(事务),当一个事务第一次执行数据更改(Insert、Update、Delete)或使用SELECT… FOR UPDATE语句进行查询时,它即获得一个TX(事务)锁,直至该事务结束(执行COMMIT或ROLLBACK操作)时,该锁才被释放。所以,一个TX锁,可以对应多个被该事务锁定的数据行。当两个或多个会话在表的同一条记录上执行 DML语句时,第一个会话在该条记录上加锁,其他的会话处于等待状态。当第一个会话提交后,TX锁被释放,其他会话才可以加锁

    在Oracle的每行数据上,都有一个标志位来表示该行数据是否被锁定。数据行上的锁标志一旦被置位,就表明该行数据被加X锁,Oracle在数据行上没有S锁

    3. TM锁(表级锁)类型共有5种,分别称为共享锁(S锁)、排它锁(X锁)、行级共享锁(RS锁)、行级排它锁(RX锁)、共享行级排它锁(SRX锁)

    当Oracle执行DML语句时,系统自动在所要操作的表上申请TM类型的锁。当TM锁获得后,系统再自动申请TX类型的锁,并将实际锁定的数据行的锁标志位进行置位。这样在事务加锁前检查TX锁相容性时就不用再逐行检查锁标志,而只需检查TM锁模式的相容性即可,大大提高了系统的效率。TM锁包括了SS、SX、S、X等多种模式,在数据库中用0-6来表示。不同的SQL操作产生不同类型的TM锁。如表1所示。

    表1 Oracle的TM锁类型

    锁模式

    锁描述

    解释

    SQL操作

    0

    none

    1

    NULL

    Select

    2

    SS(Row-S)

    行级共享锁,其他对象只能查询这些数据行

    Select for update、

    Lock table *  in row share mode

    3

    SX(Row-X)

    行级排它锁,在提交前不允许做DML操作

    Insert、Update、Delete、

    Lock table *  in row exclusive mode

    4

    S(Share)

    共享锁

    Create index、

    Lock table * in share mode

    5

    SSX(S/Row-X)

    共享行级排它锁

    Lock table * in share row exclusive mode

    6

    X(Exclusive)

    排它锁

    Alter table、Drop table、Drop index、Truncate table 、

    lock table * in exclusive mode

    锁的兼容性

    SS/RS和SX/RX才是我们的重点,总结起来就一句话:

    如果事务A已经有了RS锁,事务B的DML基本不受影响(除非它们在操作同一记录)

    如果事务A已经有了RX锁,事务B的DML基本不受影响(除非它们在操作同一记录)

    参考文章:

    1. 数据库锁

    2. Oracle数据库锁的种类及研究

  • 相关阅读:
    班级派团队项目小计(七)
    班级派团队项目小计(六)
    班级派团队项目小计(五)
    班级派团队项目小计(四)
    班级派团队项目小计(三)
    场景描述思密达~
    班级派团队项目小计(二)
    班级派团队项目小计(一)
    构建之法阅读笔记02
    JS获取坐标
  • 原文地址:https://www.cnblogs.com/yhzh/p/5262432.html
Copyright © 2011-2022 走看看