use master
gocreate proc killspid (@dbname varchar(20))
as begin
declare @sql nvarchar(500),@temp varchar(1000)
declare @spid int
set @sql='declare getspid cursor for
select spid from sysprocesses where dbid=db_id('''+@dbname+''')'
exec (@sql)
open getspid
fetch next from getspid into @spid
while @@fetch_status<>-1
begin
set @temp='kill '+rtrim(@spid)
exec(@temp)
fetch next from getspid into @spid
end
close getspid
deallocate getspid
end
--用法
use master
exec killspid '資料庫名'
死鎖可以查一下:
1:sp_who 或 sp_who2
2: select * from sysprocesses where blocked <> 0
3: 企業管理器->伺服器->管理工具->活動->當前活動 然後把他kill掉。。。
4:sql事件探查器,監控一下,看主要是那些處理引起的死鎖.然後做相應的處理.
用事件探查器new乙個trace,監視一下造成你sqlserver停頓的情況。。。
最好的辦法還是檢查一下引起鎖的原因,一般是由你的**引起的。
sql事件探查器用法
開始--程式--ms sqlserver
--事件探察器(sql profiler)
--檔案
--新建
--設定跟蹤的專案...
--然後資料庫的呼叫情況就會顯示出
--檢視鎖資訊
select 程序id=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,rsc_objid,rsc_indid
from master..syslockinfo
死鎖的產生 條件 和解鎖
所謂死鎖 是指兩個或兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去.此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等竺的程序稱為死鎖程序.由於資源占用是互斥的,當某個程序提出申請資源後,使得有關程序在無外力協助下,永遠分配不到必需的資源而...
資料庫2008死鎖解鎖指令碼
儲存建立 create proc p lockinfo kill lock spid bit 1,是否殺掉死鎖的程序,1 殺掉,0 僅顯示 show spid if nolock bit 1 如果沒有死鎖的程序,是否顯示正常程序資訊,1 顯示,0 不顯示 asdeclare count int,s ...
死鎖及死鎖的解決
如果一組程序中的每乙個程序都在等待僅由該組程序中的其它程序才能引發的事件,那麼該組程序是死鎖的,1 競爭不可搶占性資源。當系統把某資源分配給該程序後,就不能將它強行收回,只能在程序用完後自行釋放。2 競爭可消耗資源。當系統中供多個程序共享的資源如印表機,公用佇列等,其數目不足以滿足諸程序的需要時,會...