请问:需要在两个不同IP的Oracle数据库之间传递消息。比如数据库A的某个表更新了,可以发消息给数据库B,DBMS_Alert是否可以实现?
我查阅的资料,DBMS_Alert好像是只能在同一个数据库下用。请高手解答!

解决方案 »

  1.   

    楼主自己可以自己验证DBMS_Alert不就完了。
    另外,我建议用DBMS_PIPE来完成。
      

  2.   

    DBMS_Alert和DBMS_PIPE都没用过,我接触过几个系统跨数据库的数据同步的问题,一个是采用接口表的方式,一个是用IBM中间件EAI的方式。
      

  3.   

    现在是需求里要求用DBMS_Alert来进行通讯,就是数据库A的接口表更新了,就用DBMS_Alert对数据库B发送消息,然后B用DBLink去去A中的数据。可是DBMS_Alert好像不能在数据库间通信呢?
    kinglht 说的接口表方式是怎么操作的呢?
      

  4.   

    DBMS_Alert实现不同进程间的通讯,是可以实现你的要求的
      

  5.   

    谢谢CathySun118,但是怎么实现两个数据库之间的通讯呢?我看到的例子中,DBMS_Alert的注册,发送,接收都没有IP的设置。能否给个数据库之间DBMS_Alert的实例呢?
      

  6.   

    用dblink执行dbms_alert就可以了
    这里用ora10g跟ora212这2个数据库做例子
    先在ora10g里面建立dblink这里注册alert
    T@ORA212>EXEC dbms_alert.register('TEST');PL/SQL procedure successfully completed.Elapsed: 00:00:00.01
    这里等待
    T@ORA212>declare
      2    M VARCHAR2(4000);
      3    S NUMBER;
      4    begin
      5    dbms_alert.waitone('TEST',message => M,status => S);
      6    DBMS_OUTPUT.put_line(M);
      7    END;
      8    /这里会等待
    再另外的数据库里面执行signal
    T@Ora10g>EXEC DBMS_ALERT.signal@ORA212('TEST','SIGNAL');PL/SQL procedure successfully completed.Elapsed: 00:00:00.01
    T@Ora10g>commit;Commit complete.Elapsed: 00:00:00.01
    T@Ora10g>原来等待的session
    T@ORA212>declare
      2    M VARCHAR2(4000);
      3    S NUMBER;
      4    begin
      5    dbms_alert.waitone('TEST',message => M,status => S);
      6    DBMS_OUTPUT.put_line(M);
      7    END;
      8    /
    SIGNALPL/SQL procedure successfully completed.Elapsed: 00:00:10.54
    这样就可以了,注意signal后面要commit才会发出去