oracle队列java_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;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值