从问题入手帮你解决Oracle杀死死锁进程(转)

原创 2007年10月15日 13:25:00

Oracle杀死死锁进程

先查看哪些表被锁住了:

 

select b.owner,b.object_name,a.session_id,a.locked_mode
from v$locked_object a,dba_objects b
where b.object_id = a.object_id;

OWNER     OBJECT_NAME     SESSION_ID LOCKED_MODE
------------------------------ -----------------
WSSB SBDA_PSHPFTDT   22 3
WSSB_RTREPOS WB_RT_SERVICE_QUEUE_TAB   24 2
WSSB_RTREPOS WB_RT_NOTIFY_QUEUE_TAB   29 2
WSSB_RTREPOS WB_RT_NOTIFY_QUEUE_TAB   39 2
WSSB SBDA_PSDBDT     47 3
WSSB_RTREPOS WB_RT_AUDIT_DETAIL     47 3

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;

USERNAME   SID   SERIAL# LOGON_TIME
------------------------------ ---------- -------
WSSB_RT     39     1178 2006-5-22 1
WSSB_RTACCESS     29     5497 2006-5-22 1

杀进程中的会话:

 

alter system kill session 'sid,serial#';
e.g
alter system kill session '29,5497';

如果有ora-00031错误,则在后面加immediate;alter system kill session '29,5497' immediate;

如何杀死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#:

查V$SESSION视图:

SELECT SID,SERIAL#,PADDR FROM V$SESSION WHERE SID='刚才查到的SID';

查V$PROCESS视图:

SELECT SPID FROM V$PROCESS WHERE ADDR='刚才查到的PADDR';

4. 杀进程:

(1)先杀ORACLE进程:

ALTER SYSTEM KILL SESSION '查出的SID,查出的SERIAL#';

(2)再杀操作系统进程:

KILL -9 刚才查出的SPID或ORAKILL 刚才查出的SID 刚才查出的SPID。

Oracle的死锁

查询数据库死锁:

 

select t2.username||'   '||t2.sid||'  
 '||t2.serial#||'   '||t2.logon_time||'  
 '||t3.sql_text
from v$locked_object t1,v$session t2,v$sqltext t3
where t1.session_id=t2.sid 
and t2.sql_address=t3.address
order by t2.logon_time;

查询出来的结果就是有死锁的session了,下面就是杀掉,拿到上面查询出来的SID和SERIAL#,填入到下面的语句中:

alter system kill session 'sid,serial#';

一般情况可以解决数据库存在的死锁了,或通过session id 查到对应的操作系统进程,在Unix中杀掉操作系统的进程。

 

SELECT a.username,c.spid AS os_process_id,c.pid 
AS oracle_process_id FROM v$session a,v$process c 
WHERE c.addr=a.paddr and a.sid= and a.serial#= ;

然后采用kill (unix) 或 orakill(Windows )。

在Unix中:

 

ps -ef|grep os_process_id
kill -9 os_process_id
ps -ef|grep os_process_id

经常在Oracle的使用过程中碰到这个问题,所以也总结了一点解决方法。

1)查找死锁的进程:

 

sqlplus "/as sysdba"   (sys/change_on_install)
SELECT s.username,l.OBJECT_ID,l.SESSION_ID,s.SERIAL#,
l.ORACLE_USERNAME,l.OS_USER_NAME,l.PROCESS 
FROM V$LOCKED_OBJECT l,V$SESSION S WHERE l.SESSION_ID=S.SID;

2)kill掉这个死锁的进程:

alter system kill session ‘sid,serial#’; (其中sid=l.session_id)

3)如果还不能解决:

 

select pro.spid from v$session ses,
v$process pro where ses.sid=XX and 
ses.paddr=pro.addr;

其中sid用死锁的sid替换:

 

exit
ps -ef|grep spid

其中spid是这个进程的进程号,kill掉这个Oracle进程。

 

Oracle杀死死锁进程

先查看哪些表被锁住了 select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_ob...
  • kone0611
  • kone0611
  • 2017年12月09日 23:35
  • 53

死锁,死锁产生的原因,产生死锁的必要条件和解决死锁的方法

死锁:指多个进程因竞争共享资源而造成的一种僵局,若无外力作用,这些进程都将永远不能再 向前推进。 安全状态与不安全状态:安全状态指系统能按某种进程顺序来为每个进程分配其所需资源,直 至最大需求...
  • shengabc
  • shengabc
  • 2015年08月09日 20:47
  • 3104

Oracle常见死锁发生的原因以及解决方法

一.删除和更新之间引起的死锁 造成死锁的原因就是多个线程或进程对同一个资源的争抢或相互依赖。这里列举一个对同一个资源的争抢造成死锁的实例。 CREATE TABLE testLock(  ID ...
  • fenyu8
  • fenyu8
  • 2016年12月22日 16:51
  • 8321

线程死锁问题

进程死锁及解决办法  一、要点提示 (1) 掌握死锁的概念和产生死锁的根本原因。 (2) 理解产生死锁的必要条件--以下四个条件同时具备:互斥条件、不可抢占条件、占有且申请条件、循环等待条件...
  • a879365197
  • a879365197
  • 2015年10月05日 11:32
  • 1274

银行家算法解决死锁问题

参考文献:http://www.docin.com/p-1491046367.html 银行家算法安全性序列分析 摘要:在操作系统的处理机调度的过程中,由于竞争资源或者进程间推进顺序非法,都会导致死锁...
  • xiaobangkuaipao
  • xiaobangkuaipao
  • 2017年07月23日 15:42
  • 320

死锁原因及解决、避免办法

死锁的条件      互斥条件(Mutual exclusion)     :资源不能被共享,只能由一个进程使用。      请求与保持条件(Hold and wait):进程已获得了一些资源,但...
  • liujianfei526
  • liujianfei526
  • 2016年07月17日 16:59
  • 2977

PHP 死锁问题分析

[导读] 对于死锁的问题,人们往往想到出现一些关于访问很缓慢,有白页现象,要是测试环境(我就真实遇到测试环境有本文谈及一样的问题)你也就重启一下PHP的php-fpm进程发现又好了 背景:对...
  • u010412301
  • u010412301
  • 2016年10月10日 12:05
  • 1116

Oracle查询锁表以及杀会话或系统进程来解除锁表操作

第一步,查询锁表信息 --查询被锁住的数据库对象 select object_name, machine, s.sid, s.serial#   from v$locked_object l...
  • t_332741160
  • t_332741160
  • 2014年08月21日 15:23
  • 1514

银行家算法解决死锁问题

银行家算法解决死锁问题 一.概念引入 银行家算法( banker's algorithm )由 Dijkstra于1965提出,关键是将死锁的问题演示为一个银行家贷款的模型,由于能用于银行系统的现...
  • baidu_20363843
  • baidu_20363843
  • 2017年04月10日 11:23
  • 1289

数据库死锁及解决死锁问题

所谓死锁: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程...
  • big_bigwolf
  • big_bigwolf
  • 2015年11月14日 10:04
  • 1123
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:从问题入手帮你解决Oracle杀死死锁进程(转)
举报原因:
原因补充:

(最多只允许输入30个字)