我用的是816
意图是通过触发器同步两个数据库上的表.
首先,我建立了一个database link,名称为DB_REMOTE,测试后说是处于活动状态;
然后,我写了一个触发器大致如下:
CREATE OR REPLACE TRIGGER "MYDB"."TR_TEST_TRIGGER" AFTER UPDATE OF "NAME", "USER_ID" ON "MYDB"."T_USER" FOR EACH ROW BEGIN
IF UPDATING THEN
UPDATE T_USER@DB_REMOTE a SET a.NAME=:NEW.NAME WHERE a.USER_ID=:NEW.USER_ID;
END IF;
END TR_TEST_TRIGGER; 
这个触发器也曾经有效过,但是在我重新建database link后就再也不行了,我的database link连接的数据库没变,名称也没变,请问着是怎么回事啊?

解决方案 »

  1.   

    select sysdate from dual@DB_REMOTE;
    试试远程数据库是否通?还有,是否是远程数据库的权限发生变化了?
      

  2.   

    SYSDATE
    ----------
    26-12月-06
    也是好的啊
      

  3.   

    tgm78() 
    谢谢你,我突然发现我建立数据库链路的用户在远程数据库对那个表没有权限. -_-!!!
    请问我如何让这个用户对这个表有操作权限呢?我什么都不懂,呵呵.
      

  4.   

    在本地数据库,为远程数据的表建立类似如下的公共同义词
    create public synonym para_modify_record for auditintf.para_modify_record@para_audit.world;
      

  5.   

    tgm78() 
    非常感谢你,的确是我用来创建数据库链路的用户对远端数据库的那个表没有访问权限导致的.
    我按照你的方法在远端数据库建立了一个公共同义词(也是刚刚学的,呵呵),触发器就可以用了.
    现在这100分全部奉上.
    不过我有个问题,为什么用那个对相应的表有操作权限的用户无法建立数据库链路呢?总是提示我密码为空或者不正确,实际上是正确的,如能不吝赐教,我将再开帖奉送100分.
      

  6.   

    不过我有个问题,为什么用那个对相应的表有操作权限的用户无法建立数据库链路呢?总是提示我密码为空或者不正确,实际上是正确的,如能不吝赐教,我将再开帖奉送100分.没有能看太懂?建立数据库链路,需要就有建db_link的权限的。