変更履歴ターゲットがレプリケーションターゲットと異なる点は、変更履歴ターゲットは単にソースデータの現在の状態のミラーを維持するのではなく、ソースオブジェクトに対して行われるすべての変更の記録を維持するということです。通常のレプリケーションでは、現在のターゲットデータに変更データがオーバーレイされますが、変更履歴では、変更データが新しいレコードとしてターゲットに挿入されます。古いデータは、変更の段階的な記録として保存されます。履歴データは、データマイニングや顧客との紛争解決などの目的で照会・分析することができます。
SharePlexを使用してセカンダリサーバ上で変更履歴を維持することで、本番データベースからオーバーヘッドをオフロードすることができます。このようなオーバーヘッドには、履歴行を追加するSQL作業、それらの行の追加ストレージ、履歴データに対するクエリアクティビティなどがあります。
注意: ファイル、JMS、およびKafkaターゲットは、デフォルトで変更履歴をサポートしています。これは、すべてのソース変更が個別のXMLレコードとして書き込まれるためです。古いデータに新しいデータがオーバーレイされることはありません。これらのターゲットでサポートされているメタデータは、PostがXMLを書き込む際に自動的に含められます。サポートされるメタデータのリストについては、『SharePlexリファレンスガイド』のtargetコマンドを参照してください。
このレプリケーション戦略では以下をサポートします。
Oracle
Oracleターゲット
SharePlexは、以下の操作に対する変更履歴行の追加をサポートしています。
注意: Postはテーブルから列を削除しませんが、変更履歴行を作成します。
注意: Postはテーブルに列を追加しますが、変更履歴行は作成しません。
注意: SharePlexは、基本タイプにUDTフィールドを持つテーブルのみをレプリケートします。複数のサブタイプが含まれる列の場合、レプリケーションは基本タイプのフィールドにのみ適用されます。
変更履歴設定では、各ターゲットテーブルは履歴テーブルとして機能し、ソースデータに加えられたすべての変更を連続した一連の行として記録します。
SharePlexによって挿入されるそれぞれの新しい変更行には以下が含まれます。
SharePlexは、更新操作の変更前イメージを履歴に含めたり、履歴に含める操作タイプを制御したりするように構成できます。例えば、更新と削除だけを含めることができます。
変更履歴を設定するには、SharePlex設定ファイルで特別な構文を使用します。また、オプションでフィルタルールやその他の属性を設定し、ニーズに合わせて履歴をカスタマイズします。
以下の手順で変更履歴設定ファイルを作成します。
履歴を追跡するソーステーブルと同じ名前と構造を持つOracleターゲット履歴テーブルを作成します。ただし、すべての列のすべての制約を省略します。
重要: Oracleターゲットテーブルに、PRIMARY KEY、FOREIGN KEY、UNIQUE、NOT NULL、CHECKの制約を含めてはならず、DEFAULT値を使用して列を定義することもできません。これは変更の履歴であるため、ある行に、同じキーを持つ別の行と同じイメージが含まれる場合があります。Postは変更履歴ターゲットに対して整合性チェックを行いません。
ソースシステムで、以下の構文を使って設定ファイルを作成します。設定ファイルの作成方法の詳細については、「データをレプリケートするためのSharePlexの設定ページを参照し て く だ さ い。
datasource_specification | ||
src_owner.table | !cdc:tgt_owner.table | host@c.SID |
ここで
(オプション)ターゲットテーブルで以下のスクリプトを実行し、デフォルトの名前を持つデフォルトのメタデータ列を追加します。追加の設定をしなくても、Postがデフォルトのメタデータ列に自動的に入力します。スクリプトは、要件に合わせてカスタマイズすることができます。
product_dir/util/add_change_tracking_columns.sql
注意:
|
このセクションでは、SharePlex変更履歴設定をカスタマイズする方法について説明します。
targetコマンドをcolnameオプションと共に使用すると、ターゲットメタデータの列名をカスタマイズできます。手順については、『SharePlexリファレンスガイド』を参照してください。
SP_OPO_TRACK_PREIMAGEパラメータをUに設定することで、ターゲットテーブルに変更前のイメージを含めることができます。このパラメータを指定すると、Postは追跡対象のソーステーブルに変更が加えられるごとに、ターゲットテーブルに2つの行を挿入します。1つは変更後のイメージ用、もう1つは変更前のイメージ用です。変更前イメージは、SP_OCT_USE_SUPP_KEYSパラメータが使用されていない限り、キー値と変更された列の変更前の値で構成されます。
変更前イメージが有効な場合、2つのレコードのSHAREPLEX_SOURCE_OPERATION列値は次のようになります。
UPDATE BEFORE
UPDATE AFTER
注意: RedoログにはLOBの変更前イメージが含まれていないため、変更前行にはLOB列の変更前イメージは含まれません。
targetコマンドのset cdc preimageオプションを使用すると、SP_OPO_TRACK_PREIMAGEのグローバル設定をテーブルレベルでオーバーライドできます。
SP_OPO_TRACK_PREIMAGEおよびtargetコマンドの詳細については、『SharePlexリファレンスガイド』を参照してください。
このオプションはOracleデータに対してのみ有効です。各ターゲット履歴レコードに、変更された列だけでなく、すべてのテーブル列の値を含めるには、以下のように設定します。
追跡するソーステーブルのすべての列のサプリメンタルロギングをオンにします。次などを考慮します。
Alter table emp ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
注意: SP_OCT_USE_SUPP_KEYSとSP_OPO_TRACK_PREIMAGEの両方が有効な場合、変更前イメージには変更前のすべての列の値が含まれます。
DML操作タイプの変更履歴を無効にするには、SP_OPO_TRACK_OPERATIONSパラメータを適切な値に設定します。値はスラッシュ(/)で区切ります。例えば、挿入と更新のみの変更履歴を維持するには、パラメータをI/Uに変更します。デフォルトはI/U/Dで、すべてのDML操作タイプが履歴レコードに送信されます。
targetコマンドのset ruleオプションを使用すると、列に条件を適用して、変更をターゲット履歴テーブルに適用するかどうかを制御できます。例えば、列1と列3が変更された場合はその操作を適用し、他の列に適用されるその他の変更は破棄するというルールを指定できます。手順については、『SharePlexリファレンスガイド』を参照してください。
デフォルトでは、COMMITレコードは履歴テーブルに含まれません。COMMITごとに行を挿入するようにPostを設定するには、SP_OPO_TRACK_COMMITSパラメータを1に設定します。
この章では、さまざまなレプリケーションの目的をサポートするためにSharePlexを設定する方法を説明します。本番環境での実装は、1つのソースとターゲットによる基本的な設定から、名前付きキュー、複数のターゲット、パーティション化されたデータなどを持つ複数のSharePlexインスタンスまで、多岐にわたります。
組織がSharePlexを展開する場合に考えられるあらゆる方法を予測し、文書化することは困難です。したがって、このドキュメントでは、基本的な展開タイプを設定するための手順をできるだけ明確に説明することで、ニーズに合わせて組み合わせたり拡張したりできるようすることを目指しています。また、プロフェッショナルサービス組織を通じてその他の展開サポートをご利用いただくこともできます。
PostgreSQLからPostgreSQLへのレプリケーションの設定
PostgreSQLまたはPostgreSQL Database as a ServiceからOracleへのレプリケーションの設定
OracleからOracleへのユーザ定義コンフリクト解決ルーチン
ユーザ定義のコンフリクト解決ルーチン(PostgreSQLまたはPostgreSQL Database as a ServiceからPostgreSQLへ)
ユーザ定義のコンフリクト解決ルーチン(PostgreSQLまたはPostgreSQL Database as a ServiceからOracleへ)
この説明では、1つのソースシステムから1つまたは複数のターゲットシステムにデータを共有または配布する目的でSharePlexをセットアップする方法を示します。
この戦略は、以下のようなビジネス要件をサポートします。
OracleおよびPostgreSQL
すべて
このレプリケーション戦略では以下をサポートします。
ターゲットシステムでシーケンスが不要な場合は、レプリケートしないでください。レプリケーションが遅くなる可能性があります。ソーステーブルのキー生成にシーケンスが使用されている場合でも、レプリケートされた行がターゲットシステムに挿入されると、シーケンス値がキー列の一部になります。シーケンス自体をレプリケートする必要はありません。
重要! これらの説明は、SharePlex設定ファイルを完全に理解していることを前提としています。重要な構文要素の省略表現が使用されています。
詳細については、データをレプリケートするためのSharePlexの設定を参照してください。
このトピックの設定構文では、プレースホルダは以下を表しています。
重要! データをレプリケートするためのSharePlexの設定ページを参照してください。
同一システム上のレプリケーションでは以下の設定をサポートしています。
datasource_specification |
||
source_specification1 | target_specification1 | hostA[@db] |
source_specification2 | target_specification2 | hostA[@db] |
この例では、同じローカルシステム上の同じOracleインスタンス、 異なるOracleインスタンス(UnixとLinuxのみ)、および異なるターゲットタイプにデータをレプリケートする方法を示します。
Datasource:o.oraA | ||
hr.emp | hr.emp2 | hostA@o.oraA |
hr.sal | hr.sal2 | hostA@o.oraB |
fin.* | fin.* | hostA@r.mss |
act.* | !file | hostA |
この例では、同じローカルシステム上の同じPostgreSQLインスタンス、異なるPostgreSQLインスタンス(Linuxのみ)、および異なるターゲットタイプにデータをレプリケートする方法を示します。
Datasource:r.pgA | ||
hr.emp | hr.emp2 | hostA@r.pgA |
hr.sal | hr.sal2 | hostA@r.pgB |
fin.* | fin.* | hostA@r.mss |
同じマシン間のレプリケーションでは、Exportプロセスが省略されます。しかし、SharePlex Managerはexportキューが存在することを想定しています。SharePlex Managerでこの設定を使用する場合は、以下のように明示的にexportキューを設定する必要があります。ルーティングマップのhostA*コンポーネントは、exportキューとExportプロセスを作成し、ExportプロセスはデータをImportプロセスに送信し、次にpostキューに送信します。
datasource_specification |
||
source_specification1 | target_specification1 | hostA*hostA[@db] |
source_specification2 | target_specification2 | hostA*hostA[@db] |
datasource_specification |
||
source_specification1 | target_specification1 | hostB[@db] |
source_specification2 | target_specification2 | hostB[@db |
この例の最後の行は、同じリモート・ターゲット・システム上の異なるターゲットタイプにデータをレプリケートする方法を示しています。
Datasource:o.oraA | ||
hr.emp | hr.emp2 | hostB@o.oraB |
hr.sal | hr.sal2 | hostB@o.oraB |
fin.* | !file | hostB |
このトポロジーはブロードキャストレプリケーションとして知られています。これにより、異なるデータを異なるターゲットシステムに配布したり、すべてのデータをすべてのターゲットシステムに配布したり、必要に応じて組み合わせたりする柔軟性が得られます。これは、ソースシステムがすべてのターゲットシステムに直接接続できることを前提としています。すべてのルーティングは1つの設定ファイルを通じて処理されます。詳細については、中間システムを介したレプリケーションの設定を参照してください。
ターゲット指定がすべてのターゲットで同一の場合: ソースオブジェクトのターゲット指定がすべてのターゲットシステムで同一である場合、ルートごとに個別のエントリを入力するのではなく、複合ルーティングマップを使用できます。詳細については、データをレプリケートするためのSharePlexの設定を参照してください。
datasource_specification |
||
source_specification1 | target_specification1 | hostB[@db]+hostC[@db][+...] |
source_specification2 | target_specification2 | hostC[@db]+hostD[@db][+...] |
datasource_specification |
||
source_specification1 | target_specification1 | hostB[@db] |
source_specification1 | target_specification2 | hostC[@db][+...] |
注意: この例には、考えられるすべてのソースとターゲットの組み合わせが含まれているわけではありません。この例の最後の項目は、水平分割レプリケーションを使用して、sales.accountsテーブルのさまざまなデータをさまざまな地域データベースに配布する方法を示しています。
Datasource:o.oraA | ||
hr.emp | hr.emp2 | hostB@o.oraB |
hr.emp | hr."Emp_3" | hostC@r.mssB |
cust.% | cust.% | hostD@o.oraD+hostE@o.oraE |
sales.accounts | sales.accounts | !regions |
Datasource:r.source_DB | ||
hr.emp | hr.emp2 | hostB@r.dbnameA |
hr.emp | hr."Emp_3" | hostC@r.dbnameB |
cust.% | cust.% | hostD@r.demoC+hostE@r.demoD |
重要! すべてのシステム上のSharePlexに同じポート番号を使用してください。
© ALL RIGHTS RESERVED. 利用規約 プライバシー Cookie Preference Center