Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2248798
  • 博文数量: 310
  • 博客积分: 6853
  • 博客等级: 准将
  • 技术积分: 2833
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-04 16:41
文章分类

全部博文(310)

文章存档

2013年(17)

2012年(42)

2011年(76)

2010年(71)

2009年(99)

2007年(2)

2006年(1)

2005年(2)

分类: 数据库开发技术

2009-07-07 13:30:49

 SQL Server数据库发生死锁时不会像ORACLE那样自动生成一个跟踪文件。有时可以在[管理]->[当前活动] 里看到阻塞信息(有时SQL Server企业管理器会因为锁太多而没有响应).

  设定跟踪1204:

USE MASTER
DBCC TRACEON (1204,-1)
  显示当前启用的所有跟踪标记的状态:

DBCC TRACESTATUS(-1)
  取消跟踪1204:

DBCC TRACEOFF (1204,-1)
  在设定跟踪1204后,会在数据库的日志文件里显示SQL Server数据库死锁时一些信息。但那些信息很难看懂,需要对照SQL Server联机丛书仔细来看。根据PAG锁要找到相关数据库表的方法:

DBCC TRACEON (3604)
DBCC PAGE (db_id,file_id,page_no)
DBCC TRACEOFF (3604)

查到相应的表
是否能查到具体锁定的行或者多个行等。
信息结构:
db_id:file_id:page_no:row_no

To find out the table, use DBCC PAGE:
dbcc traceon(3604)
dbcc page (db_id, File_id, page_no)


So in this case,
dbcc traceon(3604)
dbcc page(1, 1, 1334)


the Object_id is in the page header, for example: m_objId = 36
select object_name(36) would give you the table name

查表:
select * from sysobjects where id = 1653632984


要获得索引,运行下面的代码:
select * from sysindexes where indid = 2 and id = 1653632984

阅读(810) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~