Oracle数据库死锁问题的查询与处理-阿里云开发者社区

开发者社区> 推荐码发放> 正文

Oracle数据库死锁问题的查询与处理

简介: Oracle数据库死锁问题的查询与处理http://www.bieryun.com/3139.html 近来在工作中遇到了oracle数据库死锁问题,下面是转载的问题查询与处理方法,侵删。 一、数据库死锁的现象 程序在执行的过程中,点击确定或保存按钮,程序没有响应,也没有出现报错。
+关注继续查看

Oracle数据库死锁问题的查询与处理http://www.bieryun.com/3139.html

近来在工作中遇到了oracle数据库死锁问题,下面是转载的问题查询与处理方法,侵删。

一、数据库死锁的现象
程序在执行的过程中,点击确定或保存按钮,程序没有响应,也没有出现报错。
二、死锁的原理
当对于数据库某个表的某一列做更新或删除等操作,执行完毕后该条语句不提
交,另一条对于这一列数据做更新操作的语句在执行的时候就会处于等待状态,
此时的现象是这条语句一直在执行,但一直没有执行成功,也没有报错。
三、死锁的定位方法
通过检查数据库表,能够检查出是哪一条语句被死锁,产生死锁的机器是哪一台。
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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
java 数字处理与位运算
1.位运算 & 按位与 | 按位或^ 按位异或~ 按位取反<< 按位左移,补0>> 按位右移,新的符号位同原来的符号位>>> 按位右移,新的符号位总为0 所有的位操作符处理对象都是数字的补码!2.小数处理 整数与整数的除法结果仍是整数,小数点会被直接舍掉。 小数转化为整数,如(int)2.9还是小数点截掉处理。% 求余运算符。若1
1164 0
API浏览器数据查询失败问题的解决
由于API浏览器是针对VB而开发的,所以数据库采用的DAO,但是随着API浏览器的升级,不仅支持VB本身,也提供VB.net,C#API的查询,甚而是一些E文不太好的朋友,在开发VC程序时,也看一下API的中文说明。
441 0
oracle 数据库问题:“ORA-01922: 必须指定 CASCADE 以删除...“,原因及解决办法
oracle 数据库问题:“ORA-01922: 必须指定 CASCADE 以删除...“,原因及解决办法
19 0
oracle数据库 如何查询某个表的约束条件
使用下面语句从all_constraints视图中查看某表上的约束: SELECT constraint_name, table_name, r_owner, r_constraint_name FROM all_constraints WHERE table_name = 'table_name' and owner = 'owner_name'; 另一个视图ALL_CONS_COLUMNS也包括组成表上约束列的信息。
638 0
jpa @onetomany 级联查询时会有重复数据,去重问题
自己是直接查出来然后利用set去重(自己感觉不是太好,不过能达到目的) List list = query.getResultList();Set set=new HashSet(list);如有更好的方法,希望大佬留言,谢谢
1674 0
Oracle运维笔记之ORA-27102错误处理
Oracle运维笔记之ORA-27102错误处理
1525 0
Oracle-01033错误处理
今天电脑非常卡,强制重启后,发现oracle 11g启动不了了,提示错误: ERROR - ORA-01033 oracle initialization or shutdown in progress 解决步骤 首先sysdba账号登录下 很长时间没登录了,发现sys的密码忘记了,于是第一步,...
852 0
+关注
推荐码发放
阿里云优惠码阿里云推荐券bieryun.com
378
文章
5
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载