SQL Server 2000 中使用指令碼或procedure查詢dead lock及kill
/*
在SQL Query Analyzer 如何執行:
exec master.dbo.p_lockinfo 0,0 ---顯示死鎖的程式,不顯示正常的程式
exec master.dbo.p_lockinfo 1,0 ---殺死死鎖的程式,不顯示正常的程式
*/
/* 在master資料庫中建立如下的procedure,並賦予某些使用者執行許可權 */
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()
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
GO
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-600663/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL Server如何查詢鎖已經kill lockSQLServer
- SQL Server 2000 死鎖(dead lock) 問題解決SQLServer
- SQL Server 2000 中查詢優化器使用的統計SQLServer優化
- 使用SQL批量查詢出建立使用者及許可權指令碼SQL指令碼
- SQL Server解惑——查詢條件IN中能否使用變數SQLServer變數
- SQL Server 2000 的分頁查詢(儲存過程)SQLServer儲存過程
- SQL Server中Table字典資料的查詢SQL示例程式碼SQLServer
- SQL Server 查詢分解SQLServer
- 使用批處理指令碼或SHELL配合SQL指令碼指令碼SQL
- 分頁procedure (SQL Server)SQLServer
- 查詢等待事件及處理指令碼事件指令碼
- SQL Server 2000中的觸發器使用SQLServer觸發器
- SQL Server中對比表數量,索引數量及procedure數量SQLServer索引
- Dead lock - oracleOracle
- SQL Server遞迴查詢SQLServer遞迴
- SQL SERVER 查詢鎖資訊SQLServer
- SQL server跨庫查詢SQLServer
- Sql Server系列:子查詢SQLServer
- SQL server 查詢語句SQLServer
- SQL Server 分散式查詢SQLServer分散式
- SQL SERVER 動態查詢SQLServer
- SQL Server 跨域查詢SQLServer跨域
- SQL Server2000中執行一個SQL, 在lock上發現自己鎖自己SQLServer
- Sql Server 使用CTE實現遞迴查詢SQLServer遞迴
- SQL Server停止指令碼SQLServer指令碼
- SQL Server查詢速度慢原因及優化方法SQLServer優化
- 有關表空間查詢的sql指令碼SQL指令碼
- Oracle中的死鎖Dead Lock(一)Oracle
- Oracle中的死鎖Dead Lock(二)Oracle
- Sql server 國際化的支援,查詢亂碼SQLServer
- 在ubuntu中查詢與某指令碼或某裝置相關的程序Ubuntu指令碼
- sqlserver 查詢使用者角色指令碼SQLServer指令碼
- [zt] 使用SQL Server中的Linked Server及Remote ServerSQLServerREM
- 使用SSMS連線和查詢 SQL Server 例項SSMSQLServer
- sql-server高階查詢SQLServer
- SQL Server阻塞查詢語句SQLServer
- Sql Server系列:巢狀查詢SQLServer巢狀
- SQL Server 查詢優化功能SQLServer優化