• Oracle中的锁


    Oracle中的锁

    锁是一种机制,多个事务同时访问一个数据库对象时,该机制可以实现对并发的控制

    按照用户系统锁可以分为自动锁和显示锁。

    自动锁(系统上锁):DML锁、DDL锁、systemlocks锁

    显示锁:用户为数据库对象设定的锁

    按照锁的级别可以分为。

    排他锁(exclusive lock, X锁):事务设置排他锁后,事务单独获得资源,在此事务提交之前,其他事务不能获取同一资源

    和共享锁(share lock,S锁):多个事务可以同时访问同一资源,可以为事务提供高并发性,容易造成死锁和数据更新丢失。

    按照操作分为。
    1.DML锁(data locks,数据锁):用于控制事务并发中的数据操作,保护数据完整性。

    2.DDL锁:DDL是保护表结构定义的。

    DML锁又可分为

    TM锁(表级锁)

    TX锁(事务锁或行级锁)

    TM锁

    SQL语句:

    select * from v$lock where lmode>=0 and type in ('TM','TX');可以查看锁

    锁的模式表示如下:

    sql例句:

    手工锁表:

    lock table trwtcTest1 in row share mode nowait;                --1

    lock table trwtcTest1 in share update mode nowait;             --2

    lock table trwtcTest1 in row exclusive mode nowait;            --3

    lock table trwtcTest1 in share mode nowait;                    --4

    lock table trwtcTest1 in share row exclusive mode nowait;      --5

    lock table trwtcTest1 in exclusive mode nowait;                --6

     

    手工解锁:

    rollback/commit

    DDL锁:DDL是系统自动加锁,从而保护这些对象不会被其他会话所修改。

    例如,我执行一个DDL操作ALTERTABLE T,表T上就会加一个排他DDL锁,以防止其他会话得到这个表的DDL锁和TM锁。在DDL语句执行期间会一直持有DDL锁,一旦操作执行就立即释放DDL锁。

    3种类型的DDL锁:

         1.排他DDL锁(Exclusive DDL lock):这会防止其他会话得到它们自己的DDL锁或TM(DML)锁。这说明,在DDL操作期间你可以查询一个表,但是无法以任何方式修改这个表。

         2.共享DDL锁(Share DDL lock):这些锁会保护所引用对象的结构,使之不会被其他会话修改,但是允许修改数据。

         3.可中断解析锁(Breakable parse locks):这些锁允许一个对象(如共享池中缓存的一个查询计划)向另外某个对象注册其依赖性。

    锁的粒度

    行级锁(TX),表级锁(TM), 数据库级锁:   

    锁的工作性质:

    只有被修改时,行才会被锁定。

    当一条语句修改了一条记录,只有这条记录上被锁定,在Oracle数据库中不存在锁升级。

    当某行被修改时,它将阻塞别人对它的修改。

    当一个事务修改一行时,将在这个行上加上行锁(TX),用于阻止其它事务对相同行的修改。

    读永远不会阻止写。

    读不会阻塞写,但有唯一的一个例外,就是select ...for update。

    写永远不会阻塞读。

    当一行被修改后,Oracle通过回滚段提供给数据的一致性读

  • 相关阅读:
    CSS复合选择器
    CSS样式规则及字体样式
    jQuery 样式操作
    jQuery 选择器
    jQuery 的基本使用
    jQuery 介绍
    本地存储
    移动端常用开发框架
    移动端常用开发插件
    移动端click 延时解决方案
  • 原文地址:https://www.cnblogs.com/feichangnice/p/10441403.html
Copyright © 2020-2023  润新知