开发随笔-Oracle数据库-----死锁

oracle死锁问题一直困扰着我们,下面就教您一个oracle死锁的检查方法,如果您之前遇到过oracle死锁方面的问题,不妨一看……


  oracle死锁问题一直困扰着我们,下面就教您一个oracle死锁的检查方法,如果您之前遇到过oracle死锁方面的问题,不妨一看。 


  一、数据库死锁的现象 


  程序在执行的过程中,点击确定或保存按钮,程序没有响应,也没有出现报错。 


  二、oracle死锁的原理 


  当对于数据库某个表的某一列做更新或删除等操作,执行完毕后该条语句不提交,另一条对于这一列数据做更新操作的语句在执行的时候就会处于等待状态,此时的现象是这条语句一直在执行,但一直没有执行成功,也没有报错。 


  三、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)) 






select t2.username,t2.sid,t2.serial#,t2.logon_time 
from v$locked_object t1,v$session t2 
where t1.session_id=t2.sid order by t2.logon_time;
--查看锁




--alter system kill session 'sid,serial#';
--把锁给KILL掉
alter system kill session '146,21177';

你可能感兴趣的:(Oracle数据库,死锁,oracle)