oracle队列

系统 1613 0

概念:
高级队列(Advanced Queue,简称AQ):
高级队列是oracle的一种高级应用,它主要是表和触发器之间的组合而成的一种应用。其主要作用是在各应用系统中进行消息传递。
目的:
利用高级队列来实现消息在两个不同数据库之间的异步传输,满足业务系统的改造需求。
基本环境:
DB1:Oracle 10g Version 10.2.0.4.0
DB2:Oracle 10g Version 10.2.0.4.0
基本组成:
发送方(DB1):
Queue type:决定发送消息的类型
Queue table:消息发送的载体
Queue:队列
Subscriber:订购者,同一个队列可以有n个订购者
Propagation:传播进程
接收方(DB2):
Queue type:决定接收消息的类型
Queue table:消息接收的载体
Queue:队列
发送方(DB1)代码:
1.创建aq用户并赋权
--sys用户操作,其他操作为aq用户
create user aq identified by aq;
grant connect,resource,aq_administrator_role,unlimited tablespace to aq;
grant create database link to aq;
grant execute on dbms_aq to aq;
grant execute on dbms_aqadm to aq;

begin
dbms_aqadm.grant_system_privilege('ENQUEUE_ANY', 'aq', FALSE);
dbms_aqadm.grant_system_privilege('DEQUEUE_ANY', 'aq', FALSE);
end;
2.创建db link
create database link db2.LK connect to AQ using db2;
确认dblink有效。
3.创建type
CREATE type aq.Message_typ as object (
subject      VARCHAR2(30),
text         VARCHAR2(80));
可根据自己的需求决定具体字段。
4.创建queue
DECLARE
   subscriber sys.aq$_agent;
BEGIN
   --根据type创建queue table
   DBMS_AQADM.CREATE_QUEUE_TABLE(queue_table         => 'aq.que_shenshou_tab',
                                 multiple_consumers => TRUE,
                                 queue_payload_type => 'aq.Message_typ');
   --根据queue table创建queue
   DBMS_AQADM.CREATE_QUEUE(queue_name   => 'aq.que_shenshou',
                           queue_table => 'aq.que_shenshou_tab');
   --开始这个queue
   DBMS_AQADM.START_QUEUE(queue_name => 'aq.que_shenshou');
   --添加一个subscriber
   --这里可以添加n个subscriber,每个subscriber相当于一个独立的通道
   --这里shenshou1为consumer name,接收端要根据这个名字来决定出队
   --aq.que_shenshou@db2.Lk 为接收端(db2)上的queue名和dblink的组合
   subscriber := sys.aq$_agent('shenshou1', 'aq.que_shenshou@db2.lk' , NULL);
   DBMS_AQADM.ADD_SUBSCRIBER(queue_name => 'que_shenshou',
                             subscriber => subscriber);
   --创建propagation
   DBMS_AQADM.SCHEDULE_PROPAGATION(queue_name   => 'que_shenshou',
                                   destination => 'db2.lk');
END;
至此,发送端队列创建完毕。
可通过以下视图查看:
select * from user_queue_tables;
select * from user_queues;
select * from user_queue_subscribers;
select * from user_queue_schedules;

oracle队列


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论