web-dev-qa-db-ja.com

DELETEDMLを制限しながらOracleDataGuardまたはGoldenGateスタンバイDBレプリケーションを構成する

Data GuardまたはGoldenGateを使用して、マスターが削除クエリをスレーブデータベースに伝播しないスレーブデータベースを作成するにはどうすればよいですか?

マスターのすべてのレコードを保持するレプリケーション/スレーブデータベースが必要ですが、マスターデータベースで削除クエリを実行するときに、スレーブデータベースに伝播してはなりません。

Oracle12cを使用しています

この要件をどのように達成できますか?

1

フィジカルスタンバイではこれを行うことはできません。何らかの論理レプリケーションが必要になります。

論理スタンバイを使用すると、DMLをスキップできますが、それではすべてのDMLがスキップされます。

Oracle Goldengateでは、IGNOREDELETESオプションを指定できるため、削除を簡単にスキップできます。 [〜#〜] ignoredeletes [〜#〜]

では、削除を無視するようにシステムを構成したとしましょう。次の状況を想像してみてください。

insert into mytable (unique_column, other_column) values (1, 1);
commit;

delete from mytable where unique_column = 1;
commit;

insert into mytable (unique_column, other_column) values (1, 2);
commit;

上記は、固有の制約違反のためにレプリケーションを中断します。エラーを無視すると、宛先データベースに新しいデータがありません。

履歴テーブルを作成したいように思えますが、削除操作を無視するだけではありません。以下のサポートノートをご覧ください。

Oracle GoldenGateのベストプラクティス:履歴テーブルの作成(Doc ID 1314698.1)

2
Balazs Papp