查詢資料庫鎖表資訊

2021-10-08 19:39:27 字數 2620 閱讀 4621

/*******************************************

* 查詢資料庫鎖表資訊

*******************************************/

create proc [dbo].[sp_lockinfo]

@kill_lock_spid bit = 0,--是否殺掉死鎖的程序  1 殺掉 0 僅顯示

@show_spid_if_nolock bit = 0 --如果沒有死鎖的程序,是否顯示正常的 1 顯示 0 不顯示

asset nocount on 

declare @count int,

@s nvarchar(3000),

@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 into #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 > 1 

create table #t1(id int identity(1,1),a nvarchar(30),b int ,eventinfo nvarchar(4000))

if @kill_lock_spid = 1 

begin

declare @spid varchar(50),@標誌 varchar(50)

while @i <= @count

begin

select @spid = 程序id,@標誌 = 標誌 from #t where id = @i

insert #t1 exec ('dbcc inputbuffer('+@spid+')')

if @@rowcount = 0  insert #t1(a) values(null)

if @標誌='死鎖的程序' exec('kill '+@spid)

set @i= @i + 1 

endend

else

while @i <= @count

begin

select @s = 'dbcc inputbuffer('+cast(程序id as varchar)+')'  from #t where id = @i 

insert #t1 exec (@s)

if @@rowcount = 0 insert #t1(a) values(null)

set @i = @i + 1 

endselect a.*,c.client_net_address,程序的sql語句=b.eventinfo

from #t a join #t1 b on a.id = b.id join sys.dm_exec_connections c on a.程序id = c.session_id

order by 程序id

查詢資料庫鎖表

對於資料庫的造作,鎖表了怎麼辦?1.檢視當前系統中鎖表情況 select l.session id sid,s.serial l.locked mode,l.oracle username,l.os user name,s.machine,s.terminal,o.object name,s.log...

查詢資料庫鎖表sql

此儲存過程執行完可以看到資料庫鎖表情況 create procedure sp who lock asbegin declare spid int bl int inttransactioncountonentry int introwcount int intcountproperties int...

Oracle資料庫鎖表查詢

檢視資料庫最大連線數 select value from v parameter where name processes 更改資料庫連線數 alter system set processes 3000 scope spfile 檢視被鎖的表 select b.owner,b.object nam...