数据库Sqlserver、Oracle清除死锁

产生死锁的原因:两个事务同时访问被对方锁住的资源,造成双方都得不到自己想要的东西。

一、SqlServer

1、查询被锁表

      SELECT request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName 
      FROM sys.dm_tran_locks
      WHERE resource_type='OBJECT'
2、哪个进程锁了哪张表 

      EXEC sp_who2 '54'  //spid
3、清除锁
      DECLARE @spid int
      SET @spid = 54 --锁表进程
      DECLARE @sql varchar(1000)
      SET @sql='kill '+cast(@spid as varchar)
      EXEC (@sql)

二、oracle

1、查询锁
      SELECT b.username, b.sid, b.serial#, logon_time
      FROM v$locked_object a, v$session b
      WHERE a.session_id = b.sid
      ORDER BY b.logon_time;
2、杀掉他  
      ALTER system kill session 'sid,serial#';  --替换掉sid 和serial#

发布了65 篇原创文章 · 获赞 28 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_26900081/article/details/88316260