【问题标题】:Oracle Advanced Queues versus a Small Oracle Database TableOracle 高级队列与小型 Oracle 数据库表
【发布时间】:2020-01-31 18:24:28
【问题描述】:

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

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

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

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

表名。

batch_records

表格列

Batch No,
Status,
status date

问题:

  1. 这可以通过简单的数据库表而不是复杂的 Oracle 高级队列来完成吗?

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

  3. 有这方面的例子吗?

【问题讨论】:

    标签: oracle updates oracle12c database-link advanced-queuing


    【解决方案1】:

    先回答你的问题:

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

    数据库链接两个数据库之间通信的方式。如果这些作业在数据库 1 (DB1) 上运行,我建议您将其保留在那里 - 在 DB1 中。在数据库链接上执行stuff 会导致不同类型的问题。可能会很慢,您无法通过数据库链接(例如 LOB)执行所有操作。一种选择是安排工作(使用DBMS_SCHEDULERDBMS_JOB(这对于简单的事情来说是完全可以的))。让程序在 DB1 中的某个表(即第一个问题中的“简单表”)中维护作业状态,DB2 将读取该表。

    怎么样?直接执行,或创建一个物化视图,该视图将以预定方式(例如每天早上 7:00)或按需(不是那个好主意)或提交时刷新(一旦 DB1 过程完成工作并提交更改,物化视图将被刷新)。

    如果涉及的行不多,我可能会直接读取 DB1 状态表,稍后再考虑其他选项(如果需要)。

    【讨论】:

    • 太棒了 Littlefoot,感谢您提供的信息。我会研究 DBMS_SCHEDULER 和 DBMS_JOB。 batch_table 将很小,大约有 2000 个批号,并在数据库 2 将记录处理到其数据库后几天被清除。
    • 就像说这个工作也只会一个月发生一次
    • 不客气。嗯,是的 - 这是一张很小的桌子,我会说不需要任何特别的东西。
    • 好答案@Littlefoot。根据通过链接更新:Oracle 会将整个更新语句发送到远程节点,所以如果它是基于集合的更新而不是一次行 [=slow-at-a-time] 更新,那么处理时间应该是正常的。
    • 感谢大家的反馈
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 2010-09-07
    相关资源
    最近更新 更多