概念:
高級隊列(Advanced Queue,簡稱AQ):
高級隊列是oracle的一種高級應用,它主要是表和觸發(fā)器之間的組合而成的一種應用。其主要作用是在各應用系統(tǒng)中進行消息傳遞。
目的:
利用高級隊列來實現消息在兩個不同數據庫之間的異步傳輸,滿足業(yè)務系統(tǒng)的改造需求。
基本環(huán)境:
DB1:Oracle 10g Version 10.2.0.4.0
DB2:Oracle 10g Version 10.2.0.4.0
基本組成:
發(fā)送方(DB1):
Queue type:決定發(fā)送消息的類型
Queue table:消息發(fā)送的載體
Queue:隊列
Subscriber:訂購者,同一個隊列可以有n個訂購者
Propagation:傳播進程
接收方(DB2):
Queue type:決定接收消息的類型
Queue table:消息接收的載體
Queue:隊列
發(fā)送方(DB1)代碼:
1.創(chuàng)建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.創(chuàng)建db link
create database link db2.LK connect to AQ using db2;
確認dblink有效。
3.創(chuàng)建type
CREATE type aq.Message_typ as object (
subject????? VARCHAR2(30),
text???????? VARCHAR2(80));
可根據自己的需求決定具體字段。
4.創(chuàng)建queue
DECLARE
?? subscriber sys.aq$_agent;
BEGIN
?? --根據type創(chuàng)建queue table
?? DBMS_AQADM.CREATE_QUEUE_TABLE(queue_table???????? => 'aq.que_shenshou_tab',
???????????????????????????????? multiple_consumers => TRUE,
???????????????????????????????? queue_payload_type => 'aq.Message_typ');
?? --根據queue table創(chuàng)建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);
?? --創(chuàng)建propagation
?? DBMS_AQADM.SCHEDULE_PROPAGATION(queue_name?? => 'que_shenshou',
?????????????????????????????????? destination => 'db2.lk');
END;
至此,發(fā)送端隊列創(chuàng)建完畢。
可通過以下視圖查看:
select * from user_queue_tables;
select * from user_queues;
select * from user_queue_subscribers;
select * from user_queue_schedules;
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
