版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精心整理页脚内容oracle的TM锁、TX锁知识完全普及锁概念基础数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事 务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。加锁是实现数据库并发控制的一个非常重要的技术。 当事务在对某个数据对象进行操作前, 先向系 统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制, 在该事务释放锁之前,其他 的事务不能对此数据对象进行更新操作。在数据库中有两种基本的锁类型:排它锁(ExclusiveLocks,即X锁)和共享锁(ShareLocks,即S锁)。当数据对象被
2、加上排它锁时,其他的事务不能对它读取和修改。加了共享锁的数据对象可 以被其他事务读取,但不能修改。数据库利用这两种基本的锁类型来对数据库的事务进行并发控制。Oracle数据库的锁类型根据保护的对象不同,Oracle数据库锁可以分为以下几大类:DML(datalocks,数据锁),用 于保护数据的完整性;DDL(dictio narylocks,字典锁),用于保护数据库对象的结构,如表、索引等的结构定义;内部锁和闩(in ternallocksa ndlatches),保护数据库的内部结构。DML锁的目的在于保证并发情况下的数据完整性,。在Oracle数据库中,DML锁主要包括TM锁和TX锁,其
3、中TM锁称为表级锁,TX锁称为事务锁或行级锁。当Oracle执行DMI语句时,系统自动在所要操作的表上申请TM类型的锁。当TM锁获得后,系统 再自动申请TX类型的锁,并将实际锁定的数据行的锁标志位进行置位。这样在事务加锁前检查TX锁相容性时就不用再逐行检查锁标志,而只需检查TM锁模式的相容性即可,大大提高了系统的效率。TM锁包括了SS SX S、X等多种模式,在数据库中用06来表示。不同的SQL操作产生不 同类型的TM锁。在数据行上只有X锁(排他锁)。在Oracle数据库中,当一个事务首次发起一个DML语句时就获 得一个TX锁,该锁保持到事务被提交或回滚。当两个或多个会话在表的同一条记录上执行
4、DML语句时,第一个会话在该条记录上加锁,其他的会话处于等待状态。当第一个会话提交后,TX锁被释放,其他会话才可以加锁。当Oracle数据库发生TX锁等待时,如果不及时处理常常会引起Oracle数据库挂起,或导致死锁 的发生,产生ORA-60的错误。这些现象都会对实际应用产生极大的危害,如长时间未响应,大量 事务失败等。悲观封锁和乐观封锁、悲观封锁 锁在用户修改之前就发挥作用:页脚内容精心整理Select.forupdate(no wait)Select*fromtab1forupdate用户发出这条命令之后,oracle将会对返回集中的数据建立行级封锁,以防止其他用户的修改。如果此时其他用户
5、对上面返回结果集的数据进行dml或ddl操作都会返回一个错误信息或发生阻塞。1:对返回结果集进行update或delete操作会发生阻塞。2:对该表进行ddl操作将会报:0ra-00054:resourcebusyandacquirewithnowaitspecified.原因分析I此时Oracle已经对返回的结果集上加了排它的行级锁,所有其他对这些数据进行的修改或删除操 作都必须等待这个锁的释放,产生的外在现象就是其他的操作将发生阻塞,这个这个操作commit或rollback.同样这个查询的事务将会对该表加表级锁,不允许对该表的任何ddl操作,否则将会报出ora-00054错误::reso
6、urcebusyandacquirewithnowaitspecified.V j二、乐观封锁乐观的认为数据在select出来到update进取并提交的这段时间数据不会被更改。这里面有一种潜 在的危险就是由于被选出的结果集并没有被锁定,是存在一种可能被其他用户更改的可能。因此Oracle仍然建议是用悲观封锁,因为这样会更安全。阻塞定义:当一个会话保持另一个会话正在请求的资源上的锁定时,就会发生阻塞。被阻塞的会话将一直挂起,直到持有锁的会话放弃锁定的资源为止。4个常见的dml语句会产生阻塞INSERTUPDATEDELETESELECT FORUPDATEINSERT精心整理页脚内容Insert
7、发生阻塞的唯一情况就是用户拥有一个建有主键约束的表。当2个的会话同时试图向表中插入相同的数据时,其中的一个会话将被阻塞,直到另外一个会话提交或会滚。一个会话提交时, 另一个会话将收到主键重复的错误。回滚时,被阻塞的会话将继续执行。UPDAT和DELETE!执行Update和delete操作的数据行已经被另外的会话锁定时,将会发生阻塞, 直到另一个会话提交或会滚。Selectforupdate当一个用户发出select.forupdate的错作准备对返回的结果集进行修改时,如果结果集已经被另一个会话锁定,就是发生阻塞。需要等另一个会话结束之后才可继续执行。可以通过发出selectforupdat
8、enowait的语句来避免发生阻塞,如果资源已经被另一个会话锁定,则会返回以 下错误:0ra-00054:resourcebusyandacquirewithnowaitspecified.死锁-deadlockJf定义:当两个用户希望持有对方的资源时就会发生死锁即两个用户互相等待对方释放资源时,oracle认定为产生了死锁,在这种情况下,将以牺牲一个用 户作为代价,另一个用户继续执行,牺牲的用户的事务将回滚例子: Ii VI I,/r !J*/1:用户1对A表进行Update,没有提交。2:用户2对B表进行Update,没有提交。此时双反不存在资源共享的问题。3:如果用户2此时对A表作upd
9、ate,则会发生阻塞,需要等到用户一的事物结束。” I I /4:如果此时用户1又对B表作update,则产生死锁。此时Oracle会选择其中一个用户进行会滚, 使另一个用户继续执行操作。起因:Oracle的死锁问题实际上很少见,如果发生,基本上都是不正确的程序设计造成的,经过调整后, 基本上都会避免死锁的发生。DML锁分类表表1Oracle的TM锁类型精心整理页脚内容锁模式锁描述解释SQL操 作精心整理页脚内容0none1NULL空Select2SS(Row-S)行级共享锁,其他对象只 能查询这些 数据行Selectforupdate、Lockforupdate、Lockrowshare3S
10、X(Row-X)行级排它锁,在提交前不允许做DML操作Insert、UpdateDelete、Lockrowshare4S(Share)共享锁Create in dex、Lockshare5SSX(S/Row-X)共享行级排 它锁Locksharerowexclusive6X(Exclusive)排它锁Altertable、Dropable、Drop in dex、Trun catetable、Lockexclusive1.关于V$lock表和相关视图的说明ColumnDatatype. fT |Descripti onADDRRAW(4|8)AddressoflockstateobjectK
11、ADDRRAW(4|8)AddressoflockSIDNUMBERIden tifierforsessi on holdi ngoracquiri ngthelock-TYPEVARCHAR2(2TypeofuserorsystemlockThelocks on theusertypesareobta in edbyuserapplicatio ns.A nyprocessthatisbloc kingothersislikelytobeholdi ngon eoftheselocks.Theusertypelocksare:TM-DMLe nqueue?TX-Tra nsactio nen
12、q ueueUL-Usersupplied-我们主要关注TX和TM两种类型的锁-UL锁用户自己定义的,一般很少会定义,基本不用关注-其它均为系统锁,会很快自动释放,不用关注精心整理页脚内容ID1NUMBELockide ntifier#1(depe ndso ntype) RID2NUMBELockide ntifier#2(depe ndso ntype)R-当locktype为TM时,id1为DML-lockedobject的object_id-当locktype为TX时,id1为usn+slot,而id2为seq。-当locktype为其它时,不用关注LMODENUMBERLockmod
13、e in whichthesessi on holdsthelock:0-none1-n ull(NULL)2-row-S(SS)3-row-X(SX)4-share(S)5-S/Row-X(SSX)6-exclusive(X)i i-大于0时表示当前会话以某种模式占有该锁,等于0时表示当前会话正在等待该锁资源,即表示该会话被阻塞。1 -往往在发生TX锁时,伴随着TM锁,比如一个sid=9会话拥有一个TM锁,一般会 拥有一个或几个TX锁,但他们的id1和id2是不同的,请注意REQUESTNUMBERLockmode in whichtheprocessrequeststhelock:0-no
14、ne1-n ull(NULL)2-row-S(SS)3-row-X(SX)4-share(S)5-S/Row-X(SSX)6-exclusive(X)-大于0时,表示当前会话被阻塞,其它会话占有改锁的模式CTIMENUMBERTimesi ncecurre ntmodewasgra ntedBLOCKNUMBEThelockisblock in ga no therlockRO,NotBlocking,/*Notblockinganyotherprocesses*/1,Blocking,/*Thislockblocksotherprocesses*/精心整理页脚内容2,Global,/*Thi
15、slockisglobal,sowecanttell*/-该锁是否阻塞了另外一个锁2.其它相关视图说明视图名描述主要字段说明v$sessi on查询会话的信息 和锁的信息。sid,serial#:表示会话信息。program:表示会话的应用程序信息。row_wait_obj#:表示等待的对象,和dba_objects中的object_id相对应。lockwait:该会话等待的锁的地址,与v$lock的kaddr对应.v$sessi on _wait查询等待的会话 信息。sid:表示持有锁的会话信息。Seconds_in_wait:表示等待持续的时间信息Eve nt:表示会话等待的事件,锁等于e
16、n queuedba_locks对v$lock的格式 化视图。Session_id:和v$lock中的Sid对应。Lock_type:和v$lock中的type对应。Lock_ID1:和v$lock中的ID1对应。Mode_held,mode_requested:和v$lock中 的lmode,request相对应。v$locked_object只包含DML勺锁信息,包括回滚段和 会话信息。Xidus n, xidslot,xids qn:表示回滚段信息。和v$tra nsacti on相关联。Object_id:表示被锁对象标识。Session_id:表示持有锁的会话信息。Locked_mode表示会话等待的锁模式的信息,和v$lock中的lmode一致。1.查询数据库中的锁select*fromv$lock; select*fromv$lockwhereblock=1;精心整理页脚内容2.查询被锁的对象select*fromv$loc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年创伤性脾破裂手术后护理
- 2025 中医中药学与混合课程(融合)课件
- 保卫黄河课程设计
- 容器逃逸检测应用研究课程设计
- 基于CAN通信设计课程设计
- 背景布置烘焙课程设计
- RAG开发知识问答系统案例课程设计
- 基于NLP的情感分析应用教程课程设计
- 藏族幼儿园课程设计
- 电动自行车动力系统体验设计课程设计
- 2026黄石阳新工作人员公开招聘30人笔试备考题库及答案详解
- 2025年新疆检察院书记员《法律基础知识》题库附答案
- 2026年证券投资顾问胜任能力考试真题及答案解析
- 2026年苏教版小学四年级数学上册第四单元《数学建模》完整课时教案
- 无人机航拍技术课件 项目五任务二:照相机设置与参数调整
- 2026年天津专升本(计算机基础)考试真题附答案
- 海南省名校联盟2025-2026学年高二(下)期末化学试卷(含答案)
- 化学(基础模块)中职PPT完整全套教学课件
- 架空导地线-液压压接(郭学闻)
- 技师培训交直流调速
- 输变电工程项目安全管理台账
评论
0/150
提交评论