惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - 钛网络

真正部署中的apache+tomcat负载均衡 GridView使用大全 打印机每天都要重新连接 数据库安装时挂起问题 在运行 32 位版本的 SQL Server 2000 SP4 的计算机上启用 AWE 时有些内存不可用 SQL Server 2000安装故障 关于asp.net 2.0的认知太少的问题 SQL 操作————简单查询初探 SQL 操作————不等联接 SQL SERVER中直接循环写入数据 SQL Server日期计算 SQL Server安全规划全攻略 SQL Server:创建索引视图 SQL Server 2000的安全配置 - 钛网络 Oracle大数据量分页通用存储过程 ASP.NET文件上传下载 - 钛网络 ASP.Net生成静态HTML页 2 ASP.NET上传文件的实例 ASP.NET封装的数据库访问基类
MSSQL处理死锁存储过程
钛网络 · 2009-05-21 · via 博客园 - 钛网络

MSSQL处理死锁存储过程


SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

/*********************************************************************************
过程名称: p_lockinfo
中文名称: 处理死锁
用    途: 查看当前进程,或死锁进程,并能自动杀掉死进程
数 据 库: 
概要说明: 调用上面的存储过程,检查并kill掉死锁问题就行了.  
  上面的存储过程还会列出引起死锁的详细(包括是那个语句引起的),再根据这些信息,去找对应的解决办法.

             语法信息:

输入参数:

  输出参数:

                                                                 调用举例:   
EXEC p_lockinfo 

外部联系:
    上级调用:
    下级调用:
    输 入 表:
    输 出 表:
功能修订:
    简要说明: 必须在master数据库中创建

修订记录:
      创 建 者: 童耿华
      创建时间: 2004-11-11

        修 改 者: 童耿华
      修改时间: 2004-11-11

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

  use master --必须在master数据库中创建  
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  

 
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,数据库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(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