资源描述:
《sqlserver中表锁定的原理及解锁演示》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、有几个朋友留言建议结合例子来演示一下,上篇已经说过锁的几种类型,可以利用系统动态视图sys.dm_tran_locks查看到,重要的栏位如下:resource_type被锁的资源类型(Database,FILE,Object,PAGE,KEY,EXTENT,RID,APPLICATION,METADATA,HOBT,APPOCATION_UNIT)request_mode锁的类型(共享锁,更新锁,排它锁,架构锁等)resource_description资源描述request_session_idRequestsessionID一:下面以A
2、dventureWorks2008为示例数据库做简要的说明,过滤掉一般的数据库的共享锁,作为示例必须要看到锁,所以用WITH(HOLDLOCK)来保持锁.1.Sharedlocks(S)共享锁1USEAdventureWorks200823BEGINTRAN4select*fromSales.SalesOrderHeaderWITH(HOLDLOCK)5whereSalesOrderID='43662'678SELECTresource_type,request_mode,resource_description,1request_sess
3、ion_id,DB_NAME(resource_database_id)asresource_database2FROMsys.dm_tran_locks3WHEREresource_type<>'DATABASE'45--ROLLBACKTRAN在事务回滚之前,查看锁的类型:其他session对Table只读,不能更新,在开一个新的session测试:6select*fromSales.SalesOrderHeaderwhereSalesOrderID='43662'78go9updateSales.SalesOrderHeaderset
4、OrderDate=GETDATE()whereSalesOrderID='43662'select可以正常执行,update语句一直处于等待状态,等待上面的session释放锁.2.Updatelocks(U):更新锁是共享锁和独占锁的组合.用UPDLOCK保持更新锁10USEAdventureWorks20081112BEGINTRAN13select*fromSales.SalesOrderHeaderWITH(UPDLOCK)14whereSalesOrderID='43662'151SELECTresource_type,requ
5、est_mode,resource_description,2request_session_id,DB_NAME(resource_database_id)asresource_database3FROMsys.dm_tran_locks4WHEREresource_type<>'DATABASE'56ROLLBACKTRAN查看到锁的信息:3.Exclusivelocks(X):独占锁是为了锁定数据被一个session修改的数据,而不能够被另外的session修改.只能指定NOLOCK来读取.7USEAdventureWorks2008
6、89BEGINTRAN1011updateSales.SalesOrderHeadersetShipDate=GETDATE()12whereSalesOrderID='43662'1314SELECTresource_type,request_mode,resource_description,15request_session_id,DB_NAME(resource_database_id)asresource_database--,*16FROMsys.dm_tran_locks1WHEREresource_type<>'DATABA
7、SE'23ROLLBACKTRAN查看锁:4.Intentlocks(I):意向锁用于建立锁的层次结构.意向锁包含三种类型:意向共享(IS)、意向排他(IX)和意向排他共享(SIX)。数据库引擎使用意向锁来保护共享锁(S锁)或排他锁(X锁)放置在锁层次结构的底层资源上。意向锁之所以命名为意向锁,是因为在较低级别锁前可获取它们,因此会通知意向将锁放置在较低级别上。意向锁有两种用途:防止其他事务以会使较低级别的锁无效的方式修改较高级别资源。提高数据库引擎在较高的粒度级别检测锁冲突的效率。5.Schemalocks(Sch):架构锁Schemas
8、tabilitylock(Sch-S):保持架构稳定性,用在生成执行计划时,不会阻止对数据的访问.Schemamodificationlock(Sch-M):用在DDL操作时.当