在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;
/
CREATE TRIGGER DISPATCHMIS.
AFTER INSERT
ON A
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
BEGIN
UPDATE B SET COL = *** ;
END;
/
from v$session a, v$lock b
where a.lockwait = b.kaddr
ALTER SYSTEM KILL SESSION ‘SID,SERIR#’
我的问题是如何避免死锁的发生,因为我不是以DBA登陆的,不能查询表锁的情况,所以我必须想办法避免死锁的发生
你產生死鎖的原因應該從程序上找找看。
一般来说,这种问题的解决方案是,
将没一个变化先导一个tran表中,
然后用后台程序去实时的将tran中的log按时间顺序更新到B表中.
或者在改B表的时候,加锁,如果被锁,则不允许其它线程修改
举例:
Create table parameter (LockBinfor Varchar2(4000));如果P1要修改B的时候 LockBinfor = "P1" ,
如果又有P2来修改B的时候, 看到LockBinfor ='P1',表示有人正在修改,则等待.