對一個加鎖的表進行解鎖
發(fā)布時間:2008-12-20 00:32:23 作者:佚名
我要評論
use master --必須在master數(shù)據(jù)庫中創(chuàng)建
go
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_lockinfo]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_lockinfo]
GO
/*--處理死鎖
查看當前進程,或死鎖進程,并能自
use master --必須在master數(shù)據(jù)庫中創(chuàng)建
go
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_lockinfo]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_lockinfo]
GO
/*--處理死鎖
查看當前進程,或死鎖進程,并能自動殺掉死進程
因為是針對死的,所以如果有死鎖進程,只能查看死鎖進程
當然,你可以通過參數(shù)控制,不管有沒有死鎖,都只查看死鎖進程
感謝: caiyunxia,jiangopen 兩位提供的參考信息
--鄒建 2004.4--*/
/*--調用示例
exec p_lockinfo
--*/
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,數(shù)據(jù)庫ID=dbid,
數(shù)據(jù)庫名=db_name(dbid),用戶ID=uid,用戶名=loginame,累計CPU時間=cpu,
登陸時間=login_time,打開事務數(shù)=open_tran, 進程狀態(tài)=status,
工作站名=hostname,應用程序名=program_name,工作站進程ID=hostprocess,
域名=nt_domain,網(wǎng)卡地址=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<=@count
begin
select @spid=進程ID,@標志=標志 from #t where id=@i
insert #t1 exec('dbcc inputbuffer('+@spid+')')
if @標志='死鎖的進程' exec('kill '+@spid)
set @i=@i+1
end
end
else
while @i<=@count
begin
select @s='dbcc inputbuffer('+cast(進程ID as varchar)+')' from #t where id=@i
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
go
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_lockinfo]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_lockinfo]
GO
/*--處理死鎖
查看當前進程,或死鎖進程,并能自動殺掉死進程
因為是針對死的,所以如果有死鎖進程,只能查看死鎖進程
當然,你可以通過參數(shù)控制,不管有沒有死鎖,都只查看死鎖進程
感謝: caiyunxia,jiangopen 兩位提供的參考信息
--鄒建 2004.4--*/
/*--調用示例
exec p_lockinfo
--*/
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,數(shù)據(jù)庫ID=dbid,
數(shù)據(jù)庫名=db_name(dbid),用戶ID=uid,用戶名=loginame,累計CPU時間=cpu,
登陸時間=login_time,打開事務數(shù)=open_tran, 進程狀態(tài)=status,
工作站名=hostname,應用程序名=program_name,工作站進程ID=hostprocess,
域名=nt_domain,網(wǎng)卡地址=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<=@count
begin
select @spid=進程ID,@標志=標志 from #t where id=@i
insert #t1 exec('dbcc inputbuffer('+@spid+')')
if @標志='死鎖的進程' exec('kill '+@spid)
set @i=@i+1
end
end
else
while @i<=@count
begin
select @s='dbcc inputbuffer('+cast(進程ID as varchar)+')' from #t where id=@i
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
相關文章

Access可以設置數(shù)據(jù)庫密碼嗎?Access設置數(shù)據(jù)庫密碼教程
Access是由微軟發(fā)布的關聯(lián)式數(shù)據(jù)庫管理系統(tǒng)。它結合了 Microsoft Jet Database Engine 和 圖形用戶界面兩項特點,是 Microsoft Office 的系統(tǒng)程式之一,下面跟著小編來學習2023-02-24
Access如何導出access表格數(shù)據(jù)?Access導出access表格數(shù)據(jù)教程
Access是由微軟發(fā)布的關聯(lián)式數(shù)據(jù)庫管理系統(tǒng)。它結合了 Microsoft Jet Database Engine 和 圖形用戶界面兩項特點,是 Microsoft Office 的系統(tǒng)程式之一。下面來看看在這里怎2023-02-24
Access如何創(chuàng)建數(shù)據(jù)庫?Access創(chuàng)建數(shù)據(jù)庫教程
access是由微軟發(fā)布的一款關系數(shù)據(jù)庫管理系統(tǒng),讓用戶擁有強大的數(shù)據(jù)處理功能,主要應用于網(wǎng)站數(shù)據(jù)存儲、軟件數(shù)據(jù)存儲等,下面來看看怎么去創(chuàng)建數(shù)據(jù)庫吧2022-10-19
Access如何設置單元格居中?Access設置單元格居中方法
Access數(shù)據(jù)庫全稱Microsoft Office Access,是由微軟開發(fā)的一款關系數(shù)據(jù)庫管理系統(tǒng),在軟件中大家知道怎么去設置單元格居中嗎?一起來看看2022-10-19
access是由微軟發(fā)布的一款關系數(shù)據(jù)庫管理系統(tǒng),主要應用于小型企業(yè),或者大公司的部門,今天咱們就來學習下在access中怎么隱藏表吧2022-11-04
Access數(shù)據(jù)庫圖片數(shù)據(jù)怎么轉換成位圖?
Access數(shù)據(jù)庫圖片數(shù)據(jù)怎么轉換成位圖?Access數(shù)據(jù)庫中所有圖片需要轉成位圖,該怎么操作呢?下面我們就來看看詳細的教程,需要的朋友可以參考下2021-03-29
access窗體中怎么添加條形碼? access條形碼生成教程
access窗體中怎么添加條形碼? access窗體中想要插入條形碼,該怎么插入呢?下面我們就來看看access條形碼生成教程,需要的朋友可以參考下2021-02-24
access數(shù)據(jù)庫怎么實現(xiàn)過期日期提醒? access到期提醒的方法
access數(shù)據(jù)庫怎么實現(xiàn)過期日期提醒?access數(shù)據(jù)庫表格中想要制作一個過期提醒,該怎么制作這個功能呢?下面我們就來看看詳細的教程,需要的朋友可以參考下2021-02-24
Access數(shù)據(jù)表怎么顯示文檔選項卡?Access數(shù)據(jù)庫中的表格想要顯示文檔選項卡,該怎么設置呢?下面我們就來看看詳細的教程,需要的朋友可以參考下2021-02-08
access表重命名后沒變怎么辦? access數(shù)據(jù)庫表重命名的技巧
access表重命名后沒變怎么辦?access數(shù)據(jù)庫中的數(shù)據(jù)表想要進行重命名,該怎么有效的重命名呢?下面我們就來看看access數(shù)據(jù)庫表重命名的技巧,需要的朋友可以參考下2021-01-13







