Oracle AQ
(2011-04-30 13:26:46)
标签:
it |
分类: 技术大全 |
EXEC DBMS_AQADM.CREATE_QUEUE_TABLE (queue_table
=>
EXEC DBMS_AQADM.CREATE_QUEUE (queue_name =>
'AGENTS_AVP_ESB',queue_table =>
EXEC DBMS_AQADM.START_QUEUE (queue_name => 'AGENTS_AVP_ESB');
概念:
高级队列(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
text
可根据自己的需求决定具体字段。
4.创建queue
DECLARE
BEGIN
END;
至此,发送端队列创建完毕。
可通过以下视图查看:
select * from user_queue_tables;
select * from user_queues;
select * from user_queue_subscribers;
select * from user_queue_schedules;