2010年07月30日   码农之路   5,724 次浏览

一、被锁的现象及原因
首先说一下被锁的现象,当你持行一条SQL语句的时候,一直处于等待状态,就感觉没有连接数据库一样,但是持行另外的SQL语句却能够正常持行。
为什么这出现这种情况了?
1、当两个用户同时对一个表执行了DML语句而没有COMMIT时,另一个用户也需要对表进行DML操作;
2、一个用户对表执行DML语句过程中程序中断,此时SQL语句得不到应有的返回;

二、解决方法
1、首先得修改程序的逻辑才能避免下次出现同样的问题;
2、对已经出现的锁进行解锁:
a、查找出锁的SID和SERIAL#

SELECT      
  lpad(' ', decode(l.xidusn, 0, 3, 0)) || l.oracle_username User_name,
  o.owner,
  o.object_name,
  o.object_type,
  s.sid,
  s.serial#,
  p.spid
FROM     
  v$locked_object l, dba_objects o, v$session s, v$process p
WHERE     
  l.object_id = o.object_id AND
  l.session_id = s.sid AND
  s.paddr = p.addr
ORDER BY     
  o.object_id, xidusn DESC;

b、根据上面查出来的SID和SERIAL#,在数据库中结束相关的SESSION

ALTER system KILL SESSION 'sid,serial#';

c、根据SPID从系统中结束与该SESSION对应的进程

KILL -9 spid;

TIPS:一般我们通过前面两步就可以消除锁了,没有必要持行第三步。

赞 赏
申明:除非注明,本站文章均为原创,转载请以链接形式标明本文地址。 如有问题,请于一周内与本站联系,本站将在第一时间对相关内容进行处理。
本文地址: http://www.yyjjssnn.cn/articles/531.html
相关阅读: ORACLE, Oracle, Oracle解锁

>>> Hello World <<<

这篇内容是否帮助到你了呢?

如果你有任何疑问或有建议留给其他朋友,都可以给我留言。

:wink: :twisted: :surprised: :smile: :smile9: :smile8: :smile7: :smile6: :smile5: :smile56: :smile55: :smile54: :smile53: :smile52: :smile51: :smile50: :smile4: :smile49: :smile48: :smile47: :smile46: :smile45: :smile44: :smile43: :smile42: :smile41: :smile40: :smile3: :smile39: :smile38: :smile37: :smile36: :smile35: :smile34: :smile33: :smile32: :smile31: :smile30: :smile2: :smile29: :smile28: :smile27: :smile26: :smile25: :smile24: :smile23: :smile22: :smile21: :smile20: :smile1: :smile19: :smile18: :smile17: :smile16: :smile15: :smile14: :smile13: :smile12: :smile11: :smile10: :smile0: :sad: :rolleyes1: :redface: :razz: :question: :neutral: :mrgreen: :mad: :lol: :idea: :exclaim: :evil: :eek: :cry: :cool: :confused: :biggrin: :arrow:

友情链接: 程序员刘杨 刘杨
Copyright 2003~2018 保留所有权利 | 网站地图
备案号:湘ICP备14001005号-2

湘公网安备 43011102001322号