問題描述:只是單純的執行了"select count(*) from 某表";數據表中只有一兩條數據,能查詢其他表,唯獨這個表不能進行任何操作;
經百度搜索實驗,發現應該是某個進程阻塞了,使用了一下代碼進行的查詢(這個比較詳細):
1 declare @spid int,@bl int 2 DECLARE s_cur CURSOR FOR select 0 ,blocked from (select * from sys.sysprocesses where blocked>0 ) a 3 where not exists(select * from (select * from sys.sysprocesses where blocked>0 ) b where a.blocked=spid) 4 union 5 select spid,blocked from sys.sysprocesses where blocked>0 OPEN s_cur FETCH NEXT FROM s_cur INTO @spid,@bl WHILE @@FETCH_STATUS = 0 6 begin if @spid =0 7 select ' 引起數據庫死鎖的是: '+ CAST(@bl AS VARCHAR(10)) + ' 進程號, 其執行的SQL 語法如下' else 8 select ' 進程號SPID :'+ CAST(@spid AS VARCHAR(10))+ ' 被' + ' 進程號SPID :'+ CAST(@bl AS VARCHAR(10)) +' 阻塞, 其當前進程執行的SQL 語法如下' 9 DBCC INPUTBUFFER (@bl ) FETCH NEXT FROM s_cur INTO @spid,@bl end CLOSE s_cur 10 DEALLOCATE s_cur
還有其他的語句也都可以證明有進程被阻塞了,只不過我是初學者,看不懂:
1 use master 2 go 3 --檢索死鎖進程 4 select spid, blocked, loginame, last_batch, status, cmd, hostname, program_name 5 from sysprocesses 6 where spid in 7 ( select blocked from sysprocesses where blocked <> 0 ) or (blocked <>0)
或者
1 select * from sys.sysprocesses where blocked<>0
解決辦法:只需要殺死阻塞進程就可以了:
1 select spid, blocked, loginame, last_batch, status, cmd, hostname, program_name 2 from sysprocesses 3 where spid in 4 ( select blocked from sysprocesses where blocked <> 0 ) or (blocked <>0) 5 6 kill spid(進程號)
