ORACLE查找并解除死锁进程

  ORACLE查找并解除死锁进程

1、查找死锁进程

select /*+RULE*/v$lock.sid,
decode(v$lock.type,
        'MR', 'Media Recovery',
        'RT','Redo Thread',
        'UN','User Name',
        'TX', 'Transaction',
        'TM', 'DML',
        'UL', 'PL/SQL User Lock',
        'DX', 'Distributed Xaction',
        'CF', 'Control File',
        'IS', 'Instance State',
        'FS', 'File Set',
        'IR', 'Instance Recovery',
        'ST', 'Disk Space Transaction',
        'TS', 'Temp Segment',
        'IV', 'Library Cache Invalida-tion',
        'LS', 'Log Start or Switch',
        'RW', 'Row Wait',
        'SQ', 'Sequence Number',
        'TE', 'Extend Table',
        'TT', 'Temp Table',
        'Unknown') LockType,
rtrim(object_type) || ' ' || rtrim(owner) || '.' || object_name object_name,
decode(lmode,   0, 'None',
                1, 'Null',
                2, 'Row-S',
                3, 'Row-X',
                4, 'Share',
                5, 'S/Row-X',
                6, 'Exclusive',        'Unknown') LockMode,
decode(request, 0, 'None',
                1, 'Null',
                2, 'Row-S',
                3, 'Row-X',
                4, 'Share',
                5, 'S/Row-X',
                6, 'Exclusive', 'Unknown') RequestMode,
ctime, block b
from v$lock, all_objects
where sid > 8
and v$lock.id1 = all_objects.object_id

如果查询结果有记录表明有锁

2、这个SQL可用来生成杀死死锁进程的SQL

select /*+RULE*/
 'alter system kill session ''' || a.sid || ',' || b.serial# || ''';'
 from v$lock a, all_objects c, v$session b
 where a.sid > 8
   and a.id1 = c.object_id
   and a.sid = b.sid;

select /*+RULE*/
 'alter system kill session ''' || a.sid || ',' || b.serial# || ''';'
 from v$lock a, v$session b
 where a.sid > 8
   and a.sid = b.sid;

3、把第二步的查询结果导出为脚本,在SQLPLUS中执行该脚本即可解除死锁。

时间: 2024-11-08 19:51:20

ORACLE查找并解除死锁进程的相关文章

讲解Oracle数据库中结束死锁进程的一般方法_oracle

1.查看死锁1)用dba用户执行以下语句 select username,lockwait,status,machine,program from v$session where sid in (select session_id from v$locked_object) 如果有输出的结果,则说明有死锁,且能看到死锁的机器是哪一台.字段说明: Username:死锁语句所用的数据库用户: Lockwait:死锁的状态,如果有内容表示被死锁. Status: 状态,active表示被死锁 Mac

Oracle删除死锁进程的方法_oracle

本文实例讲述了Oracle删除死锁进程的方法.分享给大家供大家参考.具体如下: 步骤1:用以下SQL查看进程列表,判断出被锁定的表 复制代码 代码如下: SELECT dob.OBJECT_NAME Table_Name,lo.SESSION_ID||', '||vss.SERIAL# 删除号, lo.locked_mode,lo.SESSION_ID, vss.SERIAL#,vss.action Action,vss.osuser OSUSER, vss.LOGON_TIME, vss.pr

关闭Oracle死锁进程的具体步骤

有效关闭Oracle死锁进程的具体步骤: 1.查哪个过程被锁 查V$DB_OBJECT_CACHE视图: SELECT * FROM V$DB_OBJECT_CACHE WHERE OWNER='过程的所属用户' AND CLOCKS!='0'; 2. 查是哪一个SID,通过SID可知道是哪个SESSION 查V$ACCESS视图: SELECT * FROM V$ACCESS WHERE OWNER='过程的所属用户' AND NAME='刚才查到的过程名'; 3. 查出SID和SERIAL#

ORACLE 10G中用alter system kill session 清除死锁进程

TITLE:ORACLE10G如何用alter system kill session 清除死锁进程 问题描述:用户反馈数据交换终止,查询发现大量的死锁信息 ? SID SERIAL# USERNAME LOGON_TIME 1 1296 56221 sample 2010-6-20 11:25:09 -- 解决步骤: 1.  用下面的语句组装生成清除死锁进程的脚本 --杀锁死进程 select Distinct 'alter system kill session '||chr(39)||b.

查找sqlserver查询死锁源头的方法 sqlserver死锁监控_MsSql

查找出SQLServer的死锁和阻塞的源头 --查找出SQLServer死锁和阻塞的源头 复制代码 代码如下: use mastergodeclare @spid int,@bl intDECLARE s_cur CURSOR FORselect  0 ,blockedfrom (select * from sysprocesses where  blocked>0 ) awhere not exists(select * from (select * from sysprocesses whe

PostgreSQL中关闭死锁进程的方法_PostgreSQL

由于使用的PostgreSQL数据库,没有资料.只好进行谷歌. 最终在一个英文论坛中发现了解决方法. 如下: 1.检索出死锁进程的ID 复制代码 代码如下: SELECT * FROM pg_stat_activity WHERE datname='死锁的数据库ID '; 检索出来的字段中,[wating ]字段,数据为t的那条,就是死锁的进程.找到对应的[procpid ]列的值. 2.将进程杀掉 复制代码 代码如下: SELECT pg_cancel_backend('死锁那条数据的proc

查找sqlserver查询死锁源头的方法 sqlserver死锁监控

查找出SQLServer的死锁和阻塞的源头 --查找出SQLServer死锁和阻塞的源头 复制代码 代码如下:use mastergodeclare @spid int,@bl intDECLARE s_cur CURSOR FORselect  0 ,blockedfrom (select * from sysprocesses where  blocked>0 ) awhere not exists(select * from (select * from sysprocesses wher

查看当前进程,或死锁进程,并能自动杀掉死进程

进程 /*--处理死锁  查看当前进程,或死锁进程,并能自动杀掉死进程  因为是针对死的,所以如果有死锁进程,只能查看死锁进程 当然,你可以通过参数控制,不管有没有死锁,都只查看死锁进程 --邹建 2004.4--*/ /*--调用示例  exec p_lockinfo--*/create proc p_lockinfo@kill_lock_spid bit=1,  --是否杀掉死锁的进程,1 杀掉, 0 仅显示@show_spid_if_nolock bit=1 --如果没有死锁的进程,是否显

如何杀死oracle死锁进程

方法一:Oracle的死锁非常令人头疼,总结了一些点滴经验作为学习笔记 1.查哪个过程被锁查V$DB_OBJECT_CACHE视图: SELECT * FROM V$DB_OBJECT_CACHE WHERE OWNER='过程的所属用户' AND LOCKS!='0'; 2. 查是哪一个SID,通过SID可知道是哪个SESSION.查V$ACCESS视图: SELECT * FROM V$ACCESS WHERE OWNER='过程的所属用户' AND NAME='刚才查到的过程名'; 3.