如何查看是哪条sql语句被锁

风影枫林 2011-06-15 05:10:55
最近数据库中经常出现SQL语句被锁的问题,出现问题后相应的表就无法查询了,但我又不知道具体是哪条sql语句被锁,所以解决问题不知道从哪入手,请教,如何查看是哪条sql语句被锁.

在数据库中执行 sp_who 出现有几条blk字段不为0的结果,要解决该问题不知道要从何下手,求高人指点.
...全文
217 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
挨踢直男 2011-06-15
  • 打赏
  • 举报
回复
select * from sys.dm_tran_locks
--小F-- 2011-06-15
  • 打赏
  • 举报
回复
--查看锁信息
create table #t(req_spid int,obj_name sysname)

declare @s nvarchar(4000)
,@rid int,@dbname sysname,@id int,@objname sysname

declare tb cursor for
select distinct req_spid,dbname=db_name(rsc_dbid),rsc_objid
from master..syslockinfo where rsc_type in(4,5)
open tb
fetch next from tb into @rid,@dbname,@id
while @@fetch_status=0
begin
set @s='select @objname=name from ['+@dbname+']..sysobjects where id=@id'
exec sp_executesql @s,N'@objname sysname out,@id int',@objname out,@id
insert into #t values(@rid,@objname)
fetch next from tb into @rid,@dbname,@id
end
close tb
deallocate tb

select 进程id=a.req_spid
,数据库=db_name(rsc_dbid)
,类型=case rsc_type when 1 then 'NULL 资源(未使用)'
when 2 then '数据库'
when 3 then '文件'
when 4 then '索引'
when 5 then '表'
when 6 then '页'
when 7 then '键'
when 8 then '扩展盘区'
when 9 then 'RID(行 ID)'
when 10 then '应用程序'
end
,对象id=rsc_objid
,对象名=b.obj_name
,rsc_indid
from master..syslockinfo a left join #t b on a.req_spid=b.req_spid

go
drop table #t
cd731107 2011-06-15
  • 打赏
  • 举报
回复
dbcc语句
风影枫林 2011-06-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 josen_ 的回复:]
SQL code


sp_who active
--找出blk不为0的 比如为78
dbcc inputbuffer(78)
[/Quote]

这样就可以查出是哪条sql语句被锁吗?
Josen_ 2011-06-15
  • 打赏
  • 举报
回复

sp_who active
--找出blk不为0的 比如为78
dbcc inputbuffer(78)
-晴天 2011-06-15
  • 打赏
  • 举报
回复
可以在服务器的管理>SQL Server 日志去查锁.

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧