zoukankan      html  css  js  c++  java
  • oracle的行级锁与表级锁

    1、行级锁(tx锁,也叫事务锁)在操作DML(create,insert,update)语句时,oracle会自动加上行级锁,在select * from table for update 【of column】【nowait|wait 3】时,oracle也会自动加锁

        建议(1)一般在for update 时加nowait,这样就不用等待其他事务执行了,一判断有事务,立马抛出错误。

        建议(2)一般的of column都是在多表操作的时候,能锁定其中一个表的某些列,如果还是同一张表的话,并不能锁定某些列

    2、表级锁(tm锁)

    表级锁包含了行级锁,(1),(2)也是通过行级锁来达到表级锁的,他俩没有严格的分类,表级锁是oracle直接扫整个表来判断事务了,而不用去扫描表里的每一行去判断事务了,这个在一些时候是非常有用的

       表级锁分了很多类型(mode):

    (1)行共享 (ROW SHARE) – 禁止排他锁定表
    (2)行排他(ROW EXCLUSIVE) – 禁止使用排他锁和共享锁
    (3)共享锁(SHARE)
    (4)锁定表,仅允许其他用户查询表中的行
         禁止其他用户插入、更新和删除行
         多个用户可以同时在同一个表上应用此锁
    (5)共享行排他(SHARE ROW EXCLUSIVE) – 比共享锁更多的限制,禁止使用共享锁及更高的锁
    (6)排他(EXCLUSIVE) – 限制最强的表锁,仅允许其他用户查询该表的行。禁止修改和锁定表
     
    一般的语法:
    lock table STUDENT in exclusive mode;(表级锁排他)
    但是在java程序中怎样去调用这样的语句,暂时没弄出来,这些语句在dba的使用的比较多
     
     
     
    项目实战:
    一方面,当Oracle执行SELECT…FOR UPDATE、INSERT、UPDATE、DELETE等DML语句时,系统自动在所要操作的表上申请表级RS锁(SELECT…FOR UPDATE)或RX锁(INSERT、UPDATE、DELETE),当表级锁获得后,系统再自动申请TX锁,并将实际锁定的数据行的锁标志位置位(指向该TX锁);另一方面,程序或操作人员也可以通过LOCK TABLE语句来指定获得某种类型的TM锁。下表是笔者总结了Oracle中各SQL语句产生TM锁的情况:  
    表六:Oracle数据库TM锁小结
      

    我们可以看到,通常的DML操作(SELECT…FOR UPDATE、INSERT、UPDATE、DELETE),在表级获得的只是意向锁(RS或RX),其真正的封锁粒度还是在行级;另外,Oracle数据库的一个显著特点是,在缺省情况下,单纯地读数据(SELECT)并不加锁,Oracle通过回滚段(Rollback segment)来保证用户不读"脏"数据。这些都提高了系统的并发程度。    
    由于意向锁及数据行上锁标志位的引入,减小了Oracle维护行级锁的开销,这些技术的应用使Oracle能够高效地处理高度并发的事务请求。
     
     
     
     
     
     
     
  • 相关阅读:
    不可小视视图对效率的影响力
    Maximum Margin Planning
    PhysicsBased Boiling Simulation

    Learning Behavior Styles with Inverse Reinforcement Learning
    Simulating Biped Behaviors from Human Motion Data
    Nearoptimal Character Animation with Continuous Control
    Apprenticeship Learning via Inverse Reinforcement Learning
    回报函数学习的学徒学习综述
    Enabling Realtime Physics Simulation in Future Interactive Entertainment
  • 原文地址:https://www.cnblogs.com/li1111xin/p/4775240.html
Copyright © 2011-2022 走看看