知识大全 Oracle高级排队机制

Posted 消息

篇首语:读书之法,在循序而渐进,熟读而精思。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle高级排队机制相关的知识,希望对你有一定的参考价值。

Oracle高级排队机制  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  包

  子程序

  说明

  DBMS_AQ

  ENQUEUE

  enqueueE操作 向队列中插入消息 带有指定的路由传递信息

  DBMS_AQ

  DEQUEUE

  Dequeue操作 从队列中检索出消息 带有指定的选项消息

  DBMS_AQADM

  CREATE_QUEUE_TABLE

  用指定的参数创建列表

  DBMS_AQADM

  CREATE_QUEUE

  在现有队列表中创建一个队列

  DBMS_AQADM

  DROP_QUEUE

  从队列表中删除指定队列

  DBMS_AQADM

  DROP_QUEUE_TABLE

  删除队列表 以及其组件队列

  DBMS_AQADM

  ALTER_QUEUE

  更改给定队列的选项

  DBMS_AQADM

  ADD_SUBSCRIBER

  向指定队列中添加预约者

  DBMS_AQADM

  REMOVE_SUBSCRIBER

  从给定队列中删除预约者

  DBMS_AQADM

  GRANT_TYPE_ACCESS

  为队列管理器授予权限

  DBMS_AQADM

  QUEUE_SUBSCRIBERS

  返回指定队列的预约者

  DBMS_AQADM

  START_TIME_MANAGER

  启动时间管理器后台进程

  DBMS_AQADM

  STOP_TIME_MANAGER

  停止时间管理器后台进程

  DBMS_AQ支持类型

  类型名

  说明

  用于

  SYS AQ$_AGENT

  消息的生产者或消费者

  作为AQ$_RECIPIENT_LIST_T的一部分被包含 因此用于ENQUEUET和DEQUEUE

  AQ$RECIPIENT_LIST_T

  接收消息的代理列表

  作为MESSAGE_PROPERIES_T的一部分被包含 因此用于ENQUEUE和DEQUEUE

  MESSAGE_PROPERTIES_T

  消息的属性

  ENQUEQU和DEQUEUE

  ENQUEUE_OPTIONS_T

  Enqueue的选项

  ENQUEQU

  DEQUEUE_OPTIONS_T

  Dequeue的选项

  DEQUEUE

   SYS AQ$_AGENT

  TYPE SYS AQ$_AGENT IS RECORD

  (

  Name varchar ( )

  Address varchar ( )

  Protocol number

  )

   AQ$RECIPIENT_LIST_T

  Type aq$_recipient_list_t is table of sys aq$_agent index by binary_integer;

   MESSAGE_PROPERTIES_T

  Type message_properties_t is record

  (

  Priority binary_integer default

  Delay binary_integer default no_delay

  Expiration binary_integer default never

  Correlation varchar ( ) default null

  Attempts binary_integer

  Recipient_list aq$_recipient_list_t

  Exception_queue varchar ( ) default null

  Enqueue_time date

  State binary_integer

  )

  参数说明:

  字段

  数据类型

  说明

  Priority

  Binary_integer

  相应消息的优先级 比较小的数字意味着比较高的优先级 优先级可以是任何整数 其中也包括负数

  Delay

  Binary_integer

  相应消息的延迟 delay可以是NO_DELAY(这意味着消息可以被立即从队列中取出) 或者要等待的秒数 指定消息标识符的dequeue操作将忽略该延迟而进行操作 被延迟的消息在执行enqueue(插入队列)操作时的状态是waiting 然后在delay秒以后变为ready状态

  Expiration

  Binary_integer

  过期的秒数 如果该消息还没有被从队列中取出 那么该消息将不会过期 如果指定了过期时间 过期时间是在延迟以后开始计算的 在过期以后 该消息被移动到异常队列中 此时的状态是expired

  Correlation

  Varchar ( )

  关联标识符 如果需要的话 可以按照关联标识符检索消息

  Attempts

  Binary_integer

  尝试提取该消息的次数 这个参数仅仅用于dequeue

  Recipient_list

  Aq$recipient_list_t

  此消息的接收都列表 此参数在enqueue执行时被读出 而在dequeu操作时并不返回它

  Exception_queue

  Varchar ( )

  此消息的异常队列 如果消息过期或者queue操作的次数超过了max_retres 那么该消息就被移动到异常队列中 其状态为expired 如果没有指定exception_queue 那么该消息就被移动到队列表的缺省异常队列中 如果指定了exception_queue但是在移动时此队列不定期是无效的 那么该消息将被移动到队列表的缺省异常队列中 同时该消息也被写入警报日志中

  Enqueue_time

  Date

  消息插入队列的时间 这个参数将被dequeue返回 在执行enqueue操作时它自动被系统所设定

  State

  Binary_integer

  在执行dequeue操作时消息的状态 这个参数不能由enqueue所设定 它会被系统自动进行更新 其取值为waiting(消息延迟还滑到达) ready(消息已准备被处理) processed(消息已被处理 但是还保留在队列中)和expired(消息已被移动到异常队列中)

   ENQUEUE_OPTIONS_T

  Type enqueue_option_t is record

  (

  Visibility binary_integer default no_mit

  Relative_msgid raw( ) default null

  Sequence_deviation binary_integer default null

  )

  参数说明

  字段

  数据类型

  说明

  Visibility

  Binary_integer

  指定事务的行为 如果visibility是on_mit 那么当当前事务提交以后该enqueue将完成 如果visibility是immediate时 那么enqueue将构建一个单独的立即被提交的事务 即使当前事务被撤消了 该enqueue操作也将会执行

  Relative_msgid

  Raw

  如果在sequeue_deviation中指定了before 那么在由relative_msgid所标识的消息的前面会插入此消息 如果没有指定sequence_deviation 那么将忽略relative_msgid

  Sequence_deviation

  Binary_integer

  指定在队列中此消息的位置 有效的取值为before(该消息将被插入到由relative_msgid所标识的消息的前面) top(该消息将被插入到所有其他消息的前面)以及NULL(该消息的优先级指定了在队列中它的位置) 缺省值是NULL

   DEQUEUE_OPTIONS_T

  Type dequeue_options_t is record

  (

  Consumer_name varchar ( ) default null

  Dequeue_mode binary_integer default null remove

  Navigation binary_integer default next_message

  Visibility binary_integer default on_mit

  Wait binary_integer default forever

  Msgid raw( ) default null

  )

  参数说明

  字段

  数据类型

  说明

  Consumer_name

  Varchar ( )

  接收该消息的消费者名字 如果指定了 队列中只有匹配此消费者的消息才会被处理 如果该队列没有设置为供多个消费者所用 那么consumer_name应该是NULL

  Dequeue_mode

  Binary_integer

  指定dequeue操作的锁定行为 有效取值是browse(读出消息同时并不加锁和从队列中删除消息 这类似于select) locked(读出消息并得到关于该消息的一个写操作锁 这类似于select for update)以及remove(读出该消息 然后更新或删除该消息 这要取决于该队列的保留特性) Remove是缺省值

  Navigation

  Binary_integer

  指定要检索的消息的位置 在决定了该位置以后 搜索条件(包括consumer_name msgid和correlation)就会被应用 有效的取值是next_message(检索匹配搜索条件的下一个消息) next_transaction(如果当前的消息组中还有剩余的消息就跳过它们检索匹配条件)

  Visibility

  Binary_integer

  指定是否dequeue是当前事务的一部分 如果是on_mit(缺省值) 那么dequeue操作就是当前事务的一部分 如果是immediate 那么dequeue操作是其自身的一个事务 该事务会立即被提交

  Wait

  Binary_integer

  指定如果当前没有匹配搜索条件的消息时等待的秒数 如果同一个组中的消息正被执行dequeue操作 那么这个参数就会被忽略 有效取值是forever(没有超时 这是缺省设置) no_wait(不等待 如果没有所需要的消息则立即返回)或者要等待的秒数

  Msgid

  Raw( )

  指定要执行dequeue操作的消息标识符

  Correlation

  Varchar ( )

  指定要执行dequeue操作的关联标识符

  枚举常量

  DBMS_AQ中支持类型的许多字段都是枚举常量 这此字段被定义为binary_integer 而DBMS_AQ定义相应的取值 在设置了这些选项以后 它们需要使用其包名作为前缀 例如 DBMS_AQ IMMEDIATE 下面的表列出了所有枚举常量 它们的取值以及它们用在何处

  字段

  取值

  使用位置

  Sequeue_deviation

  Before top

  Enqueue_options_t

  Visibility

  Immediate on_mit

  Enqueue_options_t

  Dequeue_mode

  Browse locked remove

  Dequeue_options_t

  Navigation

  First_message next_message next_transaction

  Dequeue_options_t

  Wait

  Forever no_wait

  Dequeue_options_t

  State

  Waiting ready processed expired

  Message_properties_t

  Delay

  No_delay

  Message_properties_t

  Expiration

  Never

  Message_properties_t

  过程定义:

  一 Enqueue

  Procedure enqueue(

  Queue_name in varchar

  Enqueue_options in enqueue_options_t

  Message_properties in message_properties_t

  Payload in message_type

  Msgid out raw);

  参数说明:

  字段

  数据类型

  说明

  Queue_name

  Varchar

  应该插入消息的队列

  Enqueue_options

  Enqueue_options_t

  Enqueue的选项

  Message_properties

  Message_properties_t

  消息的属性 这些属性将会在下一个dequeue操作中返回

  Payload

  Message_type

  消息数据 这可能是raw类型或对象类型 如果它是对象类型 那么它必须匹配在创建时指定的类型

  Msgid

  Raw

  返回的消息ID 这个ID可以用来对此特定的消息执行dequeue操作 无论优先级或延迟是多少

  Enqueue选项的sequeue_deviation字段指定了在两个消息之间的关系 如果指定了这个字段 那么对于被插入队列的消息的延迟和优先级有两个限制:

  [list= ]

  新插入队列的消息延迟必须少于或者等于在此消息被插入队列以前的消息延迟

  新插入队列的消息的优先级必须大于或者等于在此消息被插入队列以前的消息的优先级

  二 dequeue

  Procedure dequeue(

  Queue_name in varchar

  dequeue_options in enqueue_options_t

  Message_properties in message_properties_t

  Payload in message_type

  Msgid out raw);

  Dequeue的搜索条件是由consumer_name msgid和/或dequeue_options的correlation字段决定的 如果没有指定msgid 那么只有ready状态的消息会从队列中被删除

  三 create_queue_table

  Create_queue_table用于创建队列表 并指定稍后在本表上创建的队列的缺省属性 其中包括队列的排序次序

  a 与此队列表相关联的缺省异常队列 称为aq$_queue_table_e

  b 可以用于查询队列的只读视图 称为aq$_queue_table

  c 时间管理所用的索引 称为aq$_queue_table_t

  d 多个消费者队列的索引 称为aq$_queue_table_i

  Procedure create_queue_table(

  Queue_table in varchar

  Queue_payload_type in varchar

  Storage_clause in varchar default null

  Sort_list in varchar default null

  Multiple_consumers in Boolean default false

  Message_grouping in binary_integer default none

  Commet in varchar default null

  Auto_mit in Boolean default true);

  参数

  数据类型

  说明

  Queue_table

  Varchar

  要创建的队列表的名字

  Queue_payload_type

  Varchar

  此队列中的用户数据的类型 它应该是raw或对象类型的

  Storage_clause

  Varchar

  用在create table 语句中的存储参数

  Sort_list

  Varchar

  定义用作排序主键的列 这样就可以对这个表中创建的队列进行排序了

  Multiple_consumers

  Boolean

  如果为true在此表中创建的队列可以对每个消息拥有多个消费者 该用户必须要首先使用grant_type_access被授予类型访问权限 如果为false(缺省值) 那么在此表中创建的队列只能对一个消息有一个消费者

  Message_grouping

  Binary_integer

  如果为NONE(缺省值) 那么在此队列表中创建的队列中每个消息被单独进行处理 如果是transactional 那么作为一个事务的一部分而被插入所有的消息都被认为是同一个消息组的一部分 这样就会同时从队列中删除了

  Comment

  Varchar

  新创建的表的注释 它将被记录到队列目录中

  Auto_mit

  Boolean

  如果是true(缺省值) 当前事务在队列表被创建以前被提交 当create_queue_table返回时该操作生效 如果为false 那么创建操作是当前事务的一部分 并将在当前事务提交时该操作生效

  四 Drop_queue_table(

  Queue_table in varchar

  Force in Boolean default false

  Auto_mit in Boolean default true);

  参数说明:

  Force:如果为true 该表中的所有队列都自动停止并被删除 如果是false 那么如果在表中仍有队列会返回一个错误

  五 Create_queue

  在指定的队列表中创建一个队列 队列名必须在当前数据模式中是唯一的 缺省情况下 对该队列的enqueue和dequeue操作是被屏蔽的 在创建了该队列以后 必须使用start_queue来使得enqueue和dequeue操作生效

  Procedure create_queue(

  Queue_name in varchar

  Queue_table in varchar

  Queue_type in binary_integer default normal_queue

  Max_retries in number default

  Retry_delay in number default

  Retention_time in number default

  Dependency_tracking in Boolean default false

  Comment in varchar default null

  Auto_mit in Boolean default true);

  参数说明:

  参数

  数据类型

  说明

  Queue_name

  Varchar

  要创建的队列的名字

  Queue_table

  Varchar

  将要包含新创建的队列的队列表

  Queue_type

  Binary_integer

  队列类型 有效取值是normal_queue(创建通常的队列)或exception_queue(创建异常队列)

  Max_retries

  Number

  尝试dequeue操作(指定remove)的最大次数 如果一个代理从队列中删除消息 但是稍后又撤消了其事务 那么计数值也会增加 当计数值到达了max_retries 该消息会被移动到异常队列中

  Retry_delay

  Number

  在两次尝试之间的秒数 如果max_retries是以 那么retry_delay就不起作用 如果该队列有多个消息者 那么就不能指定retry_delay

  Retention_time

  Number

  消息在被执行dequeue以后在队列表中保留的秒数 有效值是infinite(该消息将被永远保留)或一定的秒数 default

  Dependency_tracking

  Boolean

  该参数被保留用作将来之用

  Comment

  Varchar

  对新创建的队列的说明 此注释将被添加到队列目录中

  Auto_mit

  Boolean

  如果为true 那么在该队列被创建以前当前是会被提交 当create_queue返回时该操作会生效 如果是false 那么当当前事务提交时该操作将生效

  六.Drop_queue

  从队列中删除一个已存在的队列 在被删除以前 该队列必须使用STOP_QUEUE予以停止 在执行此操作时 所有的队列数据都将被删除

  Procedure drop_queue(

  Queue_name in varchar

  Auto_mit in Boolean default true);

  七.Alter_queue

  此过程用于修改队列的某些属性 只有max_retries retry_delay和retention_time属性可以被修改 如果要改变其他属性 那么该队列必须要被删除并重新生成

  Procedure alter_queue(

  Queue_name in varchar

  Max_retries in number default null

  Retry_delay in number default null

  Retention_time in number default null

  Auto_mit in Boolean default true);

  参数

  数据类型

  说明

  Queue_name

  Varchar

  要修改的队列的名字

  Max_retries

  Number

  尝试dequeue操作(指定remove)的最大次数 如果一个代理从队列中删除消息 但是稍后又撤消了其事务 那么计数值也会增加 当计数值到达了max_retries 该消息会被移动到异常队列中

  Retry_delay

  Number

  在两次尝试之间的秒数 如果max_retries是 那么retry_delay就不起作用 如果该队列有多个消费者 那么就不能指定retry_delay

  Retention_time

  Number

  消息在被执行dequeue以后在队列表中保留的秒数 有效值是infinite(该消息将被永远保留)或一定的秒数 缺省值是

  Auto_mit

  Boolean

  如果是true 那么在该队列被创建以前当前是会被提交 当alter_queue返回时该操作会生效 如果是false 那么当当前事务提交时该操作将生效

  八 Start_queue

  用于使得对一个队列运行进行enqueue和/或dequeue操作 在创建以后 队列必须使用此函数启动 对于异常对象进行dequeue操作 所以对于异常队列来打开允许enqueue操作的设置是不起作用的 在此过程返回时该队列被启动 甚至即使该事务撤消了

  Procedure start_queue(

  Queue_name in varchar

  Enqueue in Boolean default true

  Dequeue in Boolean default true);

  Enqueue dequeue分别指定了该队列应该允许执行enqueue和dequeue操作

  九 Stop_queue

  用于对指定队列进行屏蔽enqueue和/或dequeue操作 如果对队列正在执行事务时 是不能停止该队列的 当该过程返回时此队列会被停止使用 甚至即使该事务撤消了

  Procedure stop_queue(

  Queue_name in varchar

  Enqueue in Boolean default true

  Dequeue in Boolean default true

  Wait in Boolean default true);

  如果wait是true 那么此调用将被阻塞直到所有针对queue_name的事务被提交或被撤消为止 如果是false 那么stop_queue将立即返回成功或是失败

  十 Add_subscriber

  将向队列中添加一个缺省的预约者 这仅对拥有多个消费者的队列是有效的 Add_subscriber会立即生效 并且当前的事务会提交 用户通过Grant_type_acces必须被授予访问此队列的权限

  Procedure add_subscriber(

  Queue_name in varchar

  Subscriber in sys aq$_agent);

  Subscriber是新的预约者

  十一 Remove_subscriber

  此过程将从指定的队列中删除指定预约者 Remove_subscriber会立即生效 并且当前的事务会提交 用户通过Grant_type_acces必须被授予访问此队列的权限

  Procedure Remove_subscriber(

  Queue_name in varchar

  Subscriber in sys aq$_agent);

  十二 queue_subscribers

  此函数指定队列的预约者的PL/SQL表

  Function queue_subscribers(

  Queue_name in varchar )

  Return aq$_subscriber_list_t;

  十三 Grant_type_access

  Grant_type_access用于使得一个用户能够执行队列管理操作 如果不使用该过程 那么用户将不能执行Create_queue_table Create_queue Add_subscriber和remove_subscriber

  Procedure grant_type_access(

  User_name in varchar );

  User_name 是要被授予权限的数据库用户

  十四 Start_time_manager

  此过程启动时间管理进程 AQ_TM_PROCESS init ora参数必须先被设置为 这会在数据库启动的时候启动该进程 当这个调用返回的时候 时间管理器被启动 即使当前的事务被撤销 无参数

  Procedure start_time_manager;

  十五 Stop_time_manager

  使得时间管理器失效 但是 它不终止该进程 它只是使得该进程停止其工作 当此调用返回时 时间管理器将被停止 即使当前的事务被撤销了

  Procedure stop_time_manager;

cha138/Article/program/Oracle/201311/16990

相关参考

知识大全 Oracle高级查询实例,提升效率

Oracle高级查询实例,提升效率  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  使用Oracl

知识大全 Oracle数据库中高级复制的功能介绍

Oracle数据库中高级复制的功能介绍  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  前言  日

知识大全 Oracle连接数过多释放机制

Oracle连接数过多释放机制  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Oracle服务器

知识大全 Oracle数据库提供的恢复机制

Oracle数据库提供的恢复机制  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Oracle数据

知识大全 Oracle锁的运行机制原理的描述

Oracle锁的运行机制原理的描述  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  以下的文章抓哟

知识大全 Oracle10g中的hints调整机制详解

Oracle10g中的hints调整机制详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  以下

知识大全 利用Oracle的同意安全机制来控制访问

利用Oracle的同意安全机制来控制访问  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Orac

知识大全 Oracle数据完整性和锁机制简析

Oracle数据完整性和锁机制简析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本课内容属于O

知识大全 oracle 使用杂记二

  下面的是关于sql*loader的使用的一点总结有些是来自itpub上的一些网友的总结    大部分是oracle专家高级编程上的实例只是我实践以后写的结果    sqlldruserid=lgo

知识大全 Oracle的同步复制研究

Oracle的同步复制研究  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  数据库支持高级复制功能