Oracle DataBase AQ 学习小结(1)
来源:互联网 发布:手机淘宝哪里实名认证 编辑:程序博客网 时间:2024/05/22 12:11
AQ 实例
授权
-- systemGRANT EXECUTE ON DBMS_AQ TO APPS;GRANT EXECUTE ON DBMS_AQADM TO APPS;BEGIN DBMS_AQADM.GRANT_SYSTEM_PRIVILEGE('ENQUEUE_ANY', 'APPS', FALSE); DBMS_AQADM.GRANT_SYSTEM_PRIVILEGE('DEQUEUE_ANY', 'APPS', FALSE);END;
create payload type
-- ============= system role =======================-- create payload typeCREATE OR REPLACE TYPE CUXWMS_CMD_TYPE AS OBJECT( cuxwms_cmd_id NUMBER, cuxwms_cmd VARCHAR2(1000), transaction_id VARCHAR2(20), datalength VARCHAR2(20));/--GRANT ALL ON SYSTEM.CUXWMS_CMD_TYPE TO APPS;
Create queue table
-- ==============apps role =======================-- Create queue tableBEGIN sys.dbms_aqadm.create_queue_table(queue_table => 'APPS.CUXWMS_CMD_QT', queue_payload_type => 'SYSTEM.CUXWMS_CMD_TYPE', multiple_consumers => TRUE);END;
Create queue
-- ==============apps role =======================--create queueBEGIN sys.dbms_aqadm.create_queue(queue_name => 'APPS.CUXWMS_CMD_Q', queue_table => 'APPS.CUXWMS_CMD_QT', queue_type => sys.dbms_aqadm.normal_queue, max_retries => 5, retry_delay => 0, retention_time => 0);END;/--查看SELECT * from dba_objects t WHERE t.OBJECT_NAME LIKE '%CUXWMS_CMD%';SELECT * from dba_queues t WHERE t.name LIKE '%CUXWMS_CMD%';
Start queue
-- ==============apps role =======================-- start queueBEGIN sys.dbms_aqadm.start_queue(queue_name => 'APPS.CUXWMS_CMD_Q');END;
入队
-- 入列DECLARE recipients DBMS_AQ.aq$_recipient_list_t; enqopt dbms_aq.enqueue_options_t; mprop dbms_aq.message_properties_t; enq_msgid RAW(16);BEGIN recipients(1) := sys.aq$_agent('AGENT1', 'APPS.CUXWMS_CMD_Q', NULL); recipients(2) := sys.aq$_agent('AGENT2', 'APPS.CUXWMS_CMD_Q', NULL); mprop.recipient_list := recipients; dbms_aq.enqueue(queue_name => 'APPS.CUXWMS_CMD_Q', enqueue_options => enqopt, message_properties => mprop, payload => system.cuxwms_cmd_type_2(1, 'test message', 10001, 12), msgid => enq_msgid); COMMIT;END;
SELECT * from AQ$CUXWMS_CMD_QT;
单消费者
多消费者
出队
-- 出列DECLARE deqopt dbms_aq.dequeue_options_t; mprop dbms_aq.message_properties_t; msgid RAW(16); payload system.cuxwms_cmd_type;BEGIN deqopt.consumer_name := 'AGENT1'; deqopt.navigation := dbms_aq.first_message; deqopt.wait := 0; dbms_aq.dequeue(queue_name => 'APPS.CUXWMS_CMD_Q', dequeue_options => deqopt, message_properties => mprop, payload => payload, msgid => msgid); dbms_output.put_line('payload.cuxwms_cmd:' || payload.cuxwms_cmd); COMMIT;END;
Edition 特性
Oracle Database 从11g 版本之后,启用Edtion 特性
主要控制层次在用户层:
edition控制对象:
因此,TYPE 是edition控制对象, QUEUE_TABLE 不是edition 控制对象。如果在edition 用户创建 type, queue_type 时,会报错:
因此,建议的部署方案是:在非edtion用户(比如system),创建type, 并授权给业务用户使用,在业务用户下创建queue_type, queue.
参考网址
oracle 高级队列技术
Oracle高级队列介绍:17 DBMS_AQADM
0 0
- Oracle DataBase AQ 学习小结(1)
- Oracle AQ
- oracle database link小结
- Oracle AQ高级队列
- Oracle AQ 使用
- Oracle AQ 使用
- Oracle Database(1)
- oracle 学习小结1
- oracle 学习小结1
- Oracle Database 学习
- oracle学习 restore database和 recover database
- Oracle Database :玩转Oracle学习笔记之(7):orcle角色(1)
- JMS+Oracle Advanced Queue(AQ)用法实践
- 使用PL/SQL 实现Oracle Streams AQ
- Oracle 高级队列(AQ) 与JAVA JMS
- Oracle高级队列AQ实战笔记
- Oracle Database 的学习笔记
- Oracle Database :玩转Oracle学习笔记之(1):数据库学习路线和数据库的分类
- [LeetCode]326. Power of Three
- 设计模式-单例
- python学习笔记之函数
- 动态代理
- 多校联赛 Envy
- Oracle DataBase AQ 学习小结(1)
- 机器视觉的简介
- Java8新的时间和日期
- 使用VIPER构建iOS应用
- TCP/IP
- 用kubeadm 搭建 Kubernetes
- python学习笔记之robots协议
- 向jcenter提交library的之无坑版(无坑有效期:暂定2017年底)
- HDOJ-- 1303 Doubles