DBMS_Alert是否可用于两个Oracle数据库之间的通信 请问:需要在两个不同IP的Oracle数据库之间传递消息。比如数据库A的某个表更新了,可以发消息给数据库B,DBMS_Alert是否可以实现?我查阅的资料,DBMS_Alert好像是只能在同一个数据库下用。请高手解答! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 楼主自己可以自己验证DBMS_Alert不就完了。另外,我建议用DBMS_PIPE来完成。 DBMS_Alert和DBMS_PIPE都没用过,我接触过几个系统跨数据库的数据同步的问题,一个是采用接口表的方式,一个是用IBM中间件EAI的方式。 现在是需求里要求用DBMS_Alert来进行通讯,就是数据库A的接口表更新了,就用DBMS_Alert对数据库B发送消息,然后B用DBLink去去A中的数据。可是DBMS_Alert好像不能在数据库间通信呢?kinglht 说的接口表方式是怎么操作的呢? DBMS_Alert实现不同进程间的通讯,是可以实现你的要求的 谢谢CathySun118,但是怎么实现两个数据库之间的通讯呢?我看到的例子中,DBMS_Alert的注册,发送,接收都没有IP的设置。能否给个数据库之间DBMS_Alert的实例呢? 用dblink执行dbms_alert就可以了这里用ora10g跟ora212这2个数据库做例子先在ora10g里面建立dblink这里注册alertT@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 /这里会等待再另外的数据库里面执行signalT@Ora10g>EXEC DBMS_ALERT.signal@ORA212('TEST','SIGNAL');PL/SQL procedure successfully completed.Elapsed: 00:00:00.01T@Ora10g>commit;Commit complete.Elapsed: 00:00:00.01T@Ora10g>原来等待的sessionT@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才会发出去 继续问一个实例化切换的问题 读取Oracle的Schema,放这里记录一下 SQL语句求助,获取重复记录值 很长的字符串在Oralce中用什么类型存储好?Clob? 想问下关于数据库的垂直分割 不能連接到Oracle 10g oracle精简客户端,3.69M! 高分求解select查询问题~ oracle中建立数据库的sql语句时什么或者存储过程 ?谢谢! proc问题 时间转换排序 求教一个oracle函数
另外,我建议用DBMS_PIPE来完成。
kinglht 说的接口表方式是怎么操作的呢?
这里用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才会发出去