zoukankan      html  css  js  c++  java
  • Oracle Lock 概述

    按锁的机制分类

      排他锁( X ):如果事务T对对象A加上排他锁,则只允许T对A对象读取和修改,其他事务不能对A增加任何锁,直到T释放加载A上的排他锁

      共享锁( S ):如果事务T对表A加上共享锁,则事务T可以读该表,但是不能修改该表数据。其他事务也只能对该对象加上共享锁,但是不能加上排他锁。这就保证了其他事务可以读A表数据,但是不能修改A表数据(这就不会影响到读该表的事务了,有利于并发操作)。

    按操作行为分类

      DML Locks  保证并发情况下的数据完整性

      DDL Locks  用于保护数据库对象的结构

      System Locks 保护数据库的内部结构

    DML Locks:

      Row Locks (TX) 称为行级锁。当事务执行 DML 语句(INSERT, UPDATE, DELETE, and SELECT with the FOR UPDATE clause)时会申请TX 类型的锁,TX 的机制是排他锁

      Table Locks (TM) 称为表级锁。当Oracle执行 DML 语句时,系统自动在所要操作的表上申请TM类型的锁。

    TM锁类型表细分:

    SQL Statement Mode of Table Lock Lock Modes Permitted?
    RS RX S SRX X
    SELECT...FROM table... none Y Y Y Y Y
    INSERT INTO table ... RX Y Y N N N
    UPDATE table ... RX Y* Y* N N N
    DELETE FROM table ... RX Y* Y* N N N
    SELECT ... FROM table FOR UPDATE OF ... RS Y* Y* Y* Y* N
    LOCK TABLE table IN ROW SHARE MODE RS Y Y Y Y N
    LOCK TABLE table IN ROW EXCLUSIVE MODE RX Y Y N N N
    LOCK TABLE table IN SHARE MODE S Y N Y N N
    LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE SRX Y N N N N
    LOCK TABLE table IN EXCLUSIVE MODE X N N N N N

     RS: row share
       RX: row exclusive
       S: share
       SRX: share row exclusive
       X: exclusive

    注:Y的含义是完全不阻塞其它事务对相应锁的申请;Y*的含义是不阻塞其它事务对相应锁的申请(同表不同行),但对同一行数据申请相应的琐时则会发生等待。

    DDL Locks:

      排他DDL锁(Exclusive DDL lock):阻塞其他会话得到该对象的DDL锁或DML锁。在DDL操作期间你可以查询一个表,但是无法以任何方式修改这个表。 

      共享DDL锁(Share DDL lock):保护所引用对象的结构,使其结构不会被其他会话修改。

    相关视图

    • V$LOCK
    • V$LOCKED_OBJECT
  • 相关阅读:
    我的2018:OCR、实习和秋招
    【OCR技术系列之六】文本检测CTPN的代码实现
    【OCR技术系列之五】自然场景文本检测技术综述(CTPN, SegLink, EAST)
    如何免费使用谷歌搜索
    CUDA编程之快速入门
    我在北京实习的四个月
    在C++98基础上学习C++11新特性
    Linux编程之线程池的设计与实现(C++98)
    ASP.NET Core中使用IOC三部曲(三.采用替换后的Autofac来实现AOP拦截)
    ASP.NET Core文件上传与下载(多种上传方式)
  • 原文地址:https://www.cnblogs.com/polestar/p/3325732.html
Copyright © 2011-2022 走看看