【发布时间】:2014-04-03 21:54:07
【问题描述】:
我有两个 oracle 11g 数据库。我在 DB1 中有一个表 TASKS(在模式中),在 DB2 中有另一个表 ORDERS(在模式中)。每当在 ORDERS 表中创建带有(OrderID 和 OrderStatus)的新订单时,我需要在 TASKS 表中创建一个新任务(TaskID 作为 OrderID,TaskStatus 作为 OrderStatus)。当用户更新 TASKS 表中的 TaskStatus 时,其在 ORDERS 表中的订单的订单状态应该得到更新。我在 DB1 中创建了一个 DBLink 来访问 DB2 中的 ORDER 表。
为了实现这个要求,我计划有两个触发器。每当创建新订单时,ORDERS 表上的第一个触发器以在 TASKS 表中插入一个新任务。每当 TASKS 表中的任务状态发生变化时,TASKS 表上的第二个触发器会更新 ORDERS 表中的订单状态。
我担心这个触发器解决方案只有在两个数据库启动时才有效。每当 DB1 关闭并在 DB2 中创建新订单时,此解决方案都无法在 DB1 中插入新任务。我认为我们可以在 DB1 中为 DB2 中的 ORDERS 表创建的 VIEW 上创建此触发器,而不是在 ORDERS 表上创建第一个触发器。这个在DB1中创建VIEW的方案解决了DB1宕机时在TASKS表中插入新TASK的问题。我认为这种在 TASKS 表上创建视图以更改任务状态的解决方案将不起作用,因为视图和表都在同一个 DB1 中。
有没有更好的方法来解决这个问题?请帮忙。
【问题讨论】:
-
我不明白视图如何解决您的问题。如果数据库关闭,您有两个选择: 1. 当它启动时 - 将整个表与另一个数据库中的任务表同步。 2.保持一个队列,一旦另一个数据库启动,批量插入已经堆积的内容。
-
@haki -- 我刚刚浏览了一些解决方案,发现有一种方法可以通过创建物化视图来解决这个问题。即使我不确定它是如何工作的。实际上正在寻找更好的替代解决方案。谢谢
-
视图(正如您在帖子中所写)和物化视图之间存在很大差异。
-
我认为将所有相关数据放在同一个数据库中是一种更好的方法。