失效链接处理 |
Oracle 高级队列(AQ) PDF 下载
本站整理下载:
相关截图:
主要内容:
1 前言
一般系统的应用可以分为:立即要执行和可以延迟要执行的事情,区分这个很重要。为了提高系统的性能,缩短系统等待时间,引入队列技术。
队列是一种能将应用程序的处理工作有效地划分为前台任务和后台任务的技术。当处理容量允许时,这种技术通过存储消息、确定消息处理的优先顺序和向应用程序提交消息来发挥作用。它使你能够平衡本地计算机的负荷,或将任务分配到远程计算机。
为了减少用户的等待时间,应用程序可以让说明需要后台处理的消息排入队列。然后就可以从页面的呈递过程中去掉该处理任务。由一个后台进程来读取并队列处理这些消息,或者甚至可以交由一个单独的系统来处理它们。
队列可以实现各个系统之间的数据共享,消息通信。
2 功能概述
利用Oracle高级队列实现pl/sql代码,为其它语言实现高级队列的功能作接口。
Oracle高级队列有一下好处:
(1)高级队列管理是Oracle数据库的一个特性,它提供消息队列管理功能。这是一个非常可靠、安全和可伸缩的消息管理系统,因为它使用与其他基于Oracle技术的应用程序相同的数据库特性。
(2)高级队列管理的一个很大优点是它可以通过pl/sql、java或c来访问,这样你就可以把来自一个java servlet的消息入队列和使pl/sql存储过程中的相同消息出队列。
(3)高级队列管理的另一个优点是你可以利用这一软件通过Oracle net services (sql*net)、http(s)和smtp,在远程节点之间传播消息。高级队列甚至可以通过消息网关与非Oracle的消息管理系统(如ibm mqseries)相集成。
(4)Oracle高级队列管理提供了单消费者队列和多消费者队列。单消费者队列只面向单一的接收者。多消费者队列可以被多个接收者使用。当把消息放入多消费者队列时,应用程序的程序员必须显式地在消息属性中指定这些接收者,或者建立决定每条消息的接收者的基于规则的订阅过程。
Oracle 高级队列具体开发步骤如下:
(1)首先确定应用的需求,是否适合使用高级队列?使用高级队列预计提高性能的预期值
(2)赋予数据库账户相应aq权限。
(3)确定队列包体结构,即创建type。
(4)创建队列表及队列。
(5)队列管理
3 创建Oracle高级队列
3.1 Oracle高级队列所需权限
赋予权限和角色:
grant connect, resource to账户名;
grant aq_user_role to账户名;
grant aq_administrator_role to 账户名;
grant execute on sys.dbms_aqadm to账户名;
grant execute on sys.dbms_aq to账户名;
grant execute on sys.dbms_aqin to账户名;
grant execute on sys.dbms_aqjms to账户名;
3.2 创建队列结构—TYPE
create or replace type 类型名称 as object
(
字段一 字段类型,
字段二 字段类型,
字段三 字段类型,
字段四 字段类型,
…………………………
字段n 字段类型
);
3.3 创建队列表
begin
sys.dbms_aqadm.create_queue_table
(
queue_table => '队列表名',
queue_payload_type => ' type类型', --之前定义的type类型
sort_list => 'priority,enq_time', --按优先级和入列时间排序
multiple_consumers => false, --多消费者
comment => '自己加注解',
auto_commit => false , --手动控制事务
storage_clause => 'TABLESPACE 表空间名 --表空间名
PCTUSED 0
PCTFREE 30 --设置大点减少块征用
INITRANS 30 --设置大点减少块征用
MAXTRANS 255
STORAGE (
INITIAL 64K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
)'
);
end;
3.4 创建队列
begin
sys.dbms_aqadm.create_queue
(
queue_name => '队列名',
queue_table => '队列表名', --之前创建的队列表
queue_type => sys.dbms_aqadm.normal_queue,
max_retries => 3, --取队列失败后重试次数
retry_delay => 1, --重试前等待
retention_time => 0 --取队列后保持时间,不保持
);
end;
|