oracle数据库死锁解决方法

转载 2017年03月27日 11:33:43

一、数据库死锁的现象
程序在执行的过程中,点击确定或保存按钮,程序没有响应,也没有出现报错。
二、死锁的原理
当对于数据库某个表的某一列做更新或删除等操作,执行完毕后该条语句不提
交,另一条对于这一列数据做更新操作的语句在执行的时候就会处于等待状态,
此时的现象是这条语句一直在执行,但一直没有执行成功,也没有报错。
三、死锁的定位方法
通过检查数据库表,能够检查出是哪一条语句被死锁,产生死锁的机器是哪一台。
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表示被死锁
Machine: 死锁语句所在的机器。
Program: 产生死锁的语句主要来自哪个应用程序。
2)用dba用户执行以下语句,可以查看到被死锁的语句。
select sql_text from v$sql where hash_value in 
(select sql_hash_value from v$session where sid in
(select session_id from v$locked_object))

四、死锁的解决方法
     一般情况下,只要将产生死锁的语句提交就可以了,但是在实际的执行过程中。用户可
能不知道产生死锁的语句是哪一句。可以将程序关闭并重新启动就可以了。
 经常在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进程

from:http://southking.javaeye.com/blog/550832

 

 


select A.SQL_TEXT, B.USERNAME, C.OBJECT_ID, C.SESSION_ID, 
       B.SERIAL#, C.ORACLE_USERNAME,C.OS_USER_NAME,C.Process,
       ''''||C.Session_ID||','||B.SERIAL#||''''
from v$sql A, v$session B, v$locked_object C
where A.HASH_VALUE = B.SQL_HASH_VALUE and
B.SID = C.Session_ID

 

转自:http://xinxiangsui2018.blog.163.com/blog/static/106097856201010304532280/

oracle数据库死锁解决方法

在做项目中,在程序完全正确的情况下,出现了当执行sql语句的时候停止工作的现象,开始是怀疑出现了死锁,当利用sql查询时发现自己是对的,死锁通常都是我们应用程序设计不合理造成的,如何处理数据库中的死锁...
  • suneqing
  • suneqing
  • 2015年04月29日 20:03
  • 2436

Java多线程产生死锁的原因和解决方法

一般造成死锁必须同时满足如下4个条件:  1,互斥条件:线程使用的资源必须至少有一个是不能共享的;  2,请求与保持条件:至少有一个线程必须持有一个资源并且正在等待获取一个当前被其它线程持有的资源; ...
  • hongtashan11
  • hongtashan11
  • 2011年05月24日 20:11
  • 1401

Oracle数据库死锁解决方法

死锁是数据库经常发生的问题,数据库一般不会无缘无故产生死锁,死锁通常都是由于我们应用程序的设计本身造成的。产生死锁时,如何解决呢,下面是常规的解决办法: 1)执行下面SQL,先查看哪些表被锁住了...
  • Emberd
  • Emberd
  • 2013年05月06日 16:17
  • 691

oracle 数据表死锁解决方法 Oracle

oracle 数据表死锁解决方法 Oracle  查询死锁信息的语句:  查看复制到剪贴板打印 select a.owner,         a.object_nam...
  • mitesi
  • mitesi
  • 2015年04月28日 20:36
  • 1271

Java线程死锁及解决方案

要了解线程死锁,首先要明白什么是死锁 死锁 通俗点讲:死锁就是两个或两个以上的进程或线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进...
  • dream_18
  • dream_18
  • 2016年09月24日 00:13
  • 463

oracle数据库查看和解除死锁

查看死锁: select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.obj...
  • maoyeqiu
  • maoyeqiu
  • 2016年05月30日 10:15
  • 2808

死锁的原因及处理方法

产生死锁的原因主要是: (1) 因为系统资源不足。 (2) 进程运行推进的顺序不合适。 (3) 资源分配不当等。 产生死锁的四个必要条件: (1)互斥条件:一个资源每次只能被一个进程...
  • as02446418
  • as02446418
  • 2015年09月09日 12:44
  • 3802

数据库Oracle,Mysal并发时经典常见的死锁原因及解决方法

1.    mysql都有什么锁   MySQL有三种锁的级别:页级、表级、行级。 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。 行级锁...
  • u010963948
  • u010963948
  • 2017年02月13日 19:38
  • 838

[JAVA] 死锁的成因及解决思路

死锁: —————————————————————————————————————————————————————————— 代码/* /** @ author Jokers @ ver...
  • Mokill0911
  • Mokill0911
  • 2014年07月17日 14:25
  • 642

Oracle死锁查询及处理方法

一、数据库死锁的现象 程序在执行的过程中,点击确定或保存按钮,程序没有响应,也没有出现报错。 二、死锁的原理 当对于数据库某个表的某一列做更新或删除等操作,执行完毕后该条语句不提 交,另一条对于这一列...
  • robbie1314520
  • robbie1314520
  • 2015年10月19日 09:55
  • 3351
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:oracle数据库死锁解决方法
举报原因:
原因补充:

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