Oracle高级队列与小型Oracle数据库表
我正在寻找一种在两个数据库之间进行通信的简单方法,目前两个数据库之间存在一个数据库链接 我想在数据库1上处理一批记录(每批记录的批代码)的数据库1上的作业,一旦数据库1上的处理完成并且所有批记录都已处理完毕。我希望database 2通过查询oracle表或位于database 1或database 2上的oracle advanced queue来查看database 1已处理了大量批处理(批处理代码) 数据库2将使用每个批次代码通过数据库链接视图处理数据库1上的记录批次,并更新该批次的状态以完成 我希望能够更新Oracle高级队列或数据库表的批次号、进度状态(“S”已启动、“C”已完成)、状态日期 表名。Oracle高级队列与小型Oracle数据库表,oracle,updates,oracle12c,database-link,advanced-queuing,Oracle,Updates,Oracle12c,Database Link,Advanced Queuing,我正在寻找一种在两个数据库之间进行通信的简单方法,目前两个数据库之间存在一个数据库链接 我想在数据库1上处理一批记录(每批记录的批代码)的数据库1上的作业,一旦数据库1上的处理完成并且所有批记录都已处理完毕。我希望database 2通过查询oracle表或位于database 1或database 2上的oracle advanced queue来查看database 1已处理了大量批处理(批处理代码) 数据库2将使用每个批次代码通过数据库链接视图处理数据库1上的记录批次,并更新该批次的状态以
batch_records
表列
Batch No,
Status,
status date
问题:
首先回答您的问题:
数据库链接是两个数据库之间的通信方式。如果这些作业在数据库1(DB1)上运行,我建议您将其保留在数据库1中。通过数据库链接进行操作会引发不同类型的问题。可能会很慢,您无法通过数据库链接(例如LOB)完成所有操作。一个选项是调度作业(使用
DBMS\u调度器
或DBMS\u作业
(这对于简单的事情来说非常合适))。让过程在DB1中的某个表(第一个问题中的“简单表”)中维护作业状态,DB2将读取该表
怎么做?直接执行此操作,或创建一个物化视图,该视图将按计划方式(例如每天早上7:00)或按需(这不是一个好主意)或按提交方式(一旦DB1过程完成任务并提交更改,物化视图将被刷新)
如果没有那么多行,我可能会直接阅读DB1状态表,然后考虑其他选项(如果必要)。首先回答您的问题:
数据库链接是两个数据库之间的通信方式。如果这些作业在数据库1(DB1)上运行,我建议您将其保留在数据库1中。通过数据库链接进行操作会引发不同类型的问题。可能会很慢,您无法通过数据库链接(例如LOB)完成所有操作。一个选项是调度作业(使用
DBMS\u调度器
或DBMS\u作业
(这对于简单的事情来说非常合适))。让过程在DB1中的某个表(第一个问题中的“简单表”)中维护作业状态,DB2将读取该表
怎么做?直接执行此操作,或创建一个物化视图,该视图将按计划方式(例如每天早上7:00)或按需(这不是一个好主意)或按提交方式(一旦DB1过程完成任务并提交更改,物化视图将被刷新)
如果没有那么多行,我可能会直接阅读DB1状态表,然后再考虑其他选项(如果必要)。这太棒了,谢谢您提供的信息。。我将研究DBMS_调度程序和DBMS_作业。batch_表将很小,大约有2000个批号,并且在数据库2将记录处理到其数据库后的几天内会被清除。就像说这个工作每月只发生一次一样,不客气。嗯,是的-那是一张非常小的桌子,我想说,不需要任何特别的东西。回答得好@Littlefoot。根据链接更新:Oracle将向远程节点发送整个update语句,因此,如果是基于集合的更新,而不是每次行[=每次慢更新]更新,那么处理时间应该是正常的。感谢各位的反馈,这很好,感谢您提供的信息。。我将研究DBMS_调度程序和DBMS_作业。batch_表将很小,大约有2000个批号,并且在数据库2将记录处理到其数据库后的几天内会被清除。就像说这个工作每月只发生一次一样,不客气。嗯,是的-那是一张非常小的桌子,我想说,不需要任何特别的东西。回答得好@Littlefoot。根据链接更新:Oracle将向远程节点发送整个update语句,因此,如果它是基于集合的更新,而不是每次行[=slow-at-a-time]更新,那么处理时间应该是正常的。感谢各位的反馈