---实例DB:AdventureWorks2014

--- 创建view DBLocks

USE [AdventureWorks2014]
GO /****** Object: View [dbo].[DBlocks] Script Date: 8/17/2016 6:38:16 PM ******/
SET ANSI_NULLS ON
GO SET QUOTED_IDENTIFIER ON
GO CREATE 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

实例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

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

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

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

SQL SERVER 锁定的实例的更多相关文章

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

    错误:由于启动用户实例的进程时出错,导致无法生成SQL Server的用户实例. 原因:添加安装SQLEXPRESS时,估计装在了不同的目录下: 解决方法:关闭Sqlserver及相关的程序,删除目录 ...

  2. 由于检索用户的本地应用程序数据路径时出错,导致无法生成 SQL Server 的用户实例

    /”应用程序中的服务器错误. 由于检索用户的本地应用程序数据路径时出错,导致无法生成 SQL Server 的用户实例.请确保该用户在此计算机上有本地用户配置文件.该连接将关闭. 堆栈跟踪: [Sql ...

  3. 如何查看SQL Server的数据库实例名

    其实一般默认就是MSSQLSERVER  (注意,就是英文大写). 点击开始,运行,services.mcs 然后查阅所有SQL Server的项,其中括号中字符串的就是实例名 reference: ...

  4. Sql Server 服务器名称\实例名称 无法连接 Server Name\Instance Name

      解决步骤: 1:  Sql Server是否已经启动. 2:  检查Sql Server服务器是否开启TCP/IP协议. 侦听的默认端口为1433          3:     ping 数据库 ...

  5. 【Kettle】4、SQL SERVER到SQL SERVER数据转换抽取实例

    1.系统版本信息 System:Windows旗舰版 Service Pack1 Kettle版本:6.1.0.1-196 JDK版本:1.8.0_72 2.连接数据库 本次实例连接数据库时使用全局变 ...

  6. PCB SQL SERVER 正则应用实例

    我们用过SQL SERVER的都知道,SQL SERVER它本身是不自带正则表达式的,因为没有,所以基本都没用过啊, 但我们在C#中对文本匹配用正则的方式处理非常好用,省得你写一堆代码实现匹配,多简洁 ...

  7. SQL Server 修改默认实例

    有一台服务器,里面装了两个版本的数据库,一个2008(实例名称为MSSQLSERVER),一个2017(实例名称为MSSQLSERVER01): Sql server 数据库可以安装多个数据库实例,但 ...

  8. C#操作access和SQL server数据库代码实例

    在C#的学习中,操作数据库是比较常用的技术,而access和sql server 数据库的操作却有着不同.那么,有哪些不同呢? 首先,需要引用不同的类.因为有着不同的数据引擎. access:usin ...

  9. MS SQL SERVER 2008 R2 实例服务启动出现10048错误解决办法

    由于个人癖好,把MSSQLSERVER服务禁止了开机启动,每次需要的时候就输入CMD命令开启.今天在开启的时候,系统提示“发生服务特定错误:10048”. 于是打开SQL Server配置管理器,发现 ...

随机推荐

  1. Android实例-闪光灯的控制(XE8+小米2)

    unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Var ...

  2. elecworks无法连接至协同服务器

    http://jingyan.baidu.com/article/597a0643759e1c312b524385.html 在安装路径中找到Server文件夹,在文件夹中你可以看到只有一个文件[Ew ...

  3. hdoj 1863 畅通工程

    并查集+最小生成树 畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  4. PTA 5-14 电话聊天狂人 (25分)

    给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数NN(\le 10^5≤10​5​​),为通话记录条数.随后NN行,每行给出一条通话记录.简单起见,这里只列出 ...

  5. Stage3D学习笔记(三):使用GPU绘制一个图片

    首先准备我们需要的图片,尺寸必须是2的幂数,我修改了一下Starling的图标拿来用: 还是先看看最终效果: 代码是居于上一节的代码进行修改的: package { import com.adobe. ...

  6. Positioning(定位)

    Positioning(定位)    定位属性允许你为一个元素定位.它也可以将一个元素放在另一个元素后面,并指定一个元素的内容太大时,应该发生什么.    元素可以使用的顶部,底部,左侧和右侧属性定位 ...

  7. sqlite3使用教程1 SQLite 命令

    http://www.runoob.com/sqlite/sqlite-commands.html 本章将向您讲解 SQLite 编程人员所使用的简单却有用的命令.这些命令被称为 SQLite 的点命 ...

  8. 教你50招提升ASP.NET性能(八):检查你使用了什么客户端脚本

    (14)Review what client scripts you are using 招数14: 检查你使用了什么客户端脚本 Out of the box, many ASP.NET projec ...

  9. Lync边缘服务器配置

    以下步骤均使用Lync管理员权限即可完成 1.在前端下载并编辑拓扑,新建边缘池 如果边缘池中只有一台服务器,则池名称与服务器名称相同,如下: 如果需要删除边缘池,则需要先取消关联,如下: 2.发布拓扑 ...

  10. MFC——AfxParseURL用法

    1.功能: 该函数解析URL字符串并返回服务的类型及组件,包含在 afxinet.h 头文件中. 2.定义 BOOL AFXAPI AfxParseURL(LPCTSTRpstrURL,DWORD&a ...