关于锁的疑问,为什么spid有0

chinadrgon 2009-08-12 08:46:50
现象:今天数据库出现故障,有一个表好像是被锁住了,无法更新表的内容
分析过程:到网上查原因,初步确定是锁的问题,用sp_lock和网上的语句查询

----------------------------网上查看锁的语句------------------------------
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
where db_name(rsc_dbid)='DCentreCHQ'


go
drop table #t
----------------------------网上查看锁的语句------------------------------


找到了原因,该表被RANGES-S锁锁死了,但是我的疑问是用sp_lock查出来的spid居然都是0,UOW的guid值也为0,0不是正常的spid,无法kill,因而无法把这个锁释放,请高手帮我解释下

1.sp_lock显示的spid为0是什么意思!

2.如果碰到这种情况我怎么才能释放这个锁呢!

3.还有我直接查询master..syslockinfo找到锁对应的transactionID,我可以通过transactionID回滚这个事务并释放锁吗?可以的话 什么命令呢?

请大家帮帮忙,这里先谢过了,分不够的话可以再给!
...全文
4368 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
zaytsing 2009-08-19
  • 打赏
  • 举报
回复
来学习。。前段时间也研究了下,没研究出来。。
chinadrgon 2009-08-19
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 w11x22b33 的回复:]
引用楼主 chinadrgon 的回复:


2.如果碰到这种情况我怎么才能释放这个锁呢!


把服务重起一下。
[/Quote]
有没有更好的办法啊
w11x22b33 2009-08-18
  • 打赏
  • 举报
回复
[Quote=引用楼主 chinadrgon 的回复:]


2.如果碰到这种情况我怎么才能释放这个锁呢!
[/Quote]

把服务重起一下。
chinadrgon 2009-08-18
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 guguda2008 的回复:]
引用 17 楼 chinadrgon 的回复:
邹先生帮帮忙啊

T-MAC和剪子哥在这你找邹老大干啥
[/Quote]
搞不定啊兄弟啊!有谁帮帮忙哦!
plglenn7 2009-08-17
  • 打赏
  • 举报
回复
d
xiaozejun 2009-08-16
  • 打赏
  • 举报
回复
这个问题正在学习中 过来向高手学习学习 帮顶 楼主解决问题后 请记得把解决的方法详细说一下 让我们也好好学习
guguda2008 2009-08-16
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 chinadrgon 的回复:]
邹先生帮帮忙啊
[/Quote]
T-MAC和剪子哥在这你找邹老大干啥
chinadrgon 2009-08-16
  • 打赏
  • 举报
回复
邹先生帮帮忙啊
SQL77 2009-08-13
  • 打赏
  • 举报
回复
学习一下,死锁这个问题很麻烦
chinadrgon 2009-08-13
  • 打赏
  • 举报
回复
顶一下,请邹先生帮忙啊
you_tube 2009-08-12
  • 打赏
  • 举报
回复
今天碰到spid是-2的呢
八成是你对系统一些表或参数进行了误操作
chinadrgon 2009-08-12
  • 打赏
  • 举报
回复
其它的表一切正常,数据库查了没有发生阻塞现象
chinadrgon 2009-08-12
  • 打赏
  • 举报
回复
表被RANGES-S锁锁住了无法执行update命令
chinadrgon 2009-08-12
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 feixianxxx 的回复:]
Spid:进程ID号(要发现哪些用户和该spid相连,你就要执行存储过程sp_who)
然后。。。
使用 sp_who 这个存储过程, 查询sql上的当前进程, 观察 blk 列值是否有不为0的
  如果有不为 0 的, 表示有阻塞,产生阻塞的进程的 spid 即是 blk 列值, 被阻塞的进程是 列 blk 值不为0的记录行对应的 spid


[/Quote]

兄弟你用下sp_who看看什么时候spid会出现0这个值
spid 为 0 不是有效的进程 ID,它的值应该是介于 1 和 2048 之间的数字。
kill 0 你执行一下看看会有什么结果

兄弟你说的我肯定都是试过了的,而且是查阅大量资料实在搞不定才上来求救,请仔细的看看我的问题。而且再强调一次
1.数据库没有阻塞,只是有一个表被RANGES-S锁锁住了
2.用sp_lock查到这个锁的spid 为 0不是blk为0,是spid为0
feixianxxx 2009-08-12
  • 打赏
  • 举报
回复
Spid:进程ID号(要发现哪些用户和该spid相连,你就要执行存储过程sp_who)
然后。。。
使用 sp_who 这个存储过程, 查询sql上的当前进程, 观察 blk 列值是否有不为0的
如果有不为 0 的, 表示有阻塞, 产生阻塞的进程的 spid 即是 blk 列值, 被阻塞的进程是 列 blk 值不为0的记录行对应的 spid

chinadrgon 2009-08-12
  • 打赏
  • 举报
回复
即 kill 0 这是一个非法的命令
chinadrgon 2009-08-12
  • 打赏
  • 举报
回复
首先非常感谢楼上的兄弟的帮助,我再补充一下:

1.数据库没有阻塞,只是有一个表被RANGES-S锁锁住了
2.用sp_lock查到这个锁的spid 为 0不是blk为0,是spid为0

spid 0不是blk为0
spid 0不是blk为0
spid 0不是blk为0

spid 为 0 不是有效的进程 ID,它的值应该是介于 1 和 2048 之间的数字。
feixianxxx 2009-08-12
  • 打赏
  • 举报
回复
--sp_who 这个存储过程, 查询sql上的当前进程, 观察 blk 列值是不为0
--不为0 就杀掉。。。
jinjazz 2009-08-12
  • 打赏
  • 举报
回复
详细的参考
http://blog.ccement.com/user1/25759/archives/2008/6410.html
jinjazz 2009-08-12
  • 打赏
  • 举报
回复
select spid,blocked from sys.sysprocesses
where blocked>0

然后 kill blocked对应的值看看

spid是0的应该就是死锁的进程
加载更多回复(4)

22,298

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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