温馨提示:本文翻译自stackoverflow.com,查看原文请点击:updates - Oracle Advanced Queues versus a Small Oracle Database Table
oracle updates oracle12c database-link advanced-queuing

updates - Oracle高级队列与小型Oracle数据库表

发布于 2020-03-29 21:33:06

我正在寻找一种在两个数据库之间进行通信的简单方法,目前两个数据库之间都存在数据库链接。

我要在数据库1上处理一批记录(每批记录的批处理代码)的工作,一旦该过程在数据库1上完成并且所有批次的记录都已处理完。我希望数据库2通过查询oracle表或位于数据库1或数据库2上的Oracle高级队列来查看数据库1已处理了许多批处理(批处理代码)。

数据库2将使用每个批次代码通过数据库链接视图处理数据库1上的记录批次,并更新该批次的状态以完成。

我希望能够更新其批号,进度状态(“ S”已开始,“ C”已完成),状态日期的Oracle Advanced Queue或数据库表

表名。

batch_records

表格栏

Batch No,
Status,
status date

问题:

  1. 是否可以通过简单的数据库表而不是复杂的Oracle Advanced Queue来完成?

  2. 可以通过数据库链接更新表吗?

  3. 有这个例子吗?

查看更多

提问者
Shaun Kinnair
被浏览
139
Littlefoot 2020-01-31 18:23

首先要回答您的问题:

  1. 是的,我相信
  2. 是的,它可以。但是,如果涉及很多行,那可能会很慢
  3. 大概

数据库链接两个数据库之间进行通信的方式。如果这些作业在数据库1(DB1)上运行,建议您将其保留在DB1中。这样做的东西在一个数据库连接需要不同种类的问题。可能会很慢,您无法通过数据库链接(例如,LOB)所有事情一种选择是安排作业(使用DBMS_SCHEDULERDBMS_JOB(对于简单的事情来说,这很正常))。让该过程在DB1中的某个表(这是您第一个问题中的“简单表”)中维护作业状态,该表将由DB2读取。

怎么样?直接执行此操作,或创建一个实例化视图,该视图将以计划的方式(例如,每天早上07:00),按需(不是一个好主意)或提交时(一旦DB1过程执行了该工作并提交更改,就刷新了,物化视图将被刷新)。

如果没有那么多行,我可能会直接读取DB1状态表,并在以后考虑其他选项(如有必要)。