kill有什么用?你的业务逻辑已经受到影响。
建议扫扫程序的大尾巴。

解决方案 »

  1.   

    你必须找出死锁的源头,好好把程序check一下,否则,怎么让用户用。
      

  2.   

    在程序里显式用 commit,或者 rollback 结束事务,及时释放锁定资源。
    或者语句后使用 nowait 项,不进行锁定等待。你所说的死锁,可能不是 oracle 概念上的死锁!!因为我记得 oracle 的 SMON(或者是其他,记不清了)是可以自动监视到死锁,并 Kill or rollback(也记不清了,总之就是处理了)。
    据我猜测,你所说的死锁,很有可能只是锁等待,如果这样,所以上面的提议还是有一定帮助的。
      

  3.   

    提高你的编程能力,语句中尽量使用...where id=12345的有值方式。
    执行语句前,仔细想一下此语句是否为死循环语句。
    工作时间,尽量少作调试工作。
      

  4.   

    不知道,你说的锁是在哪里看到的,哪张表?(V$_LOCK)
    还是表被锁了。
    上面几位都是高手,说得很有道理!
      

  5.   

    判断是哪个statement锁定的表
    可能仅仅是一个sql操作而导致这么多的死锁现象
    可以看看V$lock V$sqltext V$session 找出死锁的语句
      

  6.   

    SELECT bb.sid , id1, id2, lmode, request, aa.type ,MACHINE,sql_text
    FROM V$LOCK aa,V$session bb, v$sql cc
    where aa.sid = bb.sid and bb.SQL_ADDRESS =cc.address and bb.sql_hash_value =cc.hash_value
    ORDER BY id1,request
    /
      

  7.   

    通过V$SESSION,V$SESSION_EVENT,V$SESSION_WAIT视图得到等待最多的事件是什么。
    然后通过V$SQLTEXT查出最根本的sql语句是什么。
    针对该sql进行优化,就有目标了。
      

  8.   

    你看看你把oracle的管理机制设为几级啊,最高的两级是连select都要锁表的,是不是你把等级设得太高,导致并发事务处理上的缺陷。锁是没法改的,那是oracle内部自动设定的。死锁有两个原因,并发事务处理的等级和应用程序,好好找找吧,看看是在什么情况下发生的死锁,找到原因就好办了