1

Oracle 10g 中的触发器为常规表中的行子集生成 upsert 和 delete 消息。这些消息由两个字段组成:

  • 唯一的行 ID。
  • 非唯一标识。

在使用这些消息时,我想对 deque 进程施加一个遵守以下约束的命令:

  • 消息必须按插入顺序出队。
  • 属于同一 id 的消息必须以这样一种方式出队,即没有其他出队过程应该能够使具有此 id 的潜在后续消息(或多个消息)出队。由于消息是使用触发器生成的,因此我不能为此目的使用组。

我正在为 AQ 使用 Oracle Java 接口。关于如何实现的任何指示?

4

1 回答 1

2

我相信默认的出队顺序是先进先出,因此它们将按照与入队相同的顺序出队。

对于您的第二点,您是说要在非唯一 ID 上序列化出队吗?即,您的队列中基本上有许多队列,并且您只希望一个作业在任何时候使用来自每个队列的消息?

即,您有消息:

1 | a
2 | a
3 | b
4 | a

在这里,您有两种类型的记录(a 和 b),并且您希望 1 个作业消耗所有 a,而另一个作业消耗所有 b。如果是这种情况,是否考虑创建多个队列?

如果多个队列失败,请查看传递给 dequeue 过程的 dequeue_options_t 类型 - 最值得注意的是 dequeue_condition - 这允许您仅选择特定消息,因此您可以为所有 a 启动一个作业,为所有 b 启动另一个作业等。

于 2009-11-20T14:26:45.093 回答