数据库复制和一致性检查

Mar*_*les 5 replication oracle oracle-10g duplication minus

我有一个关于我拥有的两个数据库(在 Oracle 10g 中)的问题,我们称它们为 A 和 B。A 有一些信息(在各种表中),我希望 B 从 A 获取一些表的部分副本,并不断检查A 中的更改并在 B 中“同步”它们。

我想问你一些方法、技术或者想法,知道我不能对 A 做任何改变(只是选择,没有触​​发器)。

我提前感谢您的帮助和耐心(对于可能的编辑)。

附加信息

感谢您的回答,我不知道它是否相关,但我找到了 MINUS 运算符,尽管我不确定它是否适用于“子表”(选择)。

Lei*_*fel 5

您的选择相当有限,因为您要求“不断检查...同步”和“不能对 A 进行任何更改”。诸如物化视图日志、dbms_alert、流和备用数据库之类的东西都不在表中。

如果 A 中的表不断更新其所有行,那么(如 Jack Douglas 所说)物化视图将是最容易设置的。在更有可能的情况下,A 中的大多数记录不会时时更改,您可能希望在 B 上设置一个(或多个)包,从 A 中选择以在 B 上根据需要进行合并和删除。这将仅与运行频率保持同步,但鉴于您的要求,它可能是您能做的最好的。

具体来说,您的包应执行以下操作:

  • 从 A 中不存在的 B 行中删除。
  • 匹配时合并A 到 B 更新,不匹配时插入。

如果您想避免多次点击 A 中的表,您可以将整个表插入到 B 上的全局临时表中,然后从那里执行删除/合并。

关于减号: 减号可以告诉您 A 查询中不在 B 中的所有行。通过将其与 B 减去 A 查询合并,您可以获得所有不同的行,但这可能需要更长的时间来处理甚至在添加插入/更新部分之前。如果 A 没有得到更新或删除,那么您可以插入第一个减号的结果,但 aninsert into B...where not exists A...仍然会更快更简单。