版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、oracle的TM锁、T X锁知识完全普及锁概念基础数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作。在数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即 X 锁)和共享锁( Share Locks ,即 S 锁)。当数据对象被加上排它锁
2、时,其他的事务不能对它读取和修改。加了共享锁的数据对象可以被其他事务读取,但不能修改。数据库利用这两种基本的锁类型来对数据库的事务进行并发控制。Oracle 数据库的锁类型根据保护的对象不同, Oracle 数据库锁可以分为以下几大类:DML锁( datalocks ,数据锁),用于保护数据的完整性;DDL锁( dictionary locks,字典锁),用于保护数据库对象的结构,如表、索引等的结构定义;内部锁和闩( internal locks and latches),保护数据库的内部结构。DML锁的目的在于保证并发情况下的数据完整性,。在 Oracle 数据库中,DML锁主要包括 TM锁
3、和 TX 锁,其中 TM锁称为表级锁, TX 锁称为事务锁或行级锁。当 Oracle执行 DML语句时,系统自动在所要操作的表上申请TM类型的锁。当 TM锁获得后,系统再自动申请 TX 类型的锁,并将实际锁定的数据行的锁标志位进行置位。这样在事务加锁前检查 TX锁相容性时就不用再逐行检查锁标志,而只需检查 TM锁模式的相容性即可,大大提高了系统的效率。 TM锁包括了 SS、 SX、 S、 X 等多种模式,在数据库中用0 6 来表示。不同的 SQL操作产生不同类型的TM锁。在数据行上只有X 锁(排他锁)。在Oracle数据库中,当一个事务首次发起一个 DML语句时就获得一个TX 锁,该锁保持到事
4、务被提交或回滚。当两个或多个会话在表的同一条记录上执行DML语句时,第一个会话在该条记录上加锁,其他的会话处于等待状态。当第一个会话提交后,TX锁被释放,其他会话才可以加锁。当 Oracle 数据库发生TX锁等待时,如果不及时处理常常会引起Oracle数据库挂起,或导致死锁的发生,产生ORA-60的错误。这些现象都会对实际应用产生极大的危害,如长时间未响应,大量事务失败等。悲观封锁和乐观封锁一、悲观封锁锁在用户修改之前就发挥作用:Select .for update(nowait)Select * from tab1 for update用户发出这条命令之后,oracle将会对返回集中的数据建
5、立行级封锁,以防止其他用户的修改。如果此时其他用户对上面返回结果集的数据进行dml 或 ddl 操作都会返回一个错误信息或发生阻塞。1:对返回结果集进行update 或 delete操作会发生阻塞。2:对该表进行ddl 操作将会报: Ora-00054:resource busy and acquirewith nowait specified.原因分析此时 Oracle 已经对返回的结果集上加了排它的行级锁,所有其他对这些数据进行的修改或删除操作都必须等待这个锁的释放,产生的外在现象就是其他的操作将发生阻塞,这个这个操作commit 或 rollback.同样这个查询的事务将会对该表加表级锁
6、,不允许对该表的任何ddl 操作,否则将会报出ora-00054 错误: :resourcebusy and acquirewith nowaitspecified.二、乐观封锁乐观的认为数据在select出来到 update 进取并提交的这段时间数据不会被更改。这里面有一种潜在的危险就是由于被选出的结果集并没有被锁定,是存在一种可能被其他用户更改的可能。因此Oracle 仍然建议是用悲观封锁,因为这样会更安全。阻塞定义:当一个会话保持另一个会话正在请求的资源上的锁定时,就会发生阻塞。被阻塞的会话将一直挂起,直到持有锁的会话放弃锁定的资源为止。 4 个常见的 dml 语句会产生阻塞INSERT
7、UPDATEDELETESELECTFOR UPDATEINSERTInsert发生阻塞的唯一情况就是用户拥有一个建有主键约束的表。当 2 个的会话同时试图向表中插入相同的数据时,其中的一个会话将被阻塞,直到另外一个会话提交或会滚。一个会话提交时,另一个会话将收到主键重复的错误。回滚时,被阻塞的会话将继续执行。UPDATE和 DELETE当执行 Update 和 delete操作的数据行已经被另外的会话锁定时,将会发生阻塞,直到另一个会话提交或会滚。Selectfor update当一个用户发出select.for update的错作准备对返回的结果集进行修改时,如果结果集已经被另一个会话锁定
8、,就是发生阻塞。需要等另一个会话结束之后才可继续执行。可以通过发出select forupdate nowait的语句来避免发生阻塞,如果资源已经被另一个会话锁定,则会返回以下错误: Ora-00054:resource busy and acquire with nowait specified.死锁 -deadlock定义 : 当两个用户希望持有对方的资源时就会发生死锁.即两个用户互相等待对方释放资源时 ,oracle 认定为产生了死锁 , 在这种情况下 , 将以牺牲一个用户作为代价 , 另一个用户继续执行 , 牺牲的用户的事务将回滚 .例子:1:用户 1 对 A 表进行 Update,没
9、有提交。2:用户 2 对 B 表进行 Update,没有提交。此时双反不存在资源共享的问题。3:如果用户 2 此时对 A 表作 update, 则会发生阻塞, 需要等到用户一的事物结束。4:如果此时用户1 又对 B 表作 update ,则产生死锁。此时Oracle 会选择其中一个用户进行会滚,使另一个用户继续执行操作。起因 :Oracle 的死锁问题实际上很少见,如果发生, 基本上都是不正确的程序设计造成的,经过调整后,基本上都会避免死锁的发生。DML锁分类表表 1 Oracle 的 TM锁类型锁模 锁描述解释SQL操作式0none1NULL空Select2SS(Row-S)行级共享锁,Se
10、lect for update、Lock其他对象只能for update 、Lock row share查询这些数据行行级排它锁,Insert 、 Update、 Delete 、3SX(Row-X)在提交前不允Lock row share许做 DML操作4S(Share)共享锁Create index、 Lock share5SSX(S/Row-X)共享行级排它Lock share row exclusive锁Alter table、Drop able 、6X(Exclusive)排它锁Drop index 、 Truncatetable 、 Lock exclusive1. 关于 V$lo
11、ck 表和相关视图的说明ColumnDatatypeDescriptionADDRRAW(4 | 8)Address of lock state objectKADDRRAW(4 | 8)Address of lockSIDNUMBERIdentifier for session holding or acquiringthe lockTYPEVARCHAR2(2)Type of user or system lockThe locks on the user types are obtained byuser applications. Any process that isblocking
12、othersis likelyto be holdingone ofthese locks. The user type locks are:TM - DML enqueue ?TX - Transaction enqueueUL - User supplied- 我们主要关注 TX和 TM两种类型的锁-UL 锁用户自己定义的,一般很少会定义,基本不用关注- 其它均为系统锁,会很快自动释放,不用关注ID1NUMBERLock identifier #1 (depends on type)ID2NUMBERLock identifier #2 (depends on type)-当 lock t
13、ype为 TM时, id1为 DML-lockedobject 的 object_id-当 lock type为 TX时, id1为 usn+slot,而id2为 seq。- 当 lock type为其它时,不用关注LMODE NUMBERLock mode inwhich the session holds the lock:0- none1- null (NULL)2- row-S (SS)3- row-X (SX)4- share (S)5- S/Row-X (SSX)6- exclusive (X)- 大于 0 时表示当前会话以某种模式占有该锁,等于 0 时表示当前会话正在等待该锁资源
14、,即表示该会话被阻塞。- 往往在发生 TX锁时,伴随着 TM锁,比如一个sid=9 会话拥有一个TM锁,一般会拥有一个或几个 TX锁,但他们的id1 和 id2 是不同的,请注意REQUESTNUMBERLock mode in which the process requests thelock:0 - none1 - null (NULL)2 - row-S (SS)3 - row-X (SX)4 - share (S)5 - S/Row-X (SSX)6 - exclusive (X)- 大于 0 时,表示当前会话被阻塞, 其它会话占有改锁的模式CTIMENUMBERTime since
15、 current mode was grantedBLOCKNUMBERThe lock is blocking another lock0, Not Blocking, /* Not blocking any otherprocesses */1, Blocking, /* This lock blocks otherprocesses */2, Global, /* This lock is global, so wecant tell */- 该锁是否阻塞了另外一个锁2. 其它相关视图说明视图名描述主要字段说明sid,serial#:表示会话信息。program :表示会话的应用程序信息
16、。查询会话的信息row_wait_obj# :表示等待的对象, 和v$session和锁的信息。dba_objects中的 object_id相对应。lockwait :该会话等待的锁的地址, 与v$lock 的 kaddr 对应 .sid :表示持有锁的会话信息。Seconds_in_wait :表示等待持续的时间信查询等待的会话v$session_wait息信息。Event :表示会话等待的事件,锁等于enqueueSession_id :和 v$lock 中的 Sid 对应。Lock_type :和 v$lock中的 type 对应。对 v$lock 的格dba_locksLock_ID
17、1 : 和 v$lock中的 ID1 对应。式化视图。Mode_held,mode_requested :和 v$lock中的 lmode,request 相对应。Xidusn,xidslot,xidsqn:表示回滚段信息。和v$transaction相关联。只包含 DML的锁Object_id :表示被锁对象标识。v$locked_object信息,包括回滚段和会话信息。1. 查询数据库中的锁Session_id :表示持有锁的会话信息。Locked_mode:表示会话等待的锁模式的信息,和 v$lock 中的 lmode 一致。select * from v$lock;select * from v$lock where block=1;2. 查询被锁的对象select * from v$locked_object;3. 查询阻塞查被阻塞的会话select * from v$lock where lmode=0 and type in (TM,TX);查阻塞别的会话锁select * from v$lock where lmode0 and type in (TM,TX);4. 查询数据库正
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 装修线上活动方案
- 观音庙会创意活动方案
- 补碘健康讲座活动方案
- 街头艺人比赛活动方案
- 幼儿园教师职业道德规范及培训教材
- 高职教育教学改革创新案例
- 制造企业绿色生产流程优化报告
- 凉菜开店活动策划方案
- 宠物绝育活动方案策划
- 营销方案前沿研究
- 酒店预算培训
- 中华优传统文化 课件 第六章 中国传统史学
- 妇科出血性疾病分类及诊疗要点
- ISO27001:2022信息安全管理手册+全套程序文件+表单
- 房地产经纪人业务操作考试真题及答案(2025年新版)
- 现场质量问题处理流程培训
- 《局解腹部》课件
- 人教版数学八年级上册15.1.1《同底数幂的乘法》听评课记录
- 护理应急预案及流程
- 临床生化检验糖代谢
- 骨盆外固定架护理
评论
0/150
提交评论