知识大全 DML操作update和delete时产生的锁示例

Posted 操作

篇首语:谷要自长,人要自强。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 DML操作update和delete时产生的锁示例相关的知识,希望对你有一定的参考价值。

DML操作update和delete时产生的锁示例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  测试对象 在执行dml操作时都产生哪些锁 elete和update时产生的锁以及并发删除一个表时锁产生的锁

  测试环境 Oracle

  具体示例如下

   会话 首先需要找到此会话的sid

  SQL> set time on

  set prompt s

   s > select sid from v$mystat where rownum<=

  SID

  

  

   会话 然后找到此会话的sid

  SQL> set time on

  set prompt s

   s > select sid from v$mystat where rownum<=

  SID

  

  

   会话 查看会话 和会话 的锁情况 此时因为没有做任何dml操作所以没有锁

  SQL> set time on

  set prompt s

   s > select * from v$lock where sid in( )

  ADDR KADDR SID TYPE ID ID LMODE REQUEST CTIME BLOCK

  

   会话 对a表删除 条数据

   s > delete from a where id=

   row deleted

   查看此时的锁情况

   s > select * from v$lock where sid in( )

  ADDR KADDR SID TYPE ID ID LMODE REQUEST CTIME BLOCK

  

   B F B F TM

   C F C C B TX

   会话 对a表执行删除操作 但不删除任何行

   s > delete from a where id=

   rows deleted

    查看此时的锁情况 结果发现虽然会话 没有删除任何行 但是仍然产生了一个TX锁和TM锁 估计以后的版本中Oracle会对此进行优化 在满足通用的情况下通常会有一些特例

   s > select * from v$lock where sid in( )

  ADDR KADDR SID TYPE ID ID LMODE REQUEST CTIME BLOCK

  

   B F B F TM

   B C B TM

   BDBBC BDBCE TX

   C F C C B TX

   会话 对a表执行删除操作 此时删除 行数据

   s > delete from a where id=

   row deleted

   再次查看会话 此时没有新的锁增加

   s > select * from v$lock where sid in( )

  ADDR KADDR SID TYPE ID ID LMODE REQUEST CTIME BLOCK

  

   B F B F TM

   B C B TM

   BDBBC BDBCE TX

   C F C C B TX

  

   会话 再次删除b表的数据

   s > delete from b where rownum<=

   row deleted

   查看锁的情况 此时发现对b表新产生一个TM锁 而没有新增加TX锁

   s > select * from v$lock where sid in( )

  ADDR KADDR SID TYPE ID ID LMODE REQUEST CTIME BLOCK

  

   B F B F TM

   B C B TM

   B C B E TM

   BDBBC BDBCE TX

   C F C C B TX

   查看 的对象名称

   s > select object_name from user_objects where object_id in( )

  OBJECT_NAME

  

  B

  A

   s >

   新开一个会话

  SQL> set prompt s

  s > set time on

   s > select sid from v$mystat where rownum<=

  SID

  

  

   s > update a_temp set id= where rownum<

   rows updated

   s >

   查看锁情况

   s > select * from v$lock where sid in( )

  ADDR KADDR SID TYPE ID ID LMODE REQUEST CTIME BLOCK

  

   B F B F TM

   B C B TM

   B C B E TM

   BDBBC BDBCE TX

   C C C A TX

   C F C C B TX

   rows selected

  结论

  DML操作一个会话只会产生一个事务锁(TX) 对每个对象只产生一个表锁(TM) 在不同的会话中可以对同一个对象产生多个TM锁

  还有在执行dml操作中即使删除空行也会产生TX锁 同时伴随TM锁 但是更新空行只会产生TX锁 不会产生TM锁

cha138/Article/program/Oracle/201311/16559

相关参考

知识大全 asp access insert update delete 使用

  本教程是一篇asp入门篇的初级教程了主要是讲aspaccessinsertupdatedelete简单的使用哦好了下面我们把它们写在一个函数里面然后再举例说明  Functionadd_del_u

知识大全 教你学会truncate和delete的区别

  一delete产生rollback如果删除大数据量的表速度会很慢同时会占用很多的rollbacksegmentstruncate是DDL操作不产生rollback速度快一些    Truncate

知识大全 MSYQL数据操作语言(DML)

MSYQL数据操作语言(DML)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一select语

知识大全 数据库设计三大范式应用实例剖析

  引言  数据库的设计范式是数据库设计所需要满足的规范满足这些规范的数据库是简洁的结构明晰的同时不会发生插入(insert)删除(delete)和更新(update)操作异常反之则是乱七八糟不仅给数

知识大全 多线程中的死锁问题

  /*  *死锁  *同步中嵌套同步  *也就是有两个房子A和B主人A拿着B房间的锁B主人拿着A房间的锁A拿不到B的锁就进不去房间  *而B拿不到A的锁也进不去房间两人相持不下  *死锁属于操作系统

知识大全 hiernate的锁机制

学了两天的hibernate锁机制今天写个总结hibernate锁机制包括悲观锁和乐观锁悲观锁   它指的是对数据被外界修改持保守态度假定任何时刻存取数据时都可能有另一个

知识大全 asp中防止脚本注入攻击

    <%  SQL_injdata=|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|trun

知识大全 找到无用的索引

  DML性能低下其中最严重的原因之一是无用索引的存在所有SQL的插入更新和删除操作在它们需要在每一行数据被改变时修改大量索引的时候会变得更慢    许多Oracle管理人员只要看见在一个SQL查询的

知识大全 OracleDDL,DML,DCL,TCL基础概念

OracleDDL,DML,DCL,TCL基础概念  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 为什么我的电脑开机的时候总是出现windows update更新失败?

为什么我的电脑开机的时候总是出现windowsupdate更新失败??问题分析:电脑开机出现系统更新失败,常见于使用盗版的操作系统,也可能是系统补丁下载或安装时出现损坏。可尝试关闭系统自带的系统更新功