oracle队列

概念:
高级队列(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;

转载于:https://www.cnblogs.com/BradMiller/archive/2011/01/26/1945718.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值