1

次のシナリオを想定してください: 大量のデータを含むマスター データベースがあり、このデータベースには、この例で DataOwners と呼ぶキー テーブルがあります。DataOwners テーブルには 4 つのレコードがあり、各レコードはそれぞれ他のレコードです。データベース内のテーブルは、DataOwners のレコードに直接的または間接的に「属して」おり、属しているということは、外部キーでそれにリンクされていることを意味します。また、マスター データベースからのレプリケーションによってのみ更新されるマスター データベースとまったく同じ構造を持つ他の 2 つのスレーブ データベースもありますが、SlaveDatabase1 には DataOwner 2 からのレコードのみが含まれ、SlaveDatabase2 には DataOwner 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 に答える