在A上建一个触发器,在增加记录时更新B表
CREATE TRIGGER DISPATCHMIS.
AFTER INSERT 
ON A
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW 
BEGIN
  UPDATE B SET COL = *** ;
END;
/

解决方案 »

  1.   

    你在INSERT B表的时候先查询该表 锁的情况。获取正在等待锁资源的用户名select a.username, a.sid, a.serial#, b.id1
      from v$session a, v$lock b
      where a.lockwait = b.kaddr
      

  2.   

    然后清除该锁.
    ALTER SYSTEM KILL SESSION  ‘SID,SERIR#’
      

  3.   

    谢谢大家的回答:
    我的问题是如何避免死锁的发生,因为我不是以DBA登陆的,不能查询表锁的情况,所以我必须想办法避免死锁的发生
      

  4.   

    使用TRIGGER,個人認為你的B表就不會造成死鎖的狀況。因為你的B表就一條記錄,更新的話應該很快的
    你產生死鎖的原因應該從程序上找找看。
      

  5.   

    着样如果线程多的话是很容易造成死锁的.
    一般来说,这种问题的解决方案是,
    将没一个变化先导一个tran表中,
    然后用后台程序去实时的将tran中的log按时间顺序更新到B表中.
     或者在改B表的时候,加锁,如果被锁,则不允许其它线程修改
    举例:
      Create table parameter (LockBinfor Varchar2(4000));如果P1要修改B的时候 LockBinfor = "P1" ,
    如果又有P2来修改B的时候, 看到LockBinfor ='P1',表示有人正在修改,则等待.
      

  6.   

    我不明白。如果你及时Commit或者Rollback,怎么会有锁产生呢?
      

  7.   

    在你的应用中添加一个用于捕捉因表被锁而引起的异常。然后使用类似于arp协议中的避让算法,在n毫秒后重试。