`

查杀死锁进程的

阅读更多

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO


/*--调用示例

exec p_lockinfo
--*/
ALTER proc p_lockinfo
@kill_lock_spid bit=1, --是否杀掉死锁的进程,1 杀掉, 0 仅显示
@show_spid_if_nolock bit=1 --如果没有死锁的进程,是否显示正常进程信息,1 显示,0 不显示
as
set nocount on
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 @@rowcount=0 insert #t1(a) values(null)
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)
if @@rowcount=0 insert #t1(a) values(null)
set @i=@i+1
end
select a.*,进程的SQL语句=b.EventInfo
from #t a join #t1 b on a.id=b.id
order by 进程ID
end
set nocount off

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

 

分享到:
评论

相关推荐

    如何解决Oracle杀死死锁进程

    解决 Oracle 杀死死锁进程 Oracle 杀死死锁进程是数据库管理员经常遇到的问题,本文将介绍解决 Oracle 杀死死锁进程的方法。 在 Oracle 中,死锁是指两个或多个会话在等待对方释放资源,从而导致互相阻塞的情况。...

    sqlserver查杀死锁

    ### SQL Server 查杀死锁 #### 一、理解死锁与锁定 在SQL Server中,死锁是指两个或多个事务在等待对方释放资源时形成的僵局。这种情况下,没有一方能够继续执行,直到管理员介入打破这一僵局。锁定则是指一个事务...

    sqlserver2000中如何自动杀死死锁进程.pdf

    根据提供的文件信息,文件名为“sqlserver2000中如何自动杀死死锁进程.pdf”,并且该文档描述了如何在SQL Server 2000环境下自动检测并解决死锁问题的详细过程。以下将详细阐述该文件中的知识点。 1. 死锁的定义与...

    SQLServler自动杀死死锁进程

    "SQLServer自动杀死死锁进程"这一话题旨在探讨如何配置SQL Server来自动检测并解决这些死锁情况,以避免系统阻塞和性能下降。 1. **死锁的基本概念**: 死锁是指两个或多个事务在执行过程中,因争夺资源而造成的一...

    SQL SERVER 2008 R2 查看和杀死死锁进程

    SQL SERVER 2008 R2 查看和杀死死锁进程。数据库进程死锁是一个很严重的问题,快速定位到死锁的进程尤为重要。

    自动杀掉SQLSERVER中的死锁进程

    本过程自动捕捉SQLSERVER中的死锁进程并且自动杀掉

    ORACLE如何杀掉带锁的进程.txt

    本文将详细介绍如何在Oracle环境下识别并杀死带有锁定状态的进程。 #### 一、查询锁定对象的进程 首先,我们需要通过查询来找到当前系统中处于锁定状态的对象及其关联的会话信息。这一步骤非常重要,因为只有准确...

    VB锁进程进程快照,Kill多的进程,可以设定你不想KIL了的进程自己改

    在Windows操作系统中,进程是执行中的程序实例,而“锁进程”通常指的是防止某个进程被意外终止或被其他程序杀死。进程快照则是一个特定时间点上系统所有活动进程的状态记录,它可以帮助开发者分析系统资源的使用...

    杀死oracle死锁进程

    解决Oracle数据库死锁问题,查询出数据库所有死锁,并杀死所有的死锁,解决程序运行问题;

    oracle杀僵死进程

    一旦确定了需要处理的进程,就可以使用`ALTER SYSTEM KILL SESSION`命令来杀死该会话。例如,如果SID为303的会话存在问题,可以执行如下命令: ```sql select 'ALTER SYSTEM KILL SESSION ''' || sid || ',' || ...

    sql2000安全设置,SA改名方法,sql2000杀锁死进程.

    ### SQL2000杀锁死进程 在SQL Server 2000中,有时会出现某个进程长时间运行导致其他进程无法正常执行的情况。可以通过以下步骤终止这些锁定的进程: 1. **获取锁信息**: - 使用`DBCC OPENTRAN`命令查看当前所有...

    查看oracle进程,杀进程pb源程序

    本文将深入探讨如何使用PB(PowerBuilder)源程序来查看Oracle进程并进行必要的操作,如杀死进程。 首先,我们要了解Oracle进程的概念。在Oracle数据库中,进程主要分为用户进程和服务器进程。用户进程是由数据库...

    oracle锁表查询

    - 在决定杀死某个会话之前,应该先判断这个会话是否真的导致了性能问题。可以查看会话的SQL语句,评估其执行时间、CPU使用情况等。 2. **杀死会话后可能产生的后果** - 杀死一个会话可能会导致正在进行的事务回滚...

    oracle查询死锁语句

    oracle查询死锁语句,并能根据根据ID值杀死锁表的进程!

    怎样查找锁与锁等待及杀特定会话

    在Windows平台上,可以使用Oracle提供的工具`orakill`来杀死特定的线程(实际上是Oracle进程)。而在Linux/Unix系统中,可以直接使用`kill`命令来终止数据库进程对应的OS进程。 #### 四、总结 在Oracle数据库中,...

    oracle常见的锁查询和处理

    解决锁冲突通常包括强制回滚事务、杀死会话进程或者调整应用程序逻辑以减少并发冲突。强制回滚可以通过`ALTER SYSTEM KILL SESSION`命令实现,但这种方法应谨慎使用,因为它可能会影响业务的正常运行。更好的方式是...

    杀死正在使用数据库的线程

    "杀死正在使用数据库的线程"是一个关键的操作,用于恢复数据库的正常运行和服务性能。本文将深入探讨这个主题,讲解如何在不同的数据库系统中进行线程的管理和终止。 1. **MySQL中的线程管理** 在MySQL中,可以...

    SqlServer查询和Kill进程死锁的语句

    杀死锁和进程;查看锁信息 --检测死锁 --如果发生死锁了,我们怎么去检测具体发生死锁的是哪条SQL语句或存储过程? --这时我们可以使用以下存储过程来检测,就可以查出引起死锁的进程和SQL语句。SQL S

    Oracle 查询死锁并解锁的终极处理方法

    如果这不足以解决问题,可以进一步在操作系统层面杀死对应的进程。在处理这类问题时,必须谨慎操作,因为误杀其他重要进程可能对数据库造成严重后果。了解并熟练掌握这些技巧,对于优化Oracle数据库的性能和稳定性至...

Global site tag (gtag.js) - Google Analytics