---实例DB:AdventureWorks2014

--- 创建view DBLocks

USE [AdventureWorks2014]
GO/****** Object:  View [dbo].[DBlocks]    Script Date: 8/17/2016 6:38:16 PM ******/
SET ANSI_NULLS ON
GOSET QUOTED_IDENTIFIER ON
GOCREATE VIEW [dbo].[DBlocks] AS
SELECT request_session_id as spid,
db_name(resource_database_id) as dbname,
CASE
WHEN resource_type = 'OBJECT' THEN
object_name(resource_associated_entity_id)
WHEN resource_associated_entity_id = 0 THEN 'n/a'
ELSE object_name(p.object_id)
END as entity_name, index_id,
resource_type as resource,
resource_description as description,
request_mode as mode, request_status as status
FROM sys.dm_tran_locks t LEFT JOIN sys.partitions p
ON p.partition_id = t.resource_associated_entity_id
WHERE resource_database_id = db_id();
GO

View Code

实例1: Read Commit(SQL SERVER默认隔离级别) 隔离级别下的SELECT

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
BEGIN TRAN
SELECT * FROM [Production].[Product] WHERE Name ='Reflector';
SELECT * FROM [dbo].[DBlocks] WHERE spid= @@SPID
COMMIT TRAN

View Code

DBLocks 的输出结果

spid dbname entity_name index_id resource mode status
58 AdventureWorks2014 sysrowsets NULL OBJECT Sch-S GRANT
58 AdventureWorks2014 n/a NULL DATABASE S GRANT
58 AdventureWorks2014 DBlocks NULL OBJECT IS GRANT

Product 表的数据没有LOCK,所以批处理执行select 操作获得了共享锁。SQL SEVER一旦读完数据之后立即释放共享锁。因此执行DBLoks试图时,上面提到的共享锁不存在了。

实例2: 可重复读隔离级别下的SELECT

SQL 批处理

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN TRAN
SELECT * FROM [Production].[Product] WHERE Name ='Reflector';
SELECT * FROM [dbo].[DBlocks] WHERE spid= @@SPID
COMMIT TRAN

View Code

DBLocks 的输出结果

spid dbname entity_name index_id resource description mode status
58 AdventureWorks2014 sysrowsets NULL OBJECT   Sch-S GRANT
58 AdventureWorks2014 n/a NULL DATABASE   S GRANT
58 AdventureWorks2014 Product 1 PAGE 0.590972222 IS GRANT
58 AdventureWorks2014 DBlocks NULL OBJECT   IS GRANT
58 AdventureWorks2014 Product 1 KEY (b031e2166063) S GRANT
58 AdventureWorks2014 Product 3 KEY (489415cc61a4) S GRANT
58 AdventureWorks2014 Product NULL OBJECT   IS GRANT
58 AdventureWorks2014 Product 3 PAGE 3.626388889 IS GRANT

由于Product表上有聚集索引,数据行就是页级别的全部索引行,返回两个数据行上的锁是键锁,用来寻找相关数据。在Product表上存在Name上的非聚集索引,可以通过Index_ID字段的值来区分聚集所以和非聚集索引,Index_ID=1表示数据行和聚集索引,Index_ID=3表示非聚集索引。由于事务的隔离级别是可重复读,共享锁要等到事务结束为止。NOTE:索引行拥有共享锁(S)而数据分页,索引分页以及表本身拥有意向共享锁(IS)。

实例3:可串行隔离级别下的SELECT

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRAN
SELECT * FROM [Production].[Product] WHERE Name LIKE 'Reflect%';
SELECT * FROM [dbo].[DBlocks] WHERE spid= @@SPID
COMMIT TRAN

View Code

DBLocks的输出结果

spid dbname entity_name index_id resource description mode status
58 AdventureWorks2014 sysrowsets NULL OBJECT   Sch-S GRANT
58 AdventureWorks2014 n/a NULL DATABASE   S GRANT
58 AdventureWorks2014 Product 1 PAGE 0.590972222 IS GRANT
58 AdventureWorks2014 n/a NULL METADATA schema_id = 7 Sch-S GRANT
58 AdventureWorks2014 DBlocks NULL OBJECT   IS GRANT
58 AdventureWorks2014 Product 1 KEY (b031e2166063) S GRANT
58 AdventureWorks2014 Product 3 KEY (489415cc61a4) RangeS-S GRANT
58 AdventureWorks2014 Product NULL OBJECT   IS GRANT
58 AdventureWorks2014 Product 3 PAGE 3.626388889 IS GRANT
58 AdventureWorks2014 Product 3 KEY (53bdd09497c4) RangeS-S GRANT
58 AdventureWorks2014 NULL NULL OBJECT   IS GRANT

转载于:https://www.cnblogs.com/Jesse-Li/p/5783692.html

SQL SERVER 锁定的实例相关推荐

  1. 由于启动用户实例的进程时出错,导致无法生成 SQL Server 的用户实例。该连接将关闭...

    在win7 中安装VS2008开发DNN的模块,经常出现"由于启动用户实例的进程时出错,导致无法生成 SQL Server 的用户实例.该连接将关闭"的问题,在网上找了下有如下解决 ...

  2. sql server 锁定_如何使用SQL Server 2014托管锁定优先级控制在线索引重建锁定

    sql server 锁定 When you perform a SQL Server Online Index Rebuild operation, introduced for the first ...

  3. sql server 锁定_关于锁定SQL Server的全部

    sql server 锁定 .SQLCode { font-size: 13px; font-weight: bold; font-family: monospace;; white-space: p ...

  4. 如何修改 SQL Server 中的实例名 ?

    在微软的社区也看到了这个问题: https://social.msdn.microsoft.com/Forums/en-US/c59b0840-1595-456a-b77e-d95b1a2a9097/ ...

  5. 删除 SQL Server 的默认实例

    在网上找到下面几种方法,本人使用的是第一种,很实用. 1.删除 SQL Server 的特定实例 若要删除 SQL Server 的某个特定实例,请按照以下步骤操作:  找到并删除%drive%:\\ ...

  6. 解决方案:请删除SQL Server的“WinCC“实例,因为在卸载“WinCC Professional“或“WinCC Runtime Professional“之后及其他问题解决方案!!!

    作者:嵌入式历练者 ID : Eterlove 记下相关笔记,记录我的学习生活!站在巨人的肩上Standing on Shoulders of Giants! 该文章为原创,转载请注明出处和作者:ht ...

  7. SQL Server 2005 默认实例和命名实例(这文章翻译得真绕嘴)

    Microsoft SQL Server 2005 Express Edition (SQL Server Express) 通常作为命名实例安装.如果未在安装过程中指定命名实例,则使用默认的命名实例 ...

  8. 使用JDBC连接SQL Server 2000 命名实例(Named Instance)

    最近比较闲,就爱摆弄一些玩意,前时间对ruby on rails比较感兴趣,就想继续看看,但是系统坏了好几次,前段时间配好的eclipse+rdt+sqlserver的环境也就得重新diy了:     ...

  9. SQL Server返回当前实例系统日期和时间的函数

    下面列举出SQL Server返回实例系统日期和时间的函数,除了ANSI标准函数CURRENT_TIMESTAMP在应用时无需在函数后多加一对空的小括号"()"外,其余均需. 从返 ...

最新文章

  1. spyder jupyter集成
  2. oracle数据库可以存图片吗,如何往数据库(Oracle)里存储图片和文件
  3. JavaScript 异常处理
  4. 怎样呵护友谊_怎样呵护友谊(作文)
  5. VC操作XML编程实例
  6. 跳转控制语句之break
  7. resize 按钮不会被伪元素遮盖
  8. Firefox Developer Edition已阻止此网站安装未经验证的附加组件的解决办法
  9. asp,net 读写cookie(个人笔记)
  10. [Hadoop]SSH免密码登录以及失败解决方案
  11. java 方法调用表达式_java lambda怎么表达式判断被调用接口名称和接口中方法
  12. springboot banner.txt 在线制作
  13. pyton-虚拟环境以及django的初步使用记录信息
  14. 基于asp.net大学生就业管理系统#毕业设计
  15. Ta,两年拿下了10亿美金
  16. 【经验分享】IT领域7年工作经验和建议
  17. 车位地磁检测器产品选型指导(干货!)
  18. 运用计算机思维可以解决什么问题,计算机思维是能否解决生活中遇到的难题?...
  19. Qno技术:支持网吧业务目标持续推进——FVR9000系列网吧解决方案(转)
  20. python+pyqt5+mysql设计图书管理系统(1)- 数据库

热门文章

  1. 2010伊始就这么忙
  2. [转]《精通Javascript》笔记:第六章(事件)
  3. cmake常用语法参考
  4. Redis高并发5-redis数据持久化之企业应用
  5. python沙箱逃逸小结
  6. 轻松学DDD之二:如何高效消化知识
  7. [LeetCode] NO. 242 Valid Anagram
  8. android打包方法超过65k错误
  9. RedHat Enterprise Linux 7下安装 Oracle 12C
  10. .Net 中的反射(序章) - Part.1