一、破坏死锁的四个必要条件

二、如果发生死锁,通过SQL语句关闭当前发生死锁的数据库进程

USE master --不能用 KILL 来取消您自己的进程。

GO
/****** Object:  StoredProcedure [dbo].[p_Centaline_Who_Lock]    Script Date: 03/23/2016 11:54:38 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
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

调用

exec p_killspid  '需要关闭进程的数据库名'  当强制关闭进程后,死锁也就没有了

二、查看当前数据库下锁的情况

CREATE Table #Who(

spid int,

ecid int,

[status] nvarchar(50),

loginname nvarchar(50),

hostname nvarchar(50),

blk int,

dbname nvarchar(50),

cmd nvarchar(50)

--request_ID int

);

CREATE Table #Lock(

spid int,

dpid int,

[objid] int,

indld int,

[Type] nvarchar(20),

[Resource] nvarchar(50),

Mode nvarchar(10),

[Status] nvarchar(10)

);

INSERT INTO #Who

EXEC sp_who active  --看哪个引起的阻塞,blk

INSERT INTO #Lock

EXEC sp_lock  --看锁住了那个资源id,objid

DECLARE @DBName nvarchar(20);

SET @DBName='KF-BJAgencyAtt'

SELECT #Who.* FROM #Who WHERE dbname=@DBName

SELECT #Lock.* FROM #Lock

JOIN #Who

ON #Who.spid=#Lock.spid

AND dbname=@DBName;

--最后发送到SQL Server的语句

DECLARE crsr Cursor FOR

SELECT blk FROM #Who WHERE dbname=@DBName AND blk<>0;

DECLARE @blk int;

open crsr;

FETCH NEXT FROM crsr INTO @blk;

WHILE (@@FETCH_STATUS = 0)

BEGIN

dbcc inputbuffer(@blk);

FETCH NEXT FROM crsr INTO @blk;

END

close crsr;

DEALLOCATE crsr;

--锁定的资源

SELECT #Who.spid,hostname,objid,[type],mode,object_name(objid) as objName FROM #Lock

JOIN #Who

ON #Who.spid=#Lock.spid

AND dbname=@DBName

WHERE objid<>0;

--SELECT * FROM   #Lock

DROP Table #Who;

DROP Table #Lock;

查看死锁实例

BEGIN tran
        UPDATE B SET age=age+1
        WaitFor Delay '00:00:05';
        SELECT * FROM A     --执行完之后有结果

在新建一个查询,执行下面sql语句

BEGIN tran
          UPDATE a SET dd=dd+1

WaitFor Delay '00:00:05';
          SELECT * FROM B

ROLLBACK tran   --当执行的时候会一直执行下去

查看出现死锁语句

转载于:https://www.cnblogs.com/starts/p/5311936.html

数据库死锁的解决办法相关推荐

  1. 数据库死锁及解决办法

    文章目录 1. 事务之间对资源访问顺序的交替 2. 并发修改同一记录 3. 索引不当导致的死锁 目前,我们已经探讨了许多关于数据库锁的问题,锁能够有效地解决并发的问题,但这也带来了一个严重的缺点,那就 ...

  2. 数据库死锁及解决方法

    数据库死锁及解决方法 参考文章: (1)数据库死锁及解决方法 (2)https://www.cnblogs.com/wezheng/p/8366029.html 备忘一下.

  3. restore还原不同名称的数据库_Sql Server 备份还原失败错误ERROR:3145(备份集中的数据库备份与现有的数据库不同)及解决办法...

    一.前言 SQL Server 备份和还原全攻略,里面包括了通过SSMS操作还原各种备份文件的图形指导,SQL Server 数据库最小宕机迁移方案,里面使用SQL脚本(T-SQL)完成完全备份.差异 ...

  4. ORA-01109:数据库未打开 解决办法

    ORA-01109:数据库未打开 解决办法 直接上办法 先来张操作截图 具体操作步骤 问题解读 直接上办法 先来张操作截图 具体操作步骤 1.打开sqlplus.exe 2.请输入用户名: 用户名 a ...

  5. DreamMail无法打开邮件数据库问题的解决办法

    DreamMail无法打开邮件数据库问题的解决办法 (http://blog.csdn.net/kingspider/) DreamMail(http://www.dreammail.org/)是一个 ...

  6. mysql远程无法登陆_无法远程登陆MySQL数据库几种解决办法

    无法远程登入MySQL数据库的解决办法一: 尝试用MySQL Adminstrator GUI Tool登入MySQL Server,Server却回复错误讯息:Host '60-248-32-13. ...

  7. win10远程桌面连接报错(出现身份验证错误。要求的函数不受支持。CredSSP 加密数据库修正)解决办法

    某天使用win10系统进行远程桌面连接时,出现了连接失败的情况,提示: 出现身份验证错误. 要求的函数不受支持 这可能是由于 CredSSP 加密数据库修正. 多次重试,问题依旧,而以往是可以正常进行 ...

  8. 连接阿里云服务器上MySQL数据库失败的解决办法

    一 数据库配置,MySQL默认是不能远程连接 只需要在/etc/mysql下的my.cnf文件里注释掉bind-address = 127.0.0.1 就可以了,如图: 二 安全组设置 阿里云服务器默 ...

  9. SqlServer数据库置疑的解决办法

    导读: /*--重置置疑状态 1.系统方法: 如果 sql server 因为磁盘驱动器不再有可用空间,而不能完成数据库的恢复, 那么 microsoft® sql server™ 2000 会返回错 ...

最新文章

  1. Mysql技术内幕——InnoDB存储引擎
  2. c语言读h5文件,我利用C语言实现SHA-256算法,需要从一个txt文件中读出数据并把...
  3. 使用 Cordova 打包 app
  4. C/C++运行时库 解释
  5. 面对人性,有的选择向左,有的向右
  6. java中有stdin_在java中听stdin的后台进程
  7. 安装JAVA8要登录_JDK8的安装及环境配置
  8. 转:探索 AIX 6:在 AIX 6 上配置 iSCSI Target
  9. mongodb数据库导出备份
  10. 使用 HTML5 canvas 进行 Web 绘图
  11. Python+tkinter动态创建与销毁组件小案例
  12. Java harddisk pc cpu,java获得cpu使用率
  13. 卡巴斯基2014激活码授权文件KEY
  14. 使用鸿蒙原生做游戏适配问题
  15. 解决多次点击出现蓝色背景
  16. 怎么安装光盘并重新启动计算机,如何用光盘重新安装电脑系统
  17. VS在新建或者导入项目时出现“不支持此接口(Exception from HRESULT:0x80004002 (E_NONINTERFACE))”的解决办法
  18. Second season sixth episode,Chandler and Joey lost Ross‘s baby???!!!
  19. php mysql插入的数据有引号,PHP引号转义中解决POST,GET,Mysql数据自动转义问题
  20. 面试官刁难:Java字符串可以引用传递吗?

热门文章

  1. DOM操作表格的各种属性[z]
  2. Python算法:动态规划
  3. 算法之排列与组合算法
  4. 数单词 (AC自动机模板题)
  5. mysql建表必须使用主键吗
  6. 常考数据结构与算法:最长回文子串
  7. 常考数据结构与算法----给定一个二叉树和一个值 sum,请找出所有的根节点到叶子节点的节点值之和等于sum 的路径,
  8. 线程:volatile关键字
  9. java:基本数据类型
  10. Zookeeper详细参数解析zoo.cfg文件