我正在寻找一种在两个数据库之间进行通信的简单方法,目前两个数据库之间都存在数据库链接。
我要在数据库1上处理一批记录(每批记录的批处理代码)的工作,一旦该过程在数据库1上完成并且所有批次的记录都已处理完。我希望数据库2通过查询oracle表或位于数据库1或数据库2上的Oracle高级队列来查看数据库1已处理了许多批处理(批处理代码)。
数据库2将使用每个批次代码通过数据库链接视图处理数据库1上的记录批次,并更新该批次的状态以完成。
我希望能够更新其批号,进度状态(“ S”已开始,“ C”已完成),状态日期的Oracle Advanced Queue或数据库表
表名。
batch_records
表格栏
Batch No,
Status,
status date
问题:
是否可以通过简单的数据库表而不是复杂的Oracle Advanced Queue来完成?
可以通过数据库链接更新表吗?
有这个例子吗?
首先要回答您的问题:
数据库链接是两个数据库之间进行通信的方式。如果这些作业在数据库1(DB1)上运行,建议您将其保留在DB1中。这样做的东西在一个数据库连接需要不同种类的问题。可能会很慢,您无法通过数据库链接(例如,LOB)做所有事情。一种选择是安排作业(使用DBMS_SCHEDULER
或DBMS_JOB
(对于简单的事情来说,这很正常))。让该过程在DB1中的某个表(这是您第一个问题中的“简单表”)中维护作业状态,该表将由DB2读取。
怎么样?直接执行此操作,或创建一个实例化视图,该视图将以计划的方式(例如,每天早上07:00),按需(不是一个好主意)或提交时(一旦DB1过程执行了该工作并提交更改,就刷新了,物化视图将被刷新)。
如果没有那么多行,我可能会直接读取DB1状态表,并在以后考虑其他选项(如有必要)。
真是太棒了,谢谢您提供的信息。我将研究DBMS_SCHEDULER和DBMS_JOB。batch_table将很小,大约有2000个批号,并在数据库2将记录处理到其数据库后几天被清除。
就像说这个工作也只会每月一次
别客气。好吧,是的-那是一张很小的桌子,我想不需要任何特别的东西。
好答案@Littlefoot。按照通过链接进行的更新:Oracle会将整个更新语句发送到远程节点,因此,如果它是基于集合的更新,而不是一次行[=一次缓慢]更新,那么处理时间应该是正常的。
谢谢你们的反馈