Sql 两个表上的Oracle数据库同步

Sql 两个表上的Oracle数据库同步,sql,database,oracle,Sql,Database,Oracle,我有两个oracle 11g数据库。我在DB1中有一个表TASKS(在模式中),在DB2中有另一个表ORDERS(在模式中)。每当在ORDERS表中创建具有(OrderID和OrderStatus)的新订单时,我都需要在TASKS表中创建一个新任务(TaskID为OrderID,TaskStatus为OrderStatus)。当用户更新TASKS表中的TaskStatus时,其Order in ORDERS表的订单状态应得到更新。我在DB1中创建了一个DBLink来访问DB2中的ORDER表 为

我有两个oracle 11g数据库。我在DB1中有一个表TASKS(在模式中),在DB2中有另一个表ORDERS(在模式中)。每当在ORDERS表中创建具有(OrderID和OrderStatus)的新订单时,我都需要在TASKS表中创建一个新任务(TaskID为OrderID,TaskStatus为OrderStatus)。当用户更新TASKS表中的TaskStatus时,其Order in ORDERS表的订单状态应得到更新。我在DB1中创建了一个DBLink来访问DB2中的ORDER表

为了实现这一要求,我计划有两个触发器。ORDERS表上的第一个触发器,用于在创建新订单时在TASKS表中插入新任务。任务表上的第二个触发器,用于在任务表中的任务状态发生更改时更新订单表中的订单状态

我担心的是,只有当两个DBs启动时,触发解决方案才会起作用。每当DB1关闭并且在DB2中创建新的顺序时,该解决方案都无法在DB1中插入新任务。我认为不必在ORDERS表上创建第一个触发器,我们可以在DB2中为ORDERS表在DB1中创建的视图上创建这个触发器。这个在DB1中创建视图的解决方案解决了在DB1关闭时在TASKS表中插入新任务的问题。我认为这种为任务状态更改创建任务表视图的解决方案不起作用,因为视图和表都在同一个DB1中


有没有更好的方法解决这个问题?请提供帮助。

触发器是解决此问题的有效方法。dbs实际可能下跌的频率有多高。如上所述,可以使用高级排队来解决这类问题。我假设您无法以这种方式控制数据库的创建。看起来它们应该在同一个模式中,或者至少在同一个实例上运行


我不明白视图如何解决您的问题。如果数据库关闭,您有两个选项:1。当它启动时,将整个表与另一个数据库中的tasks表同步。2.保留一个队列,一旦另一个数据库建立起来,大容量插入曾经堆积的内容。@haki--我刚刚浏览了一些解决方案,发现有一种方法可以通过创建物化视图来解决这个问题。甚至我也不知道它是如何工作的。实际上,我正在寻找一个更好的替代解决方案。谢谢视图(正如您在文章中所写)和物化视图之间有很大区别。我认为将所有相关数据放在同一个数据库中是一个更好的方法。