SQL Server数据库发生死锁时不会象ORACLE那样自动生成一个跟踪文件. 
有时可以在[管理]->[当前活动] 里看到阻塞信息(有时SQL Server企业管理器会因为锁太多而没有响应). 
设定跟踪1204: 
USE MASTER
DBCC TRACEON (1204,-1)
 
显示当前启用的所有跟踪标记的状态: 
DBCC TRACESTATUS(-1)
取消跟踪1204:
<CENTER><ccid_nobr>
<table width="400" border="1" cellspacing="0" cellpadding="2" bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center">
<tr>
    <td bgcolor="e6e6e6" class="code" style="font-size:9pt">
    <pre><ccid_code>
DBCC TRACEOFF (1204,-1)
 
在设定跟踪1204后,会在数据库的日志文件里显示SQL Server数据库死锁时一些信息, 
但那些信息很难看懂,需要对照SQL Server联机丛书仔细来看. 
根据PAG锁要找到相关数据库表的方法: 
DBCC TRACEON (3604) 
DBCC PAGE (db_id,file_id,page_no)
DBCC TRACEOFF (3604)
 
请参考sqlservercentral.com上更详细的讲解. 
从CSDN学到了一个找到死锁原因的方法. 
我稍加修改, 去掉了游标操作并增加了一些提示信息,写了一个系统存储过程sp_who_lock.sql. 
需要的时候直接调用: 
sp_who_lock 
就可以查出引起死锁的进程和SQL语句. 
SQL Server自带的系统存储过程sp_who和sp_lock也可以用来查找阻塞和死锁, 但没有这里介绍的方法好用. 
如果想知道其它tracenum参数的含义,请看www.sqlservercentral.com文章 
我们还可以设置锁的超时时间(单位是毫秒), 来缩短死锁可能影响的时间范围: 
例如: 
use master
seelct @@lock_timeout
set lock_timeout 900000
-- 15分钟
seelct @@lock_timeout
 
			
			 
			
				
				 来源:博远电子(软件定制),如涉及版权问题请与我们联系。
				
				
					
					
						
TAG
						软件定制,软件开发,瀚森HANSEN,辽宁,沈阳,抚顺