1

假设以下场景:我有一个包含大量数据的主数据库,在这个数据库中我有一个关键表,我将在这个示例中调用 DataOwners,DataOwners 表有 4 条记录,每条记录彼此数据库中的表直接或间接地“属于”DataOwners 的记录,我所说的属于是用外键链接到它的。我还有其他 2 个从属数据库,它们的结构与我的主数据库完全相同,它们仅通过从我的主数据库复制来更新,但 SlaveDatabase1 应该只有来自 DataOwner 2 的记录,而 SlaveDatabase2 应该只有来自 DataOwners 1 和 3 的记录,而 MasterDatabase 有DataOwners 1、2、3 和 4 的记录。

Oracle 是否有任何工具可以让我进行这种选择性记录复制?如果没有,有什么办法可以改进我的复制方法?这是:

  • 向每个表添加一个触发器,该触发器将记录更改插入一组复制表中
  • 在选定的从属服务器上执行复制表的命令
4

2 回答 2

2

最简单的选择是在各种从属数据库中定义物化视图,这些从属数据库只复制您想要的数据。因此,例如,如果A主数据库中有一个表,那么在从数据库 1 中,您将创建一个物化视图

CREATE MATERIALIZED VIEW a
  <<refresh criteria>>
AS
SELECT a.*
  FROM a@to_master a,
       dataOwners@to_master dm
 WHERE a.dataOwnerID = dm.dataOwnerID
   AND dm.some_column = <<some criteria that selects DataOwner2>>

而从数据库 2 具有非常相似的物化视图

CREATE MATERIALIZED VIEW a
  <<refresh criteria>>
AS
SELECT a.*
  FROM a@to_master a,
       dataOwners@to_master dm
 WHERE a.dataOwnerID = dm.dataOwnerID
   AND dm.some_column = <<some criteria that selects DataOwner1 & 3>>

当然,如果dataOwnerID可以硬编码,您可以简化事情并避免进行连接。不过,我猜想,表中有一些列DataOwners可以标识特定所有者应复制到哪个从属设备。

假设您只想复制增量更改,您需要在主数据库的基表上创建一些物化视图日志。您可能希望在从属数据库上配置刷新组,以便所有物化视图同时刷新并且在事务上彼此一致。

于 2012-04-10T14:58:18.797 回答
1

Oracle Golden Gate 软件可以完成所有这些任务。插入/更新/删除与主数据库的顺序相同,因此可以避免外键和其他约束问题。

MasterDatabase Extract 生成一个跟踪文件,然后将数据拆分到 DB 1、2、3 和 4。

它还可以进行多种方式的复制,即 DB 1 将数据发送回主 DB。

除了金门,触发器可能是您的另一个选择。但它需要一些编程。

于 2012-04-10T16:56:49.800 回答