對(duì)一個(gè)加鎖的表進(jìn)行解鎖
發(fā)布時(shí)間:2008-12-20 00:32:23 作者:佚名
我要評(píng)論

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
/*--處理死鎖
查看當(dāng)前進(jìn)程,或死鎖進(jìn)程,并能自
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
/*--處理死鎖
查看當(dāng)前進(jìn)程,或死鎖進(jìn)程,并能自動(dòng)殺掉死進(jìn)程
因?yàn)槭轻槍?duì)死的,所以如果有死鎖進(jìn)程,只能查看死鎖進(jìn)程
當(dāng)然,你可以通過參數(shù)控制,不管有沒有死鎖,都只查看死鎖進(jìn)程
感謝: caiyunxia,jiangopen 兩位提供的參考信息
--鄒建 2004.4--*/
/*--調(diào)用示例
exec p_lockinfo
--*/
create proc p_lockinfo
@kill_lock_spid bit=1, --是否殺掉死鎖的進(jìn)程,1 殺掉, 0 僅顯示
@show_spid_if_nolock bit=1 --如果沒有死鎖的進(jìn)程,是否顯示正常進(jìn)程信息,1 顯示,0 不顯示
as
declare @count int,@s nvarchar(1000),@i int
select id=identity(int,1,1),標(biāo)志,
進(jìn)程ID=spid,線程ID=kpid,塊進(jìn)程ID=blocked,數(shù)據(jù)庫ID=dbid,
數(shù)據(jù)庫名=db_name(dbid),用戶ID=uid,用戶名=loginame,累計(jì)CPU時(shí)間=cpu,
登陸時(shí)間=login_time,打開事務(wù)數(shù)=open_tran, 進(jìn)程狀態(tài)=status,
工作站名=hostname,應(yīng)用程序名=program_name,工作站進(jìn)程ID=hostprocess,
域名=nt_domain,網(wǎng)卡地址=net_address
into #t from(
select 標(biāo)志='死鎖的進(jìn)程',
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 標(biāo)志='正常的進(jìn)程',
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),@標(biāo)志 varchar(10)
while @i<=@count
begin
select @spid=進(jìn)程ID,@標(biāo)志=標(biāo)志 from #t where id=@i
insert #t1 exec('dbcc inputbuffer('+@spid+')')
if @標(biāo)志='死鎖的進(jìn)程' exec('kill '+@spid)
set @i=@i+1
end
end
else
while @i<=@count
begin
select @s='dbcc inputbuffer('+cast(進(jìn)程ID as varchar)+')' from #t where id=@i
insert #t1 exec(@s)
set @i=@i+1
end
select a.*,進(jìn)程的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
/*--處理死鎖
查看當(dāng)前進(jìn)程,或死鎖進(jìn)程,并能自動(dòng)殺掉死進(jìn)程
因?yàn)槭轻槍?duì)死的,所以如果有死鎖進(jìn)程,只能查看死鎖進(jìn)程
當(dāng)然,你可以通過參數(shù)控制,不管有沒有死鎖,都只查看死鎖進(jìn)程
感謝: caiyunxia,jiangopen 兩位提供的參考信息
--鄒建 2004.4--*/
/*--調(diào)用示例
exec p_lockinfo
--*/
create proc p_lockinfo
@kill_lock_spid bit=1, --是否殺掉死鎖的進(jìn)程,1 殺掉, 0 僅顯示
@show_spid_if_nolock bit=1 --如果沒有死鎖的進(jìn)程,是否顯示正常進(jìn)程信息,1 顯示,0 不顯示
as
declare @count int,@s nvarchar(1000),@i int
select id=identity(int,1,1),標(biāo)志,
進(jìn)程ID=spid,線程ID=kpid,塊進(jìn)程ID=blocked,數(shù)據(jù)庫ID=dbid,
數(shù)據(jù)庫名=db_name(dbid),用戶ID=uid,用戶名=loginame,累計(jì)CPU時(shí)間=cpu,
登陸時(shí)間=login_time,打開事務(wù)數(shù)=open_tran, 進(jìn)程狀態(tài)=status,
工作站名=hostname,應(yīng)用程序名=program_name,工作站進(jìn)程ID=hostprocess,
域名=nt_domain,網(wǎng)卡地址=net_address
into #t from(
select 標(biāo)志='死鎖的進(jìn)程',
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 標(biāo)志='正常的進(jìn)程',
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),@標(biāo)志 varchar(10)
while @i<=@count
begin
select @spid=進(jìn)程ID,@標(biāo)志=標(biāo)志 from #t where id=@i
insert #t1 exec('dbcc inputbuffer('+@spid+')')
if @標(biāo)志='死鎖的進(jìn)程' exec('kill '+@spid)
set @i=@i+1
end
end
else
while @i<=@count
begin
select @s='dbcc inputbuffer('+cast(進(jìn)程ID as varchar)+')' from #t where id=@i
insert #t1 exec(@s)
set @i=@i+1
end
select a.*,進(jìn)程的SQL語句=b.EventInfo
from #t a join #t1 b on a.id=b.id
end
go
相關(guān)文章
Access可以設(shè)置數(shù)據(jù)庫密碼嗎?Access設(shè)置數(shù)據(jù)庫密碼教程
Access是由微軟發(fā)布的關(guān)聯(lián)式數(shù)據(jù)庫管理系統(tǒng)。它結(jié)合了 Microsoft Jet Database Engine 和 圖形用戶界面兩項(xiàng)特點(diǎn),是 Microsoft Office 的系統(tǒng)程式之一,下面跟著小編來學(xué)習(xí)2023-02-24Access如何導(dǎo)出access表格數(shù)據(jù)?Access導(dǎo)出access表格數(shù)據(jù)教程
Access是由微軟發(fā)布的關(guān)聯(lián)式數(shù)據(jù)庫管理系統(tǒng)。它結(jié)合了 Microsoft Jet Database Engine 和 圖形用戶界面兩項(xiàng)特點(diǎn),是 Microsoft Office 的系統(tǒng)程式之一。下面來看看在這里怎2023-02-24Access如何創(chuàng)建數(shù)據(jù)庫?Access創(chuàng)建數(shù)據(jù)庫教程
access是由微軟發(fā)布的一款關(guān)系數(shù)據(jù)庫管理系統(tǒng),讓用戶擁有強(qiáng)大的數(shù)據(jù)處理功能,主要應(yīng)用于網(wǎng)站數(shù)據(jù)存儲(chǔ)、軟件數(shù)據(jù)存儲(chǔ)等,下面來看看怎么去創(chuàng)建數(shù)據(jù)庫吧2022-10-19Access如何設(shè)置單元格居中?Access設(shè)置單元格居中方法
Access數(shù)據(jù)庫全稱Microsoft Office Access,是由微軟開發(fā)的一款關(guān)系數(shù)據(jù)庫管理系統(tǒng),在軟件中大家知道怎么去設(shè)置單元格居中嗎?一起來看看2022-10-19- access是由微軟發(fā)布的一款關(guān)系數(shù)據(jù)庫管理系統(tǒng),主要應(yīng)用于小型企業(yè),或者大公司的部門,今天咱們就來學(xué)習(xí)下在access中怎么隱藏表吧2022-11-04
Access數(shù)據(jù)庫圖片數(shù)據(jù)怎么轉(zhuǎn)換成位圖?
Access數(shù)據(jù)庫圖片數(shù)據(jù)怎么轉(zhuǎn)換成位圖?Access數(shù)據(jù)庫中所有圖片需要轉(zhuǎn)成位圖,該怎么操作呢?下面我們就來看看詳細(xì)的教程,需要的朋友可以參考下2021-03-29access窗體中怎么添加條形碼? access條形碼生成教程
access窗體中怎么添加條形碼? access窗體中想要插入條形碼,該怎么插入呢?下面我們就來看看access條形碼生成教程,需要的朋友可以參考下2021-02-24access數(shù)據(jù)庫怎么實(shí)現(xiàn)過期日期提醒? access到期提醒的方法
access數(shù)據(jù)庫怎么實(shí)現(xiàn)過期日期提醒?access數(shù)據(jù)庫表格中想要制作一個(gè)過期提醒,該怎么制作這個(gè)功能呢?下面我們就來看看詳細(xì)的教程,需要的朋友可以參考下2021-02-24Access數(shù)據(jù)表怎么顯示文檔選項(xiàng)卡?
Access數(shù)據(jù)表怎么顯示文檔選項(xiàng)卡?Access數(shù)據(jù)庫中的表格想要顯示文檔選項(xiàng)卡,該怎么設(shè)置呢?下面我們就來看看詳細(xì)的教程,需要的朋友可以參考下2021-02-08access表重命名后沒變?cè)趺崔k? access數(shù)據(jù)庫表重命名的技巧
access表重命名后沒變?cè)趺崔k?access數(shù)據(jù)庫中的數(shù)據(jù)表想要進(jìn)行重命名,該怎么有效的重命名呢?下面我們就來看看access數(shù)據(jù)庫表重命名的技巧,需要的朋友可以參考下2021-01-13