zoukankan      html  css  js  c++  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;

  • 相关阅读:
    Python_数据类型与变量
    啦啦啦
    Java开发环境搭建
    TCP/IP 学习 --- 4(linux网络基础api)
    TCP/IP 学习 --- 3 (流量控制和拥塞控制)
    TCP/IP 学习 --- 2
    TCP/IP 学习记录 -- 1
    多线程
    如何解析xml文件
    Redis
  • 原文地址:https://www.cnblogs.com/BradMiller/p/1945718.html
Copyright © 2011-2022 走看看