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

推荐订阅源

Forbes - Security
Forbes - Security
A
Arctic Wolf
M
MIT News - Artificial intelligence
T
Threat Research - Cisco Blogs
T
The Exploit Database - CXSecurity.com
C
CERT Recently Published Vulnerability Notes
NISL@THU
NISL@THU
L
Lohrmann on Cybersecurity
Martin Fowler
Martin Fowler
A
About on SuperTechFans
P
Palo Alto Networks Blog
Project Zero
Project Zero
The GitHub Blog
The GitHub Blog
WordPress大学
WordPress大学
Blog — PlanetScale
Blog — PlanetScale
博客园_首页
大猫的无限游戏
大猫的无限游戏
Cisco Talos Blog
Cisco Talos Blog
P
Proofpoint News Feed
D
DataBreaches.Net
Cyberwarzone
Cyberwarzone
T
Tor Project blog
IT之家
IT之家
P
Proofpoint News Feed
Help Net Security
Help Net Security
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
CXSECURITY Database RSS Feed - CXSecurity.com
Microsoft Azure Blog
Microsoft Azure Blog
V2EX - 技术
V2EX - 技术
K
Kaspersky official blog
Hugging Face - Blog
Hugging Face - Blog
MongoDB | Blog
MongoDB | Blog
B
Blog
N
News and Events Feed by Topic
The Cloudflare Blog
S
Schneier on Security
P
Privacy & Cybersecurity Law Blog
T
The Blog of Author Tim Ferriss
Recorded Future
Recorded Future
Last Week in AI
Last Week in AI
The Last Watchdog
The Last Watchdog
Hacker News - Newest:
Hacker News - Newest: "LLM"
L
LangChain Blog
I
InfoQ
F
Full Disclosure
The Register - Security
The Register - Security
阮一峰的网络日志
阮一峰的网络日志
H
Hacker News: Front Page
V
V2EX

博客园 - 钛网络

真正部署中的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