`
llyer110
  • 浏览: 20346 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

解决数据库死锁脚本(转载)

 
阅读更多
--脚本1
use master
go
create procedure sp_who_lock
as
begin
declare @spid int,@bl int,
 @intTransactionCountOnEntry  int,
        @intRowcount    int,
        @intCountProperties   int,
        @intCounter    int

 create table #tmp_lock_who (
 id int identity(1,1),
 spid smallint,
 bl smallint)
 
 IF @@ERROR<>0 RETURN @@ERROR
 
 insert into #tmp_lock_who(spid,bl) select  0 ,blocked
   from (select * from sysprocesses where  blocked>0 ) a 
   where not exists(select * from (select * from sysprocesses where  blocked>0 ) b 
   where a.blocked=spid)
   union select spid,blocked from sysprocesses where  blocked>0

 IF @@ERROR<>0 RETURN @@ERROR 
  
-- 找到临时表的记录数
 select  @intCountProperties = Count(*),@intCounter = 1
 from #tmp_lock_who
 
 IF @@ERROR<>0 RETURN @@ERROR 
 
 if @intCountProperties=0
  select '现在没有阻塞和死锁信息' as message

-- 循环开始
while @intCounter <= @intCountProperties
begin
-- 取第一条记录
  select  @spid = spid,@bl = bl
  from #tmp_lock_who where Id = @intCounter 
 begin
  if @spid =0 
            select '引起数据库死锁的是: '+ CAST(@bl AS VARCHAR(10)) + '进程号,其执行的SQL语法如下'
 else
            select '进程号SPID:'+ CAST(@spid AS VARCHAR(10))+ '被' + '进程号SPID:'+ CAST(@bl AS VARCHAR(10)) +'阻塞,其当前进程执行的SQL语法如下'
 DBCC INPUTBUFFER (@bl )
 end 

-- 循环指针下移
 set @intCounter = @intCounter + 1
end

drop table #tmp_lock_who

return 0
end


--脚本2
exec sp_who_lock







--脚本3
use master
go

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_killspid]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_killspid]
GO

create proc p_killspid
@dbname varchar(200)    --要关闭进程的数据库名
as  
    declare @sql  nvarchar(500)  
    declare @spid nvarchar(20)

    declare #tb cursor for
        select spid=cast(spid as varchar(20)) from master..sysprocesses where dbid=db_id(@dbname)
    open #tb
    fetch next from #tb into @spid
    while @@fetch_status=0
    begin  
        exec('kill '+@spid)
        fetch next from #tb into @spid
    end  
    close #tb
    deallocate #tb
go

----脚本4
exec p_killspid 'dbname'

 

分享到:
评论

相关推荐

    sql数据库死锁查询工具

    查询阻塞进程SQL工具"可能是指特定的数据库管理工具或脚本,用于实时监控和诊断SQL数据库中的死锁和阻塞情况。这类工具通常提供界面友好的方式来查看和分析阻塞链路,定位问题源头,帮助管理员迅速解决问题。 总之...

    数据库死锁-解决死锁问题的三种办法

    针对这一问题,数据库管理系统通常采用三种策略来解决:预防死锁、检测死锁以及避免死锁。 ### 预防死锁 预防死锁是最为保守的策略,其核心思想是在事务开始前就尽可能避免死锁的发生。这主要通过以下几种方式实现...

    查看数据库死锁信息

    要解决这个问题,第一步是查看MySQL数据库的死锁日志。可以通过以下步骤进行操作: 1. 使用MySQL客户端工具或者命令行界面登录到MySQL服务器。在命令行中输入如下命令: ``` mysql -h &lt;数据库IP地址&gt; -P &lt;端口号&gt;...

    数据库 死锁的解决

    ### 数据库死锁解决方案详解 #### 一、死锁的本质及常见表现形式 在数据库管理领域,死锁问题一直是困扰开发者的重要难题之一。死锁的根本原因在于资源竞争,特别是当两个或多个进程试图以不同的顺序锁定同一组...

    数据库死锁原理实验

    SQLServer数据库死锁介绍,以及使用独立的事务模拟死锁的产生。

    获取数据库死锁信息过程

    一个经典的获取SQLSERVEr数据库死锁及引起锁定的进程的存储过程。执行时,必须具有数据库超级管理员权限。

    oracle数据库解决死锁

    Oracle数据库解决死锁 Oracle数据库解决死锁是指在Oracle数据库中出现的死锁问题,通过使用PL/SQL语句手动解决死锁问题。死锁是当多个事务在等待其他事务释放资源时,导致系统无法继续执行的现象。 在Oracle...

    解决Sybase数据库死锁

    ### 解决Sybase数据库死锁 #### Sybase数据库死锁概述 死锁是数据库管理系统中一个常见的问题,尤其是在高并发的环境下更为突出。Sybase数据库中的死锁通常发生在两个或多个事务试图锁定相同的资源(如表或记录)时...

    分布式数据库死锁检测算法分析

    分布式课堂上分享讲的ppt,简要介绍了死锁检测的基本概念,以及分布式数据库几种常见的死锁检测算法。

    较实用的ORACLE数据库死锁查杀

    死锁不仅会降低系统的整体性能,还可能导致某些重要事务长时间无法完成,严重情况下甚至需要重启数据库实例来解决问题。因此,掌握如何检测和解决Oracle中的死锁是非常重要的技能。 #### 二、死锁产生的原因及影响 ...

    数据库死锁,导致其他更新操作无法进行

    数据库死锁,导致其他更新操作无法进行 此时需要查询出该死锁的进程,将其杀死

    关于Oracle数据库死锁问题的研究与讨论

    关于Oracle数据库死锁问题的研究与讨论

    HIS系统SQL Server数据库死锁问题的分析与解决.pdf

    HIS系统SQL Server数据库死锁问题的分析与解决 SQL Server数据库是HIS系统中非常重要的一部分,负责存储和管理大量的医疗数据。然而,在实际应用中,SQL Server数据库可能会出现死锁问题,导致系统性能下降, thậm...

    数据库死锁监控.exe

    数据库死锁监控,自动刷新,右键杀死进程,查看存储历史执行时间等信息。

    数据库死锁检测工具

    为了解决这个问题,"数据库死锁检测工具"应运而生,它能够帮助数据库管理员识别并解决这种现象,确保数据库系统的稳定运行。 死锁的四个必要条件: 1. 互斥:一个资源在任何时候只能被一个事务使用,其他事务必须...

    MYSQL 数据库死锁

    MySQL数据库死锁是数据库系统中常见...总之,MySQL数据库中的死锁是多并发环境下难以避免的问题,但通过理解死锁的原理、InnoDB的处理机制以及优化代码逻辑,我们可以有效地预防和解决死锁,确保数据库系统的稳定运行。

    Oracle数据库死锁查询语句

    了解如何查询和解决Oracle数据库中的死锁对于数据库管理员来说至关重要。 首先,我们要明白死锁的四个必要条件: 1. **互斥**:资源不能同时被多个事务占用。 2. **请求与保持**:事务已经占有至少一个资源,但又...

    数据库死锁判断SQL

    判断数据库死锁的SQL,可以检测出死锁的语句和进程

    精通Navicat:高效解决数据库死锁困境

    5. 数据库开发:支持SQL查询、调试以及数据库脚本的编写和执行。 6. 云数据库支持:与多种云服务数据库兼容,如Amazon RDS、Microsoft Azure等。 因其强大的功能和易用性,成为许多数据库管理员和开发者的首选工具...

    查询SQL server数据库死锁存储过程

    这对于诊断和解决SQL Server中的死锁问题非常有帮助。此外,它还展示了如何使用SQL Server的系统表、函数和命令来实现这一目标。对于SQL Server管理员和开发人员来说,掌握这样的工具和技术是非常重要的。

Global site tag (gtag.js) - Google Analytics