sql处理数据库锁的存储过程分享

来源:asp之家 时间:2023-07-05 18:03:25 

邹建 2004.4

代码如下:


/*--调用示例
exec p_lockinfo1
--*/
alter proc p_lockinfo1
@kill_lock_spid bit=1, --是否杀掉死锁的进程,1 杀掉, 0 仅显示
@show_spid_if_nolock bit=1 --如果没有死锁的进程,是否显示正常进程信息,1 显示,0 不显示
as
declare @count int,@s nvarchar(max),@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(max),b Int,EventInfo nvarchar(max))
if @kill_lock_spid=1
begin
declare @spid varchar(max),@标志 varchar(max)
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(max))+')' 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

标签:数据库锁,存储过程
0
投稿

猜你喜欢

  • 解析Vue2.0双向绑定实现原理

    2024-06-05 15:29:32
  • MySQL存储IP地址的方法

    2024-01-23 06:01:02
  • 由 IE8 User-Agent 更新想到的

    2009-01-12 18:33:00
  • MySQL数据库基本SQL语句教程之高级操作

    2024-01-24 08:08:11
  • 用我喜欢的字体(Cufon)

    2009-12-11 18:51:00
  • Python os模块中的isfile()和isdir()函数均返回false问题解决方法

    2022-04-16 19:40:58
  • MySQL如何实现两张表取差集

    2024-01-18 21:00:03
  • js replace()去除代码中空格的实例

    2024-04-29 13:36:26
  • Django {{ MEDIA_URL }}无法显示图片的解决方式

    2023-06-20 07:42:22
  • 详解mybatis-plus实体类中字段和数据库中字段名不对应解决办法

    2024-01-26 23:59:19
  • 基于pandas中expand的作用详解

    2022-02-04 06:53:53
  • 解决VUE自定义拖拽指令时 onmouseup 与 click事件冲突问题

    2024-05-10 14:15:54
  • 利用Python实现智能合约的示例详解

    2022-04-06 00:45:23
  • Python实现绘制多角星实例

    2023-08-26 13:42:14
  • asp通过数组给您的文件列表排序

    2007-10-22 13:45:00
  • python多项式拟合之np.polyfit 和 np.polyld详解

    2022-09-12 13:32:49
  • python中global用法实例分析

    2023-09-16 08:33:47
  • ie9后浏览器fckeditor无法上传图片、弹出浮层内容不显示的解决方法

    2023-05-08 03:34:30
  • python使用隐式循环快速求和的实现示例

    2022-10-09 13:04:05
  • 想用户所想(感受亚马逊的设计)

    2007-08-26 17:09:00
  • asp之家 网络编程 m.aspxhome.com