如何使用跟踪标记 1204

<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog336280.html" frameborder="0" width="336" scrolling="no" height="280"></iframe>

如何使用跟踪标记 1204

--=====================================================
--如何使用跟踪标记1204
--
--邹建2005.08(引用请保留此信息)
--=====================================================

--=====================================================
/*--说明

跟踪标记1204用于返回参与死锁的锁的类型以及当前受影响的命令。死锁信息将自动发送到错误日志。
开启跟踪标记使用DBCCTRACEON,第3个参数指定为-1,表示不单单针对当前connection,而是针对所有包括未来建立的connection
关闭跟踪标记使用DBCCTRACEOFF

下面是在查询分析器中使用跟踪标记1204的演示,死锁的信息被记录在SQLServer日志中,可以通过下面的方法查看:
企业管理器--展开实例--管理--SQLServer日志
由于在企业管理器中查看时,部分日志信息会被截断,所以所以建议使用记事本一类的文本查看工具直接查看/MSSQL/LOG目录下的ERRORLOG文件

有关死锁信息的详细说明参考联机帮助(联机丛书--菜单中的GO--URL--输入下面的地址:
mk:@MSITStore:C:/Program%20Files/Microsoft%20SQL%20Server/80/Tools/Books/trblsql.chm::/tr_servdatabse_5xrn.htm
--*/
--=====================================================

--测试环境

USEtempdb
GO

CREATETABLEta(idint)
INSERTtaSELECT1

CREATETABLEtb(idint)
INSERTtbSELECT1
GO

--开启死锁记录

DBCCTRACEON(1204,3605,-1)
GO

--产生死锁(查询窗口A)

SETLOCK_TIMEOUT-1
SETTRANSACTIONISOLATIONLEVEL
REPEATABLEREAD
BEGINTRAN
SELECT*FROMtaWHEREid=1
WAITFORDELAY'00:05:00'
UPDATEtbSETid=2WHEREid=1
COMMITTRAN
GO

--产生死锁(查询窗口B)

SETLOCK_TIMEOUT-1
SETDEADLOCK_PRIORITYLOW
SETTRANSACTIONISOLATIONLEVEL
REPEATABLEREAD
BEGINTRAN
SELECT*FROMtbWHEREid=1
UPDATEtaSETid=2WHEREid=1
COMMITTRAN
GO

--关闭死锁记录

DBCCTRACEOFF(1204,3605)
GO

--清除测试

DROPTABLEta,tb
GO

--1204产生的日志记录信息

2005-08-2508:16:21.85spid4Node:1
2005-08-2508:16:21.85spid4RID:2:1:28:0CleanCnt:2Mode:UFlags:0x2
2005-08-2508:16:21.85spid4GrantList0::
2005-08-2508:16:21.85spid4Owner:0x1998aec0Mode:SFlg:0x0Ref:1Life:02000000SPID:52ECID:0
2005-08-2508:16:21.85spid4SPID:52ECID:0StatementType:UPDATELine#:1
2005-08-2508:16:21.85spid4InputBuf:LanguageEvent:SETLOCK_TIMEOUT-1
SETTRANSACTIONISOLATIONLEVEL
REPEATABLEREAD
BEGINTRAN
SELECT*FROMtbWHEREid=1
WAITFORDELAY'00:01:00'
UPDATEtaSETid=2WHEREid=1
COMMITTRAN

2005-08-2508:16:21.85spid4RequestedBy:
2005-08-2508:16:21.85spid4ResType:LockOwnerStype:'OR'Mode:XSPID:51ECID:0Ec:(0x19B5B558)Value:0x1997b2c0Cost:(1/0)

2005-08-2508:16:21.85spid4Node:2
2005-08-2508:16:21.85spid4RID:2:1:15:0CleanCnt:2Mode:UFlags:0x2
2005-08-2508:16:21.85spid4GrantList0::
2005-08-2508:16:21.85spid4Owner:0x1997b3e0Mode:SFlg:0x0Ref:1Life:02000000SPID:51ECID:0
2005-08-2508:16:21.85spid4SPID:51ECID:0StatementType:UPDATELine#:1
2005-08-2508:16:21.85spid4InputBuf:LanguageEvent:
SETLOCK_TIMEOUT-1
SETDEADLOCK_PRIORITYLOW
SETTRANSACTIONISOLATIONLEVEL
REPEATABLEREAD
BEGINTRAN
SELECT*FROMtaWHEREid=1
WAITFORDELAY'00:01:00'
UPDATEtbSETid=2WHEREid=1
COMMITTRAN

2005-08-2508:16:21.85spid4RequestedBy:
2005-08-2508:16:21.85spid4ResType:LockOwnerStype:'OR'Mode:XSPID:52ECID:0Ec:(0x1A24D558)Value:0x1998cfa0Cost:(0/0)
2005-08-2508:16:21.85spid4VictimResourceOwner:
2005-08-2508:16:21.85spid4ResType:LockOwnerStype:'OR'Mode:XSPID:51ECID:0Ec:(0x19B5B558)Value:0x1997b2c0Cost:(1/0)

--分析日志记录信息,以分析Node:1为例,--**标注的是说明

--**Node:x在死锁的链中表示项目号(x)。
2005-08-2508:16:21.85spid4Node:1
2005-08-2508:16:21.85spid4RID:2:1:28:0CleanCnt:2Mode:UFlags:0x2
--**Lists,可以是授权(Grant)、转换(Convert)和等待(Wait),GrantList列举当前授权的所有者.
2005-08-2508:16:21.85spid4GrantList0::
2005-08-2508:16:21.85spid4Owner:0x1998aec0Mode:SFlg:0x0Ref:1Life:02000000SPID:52ECID:0
--**在并行进程情况下,标识系统进程ID线程。条目SPIDxECID0表示主线程,而SPIDxECID>0表示同一SPID的子线程。
--**StatementType:语句类型
--**Line#:死锁发生时,正在执行的语句的行号
2005-08-2508:16:21.85spid4SPID:52ECID:0StatementType:UPDATELine#:1
--**inputBuf列出当前批处理中所有的语句。
2005-08-2508:16:21.85spid4InputBuf:LanguageEvent:
SETLOCK_TIMEOUT-1
SETTRANSACTIONISOLATIONLEVEL
REPEATABLEREAD
BEGINTRAN
SELECT*FROMtbWHEREid=1
WAITFORDELAY'00:01:00'
UPDATEtaSETid=2WHEREid=1
COMMITTRAN

2005-08-2508:16:21.85spid4RequestedBy:
--**Mode为线程请求、授权或等待的特定资源,指定锁的类型。模式可以是IS(意向共享)、S(共享)、U(更新)、IX(意向独占)、SIX(与意向独占共享)和X(独占)
2005-08-2508:16:21.85spid4ResType:LockOwnerStype:'OR'Mode:XSPID:51ECID:0Ec:(0x19B5B558)Value:0x1997b2c0Cost:(1/0)




你可能感兴趣的:(使用)