[zt] Sql Server死鎖的查詢和解除
/*
exec master.dbo.p_lockinfo 0,0 ---顯示死鎖的程式,不顯示正常的程式
exec master.dbo.p_lockinfo 1,0 ---殺死死鎖的程式,不顯示正常的程式
*/
Create proc p_lockinfo
@kill_lock_spid bit=1, --是否殺掉死鎖的程式,1 殺掉, 0 僅顯示
@show_spid_if_nolock bit=1 --如果沒有死鎖的程式,是否顯示正常程式資訊,1 顯示,0 不顯示
as
declare @count int,@s nvarchar(1000),@i int
select id=identity(int,1,1),標誌,
程式ID=spid,執行緒ID=kpid,塊程式ID=blocked,資料庫ID=dbid,
資料庫名=db_name(dbid),使用者ID=uid,使用者名稱=loginame,累計CPU時間=cpu,
登陸時間=login_time,開啟事務數=open_tran, 程式狀態=status,
工作站名=hostname,應用程式名=program_name,工作站程式ID=hostprocess,
域名=nt_domain,網路卡地址=net_address
into #t from(
select 標誌='死鎖的程式',
spid,kpid,a.blocked,dbid,uid,loginame,cpu,login_time,open_tran,
status,hostname,program_name,hostprocess,nt_domain,net_address,
s1=a.spid,s2=0
from master..sysprocesses a join (
select blocked from master..sysprocesses group by blocked
)b on a.spid=b.blocked where a.blocked=0
union all
select '|_犧牲品_>',
spid,kpid,blocked,dbid,uid,loginame,cpu,login_time,open_tran,
status,hostname,program_name,hostprocess,nt_domain,net_address,
s1=blocked,s2=1
from master..sysprocesses a where blocked<>0
)a order by s1,s2
select @count=@@rowcount,@i=1
if @count=0 and @show_spid_if_nolock=1
begin
insert #t
select 標誌='正常的程式',
spid,kpid,blocked,dbid,db_name(dbid),uid,loginame,cpu,login_time,
open_tran,status,hostname,program_name,hostprocess,nt_domain,net_address
from master..sysprocesses
set @count=@@rowcount
end
if @count>0
begin
create table #t1(id int identity(1,1),a nvarchar(30),b Int,EventInfo nvarchar(255))
if @kill_lock_spid=1
begin
declare @spid varchar(10),@標誌 varchar(10)
while @i<
begin
select @spid=程式ID,@標誌=標誌 from #t where
insert #t1 exec('dbcc inputbuffer()
if @標誌='死鎖的程式' exec('kill )
set @i=@i+1
end
end
else
while @i<
begin
select @s='dbcc inputbuffer('+cast(程式ID as varchar)+')' from #t where
insert #t1 exec(@s)
set @i=@i+1
end
select a.*,程式的SQL語句=b.EventInfo
from #t a join #t1 b on a.id=b.id
end
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-598238/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [zt] sql server 死鎖總結SQLServer
- 在 SQL Server 中查詢活動連線和死鎖SQLServer
- 查詢並解除oracle的死鎖Oracle
- SQL Server 資料庫查詢死鎖的處理步驟SQLServer資料庫
- SQL SERVER 查詢鎖資訊SQLServer
- SQL Server 的死鎖SQLServer
- SQL Server死鎖SQLServer
- sql server死鎖的問題SQLServer
- 減少SQL Server死鎖的方法SQLServer
- SQL Server如何查詢鎖已經kill lockSQLServer
- oracle 死鎖查詢處理Oracle
- 查詢處理死鎖會話的sql語句(轉貼)會話SQL
- 從trc查詢死鎖的問題
- 如何透過sid查詢造成死鎖的sql語句,並殺死會話SQL會話
- 如何通過sid查詢造成死鎖的sql語句,並殺死會話SQL會話
- Oracle死鎖查詢及處理Oracle
- 如何捕獲和記錄SQL Server中發生的死鎖SQLServer
- SQL Server 查詢分解SQLServer
- mysql慢查詢,死鎖解決方案MySql
- oracle常用經典SQL查詢(zt)OracleSQL
- 查詢session被鎖的sql(轉)SessionSQL
- [zt] 怎樣解除安裝SQL Server2000SQLServer
- SQL Server遞迴查詢SQLServer遞迴
- SQL server跨庫查詢SQLServer
- Sql Server系列:子查詢SQLServer
- SQL server 查詢語句SQLServer
- SQL Server 分散式查詢SQLServer分散式
- SQL SERVER 動態查詢SQLServer
- SQL Server 跨域查詢SQLServer跨域
- SQL查詢的:子查詢和多表查詢SQL
- SQL Server 查詢表註釋和欄位SQLServer
- Sql Server 的引數化查詢SQLServer
- sql server的許可權查詢SQLServer
- 查詢當前SQL Server的版本SQLServer
- MS SQL Server的遞迴查詢SQLServer遞迴
- MySQL、Oracle和SQL Server的分頁查詢語句MySqlOracleServer
- 表死鎖查詢及處理辦法
- 【原創】查詢原始MySQL死鎖ID薦MySql