Chat now with support
Chat with Support

SharePlex 11.4 - 管理者ガイド

このガイドについて このガイドで使用される表記規則 SharePlexの概要 SharePlexの実行 SharePlexの複数のインスタンスの実行 sp_ctrlでのコマンドの実行 SharePlexパラメータの設定 データレプリケーションの設定 コンテナデータベースとの間のレプリケーションの設定 名前付きキューの設定 分割レプリケーションの設定 変更履歴ターゲットへのレプリケーションの設定 レプリケーション戦略の設定 DDLレプリケーションの設定 エラー処理の設定 データトランスフォーメーションの設定 セキュリティ機能の設定 SharePlexユーザのセキュリティグループへの割り当て 本番システムでのレプリケーションの開始 SharePlexの監視 レプリケーションの問題の防止と解決 非同期データのrepair Captureプロセスの調整 Postプロセスの調整 Oracleフェールオーバー後のレプリケーションのリカバリ アクティブなレプリケーション環境に対する変更 Oracleアプリケーションのパッチまたはアップグレードの適用 ソースまたはターゲットのOracleデータのバックアップ トラブルシューティングのヒント 付録A: ピアツーピア図 付録B: SharePlex環境変数

トランスフォーメーションの概要

トランスフォーメーションでは、ターゲットデータベースにSQL操作を適用する代わりに、PL/SQLプロシージャトランスフォーメーションルーチンとして定義を呼び出すようにPostプロセスに指示します。トランスフォーメーションによって、ターゲットにポストする前に、またはターゲットのポストの代わりにレプリケートされたデータを操作することができます。

例えば、ソース側のテーブルとターゲット側のテーブルの構造が異なる場合はある人の姓と名がソース側のテーブルでは1つの列に含まれるが、ターゲット側のテーブルでは別の列にある場合など、レプリケーションに成功するように、これらの列のデータを変換するトランスフォーメーションルーチンを記述することができます。トランスフォーメーションルーチンを使用してデータ型、測定単位、文字セットを変換することができます。また、I/Oオーバーヘッドを削減するためにデータベースのトリガーの代わりに使用したり、その他多くのビジネス要件に使用したりすることができます。

テーブルにトランスフォーメーションを指定した場合、Postはレプリケートされたデータに対して何も行いません。その代わりに、トランスフォーメーションルーチンにデータ値を渡すため、プロシージャでデータの形式と送信先の両方を制御することができます。ターゲット側のテーブルへのポスト、別の場所へのポスト、またはその両方が可能です。したがって、ルーチンを記述する場合は、プロシージャの中にポストに必要なSQL操作を含める必要があります。

サポート対象のソース

Oracle

サポート対象

Oracle

サポートされているレプリケーション戦略

トランスフォーメーションは、同一の構造やデータの維持を考慮することなく、SharePlexを使用して1つのテーブルから別のテーブルにデータを転送する便利な方法です。このため、レポート作成、ブロードキャスト、データマート、およびウェアハウスの用途に有効です。

トランスフォーメーションは、ピアツーピアや高可用性レプリケーション環境には適していません。高可用性を実現するには、レプリケーションによって同期させた同一のデータベースが必要です。ピアツーピアレプリケーションでは、SharePlexは、同じレコードに同時に変更があった場合にコンフリクトを検出して解決できなければなりません。データが変換されると、SharePlexは同期を検証し、コンフリクトを検出するために前後の値を比較することができません。

サポートされている操作

トランスフォーメーションでは、INSERT、UPDATE、DELETEの操作のみがサポートされています。プロシージャを開発する際には以下が可能です。

  • 3つの操作のタイプすべてに対して1つのプロシージャを作成することも、操作のタイプごとにプロシージャを作成することもできます。
  • 1つのプロシージャをすべてのテーブルに使用することも、異なるテーブルに異なるプロシージャを使用することもできます。SharePlexでは、このためにワイルドカードを使ってテーブルを指定できます。

トランスフォーメーションルーチンが個のテーブルに指定され、そのテーブルが別のルーチンが指定されたテーブルグループの一部でもある場合、関連するDML操作が発生すると、そのテーブルに固有のルーチンだけがそのテーブルに使用されます。

トランスフォーメーションを使用する際の考慮事項

トランスフォーメーションによってデータが変更され、SharePlexはデータをポストしないため、トランスフォーメーションによってレプリケーションの動作が変更されます。これはSharePlex処理のカスタマイズです。トランスフォーメーション手順を確実に成功させるために、トランスフォーメーションを実施する前に以下の考慮事項を確認してください。

権限

トランスフォーメーションのためにPL/PGSQLを通じてアクセスするテーブルには、オブジェクトの所有者からSharePlexに暗黙的に付与された権限が必要です。

キー

PRIMARYまたはUNIQUEキーは、トランスフォーメーションを使用するすべてのテーブルに必要です。SharePlexは、キーを使用してUPDATEとDELETEに対するターゲット側の行を特定します。これにより、UPDATE操作のターゲット側のテーブルからトランスフォーメーションルーチンに値を返すことができます。ターゲットシステムでキーの変更を許可しないでください。許可すると、SharePlexはルーチンに値を渡すための行を特定することができなくなります。

ルーチンのテスト

意図したとおりに動作することを確認し、あるルーチンが別のルーチンを打ち消さないことを確認するために、本番稼働環境に投入する前にトランスフォーメーションルーチンをテストしてください。データが変換されると、SharePlexは、ルーチンが正しく機能しているかどうかの指標である同期を検証するために前後の値を比較することができません。同期を確認する唯一の方法は、compareコマンドにkeyオプションを使用することです。このオプションはキーの値だけを比較するもので、同期の完全な確認にはなりません。欠落している行や余分な行を検出するだけです。これは、ターゲットデータが変換されているため、非キー列の値がソース列の値と適切に相関しているかどうかを示すものではありません。

これらの理由から、repairコマンドはデータの再同期には使用できません。再同期の手順は、各企業のビジネスルールとデータベース環境に基づいて独自に考案する必要があります。

日付

SharePlexのトランスフォーメーションのデフォルトの日付形式はMMDDYYYY HH24MISSです。デフォルトの日付を持つテーブルでは、この形式を使用する必要があります。使用しないとトランスフォーメーションでエラーが返されます。デフォルトの日付でテーブルを作成する前に、SQL*Plusで以下のコマンドを使用して日付形式を変更してください。

ALTER SESSION SET nls_date_format = 'MMDDYYYYHH24MISS'

その他の考慮事項

  • トランスフォーメーションではLOB列とLONG列の変更はサポートされません。
  • プロシージャにデータを渡すための処理のオーバーヘッドが、プロシージャ自体を実行するためのオーバーヘッドに加わることで、通常のレプリケーションやポスティングよりもターゲットシステムの全体的なパフォーマンスが低下します。
  • 一般的なコンフリクト解決とトランスフォーメーションの両方に同じPL/SQLパッケージが使用されます名前はsp_crテーブルには、一般的なコンフリクト解決かトランスフォーメーションのいずれかを使用しますが、両方を使用することはできません。変換されたテーブルはSharePlexでcompareすることができず、コンフリクトの解決は成功しません。両方が使われている場合、SharePlexはトランスフォーメーションルーチンのみを呼び出します。該当する場合、同じ設定内の異なるテーブルに対して一般的なコンフリクト解決とトランスフォーメーションを使用することができます。詳細については、ピアツーピアレプリケーションの設定 を参照してください。

トランスフォーメーションの展開

トランスフォーメーションの展開には以下のステップがあります。

  1. トランスフォーメーション対象のソース側とターゲット側のテーブルの設定エントリを作成します。トランスフォーメーションを使用するテーブルには特別な設定手順はありません。他のテーブルと同じように設定します。詳細については、設定ファイルの作成を参照してください。
  2. トランスフォーメーションルーチンを作成します。詳細については、トランスフォーメーションルーチンの作成を参照してください。
  3. トランスフォーメーションファイルを作成し、トランスフォーメーションルーチンの呼び出しをSharePlexに指示します。詳細については、トランスフォーメーションファイルの作成を参照してください。

トランスフォーメーションルーチンの作成

トランスフォーメーションルーチンは動的PL/SQLプロシージャ言語で記述します。sp_crという名前のパブリックパッケージで定義されているパラメーター、レコード構造、テーブル構造を使用します。このパッケージは、データベースのSharePlexスキーマにインストールされています。このパッケージでは以下のパラメーターを使用します。

プロシージャインターフェイス

このテンプレートに従ってプロシージャを作成してください。

(table_info in outsplex.sp_cr.row_typ, col_values insplex.sp_cr.col_def_tabtyp)

ここで:

  • splexSharePlexのスキーマです。
  • sp_crはPL/SQLレコードおよびテーブルの構造を含むパッケージの名前です。
  • row_typは、in/out変数を渡すPL/SQLレコードの名前ですパッケージの定義」を参照
  • col_def_typeは、列情報を保存するPL/SQLテーブルの名前ですcol_def_typeテーブル」を参照
パッケージの定義

SharePlexは、SharePlexのデータベーススキーマのsp_crという名前を持つパブリックパッケージのPL/SQLレコードとテーブルの構造を定義します。 このパッケージでは以下のパラメーターを使用します。

CREATE SCHEMA IF NOT EXISTS sp_cr;
CREATE TYPE sp_cr.row_typ AS
(src_host VARCHAR(32),
src_db VARCHAR(32),
src_time VARCHAR(20),
statement_type VARCHAR(6),
source_table VARCHAR(128),
target_table VARCHAR(128),
native_error INTEGER,
sql_state VARCHAR(10)
);
CREATE TYPE sp_cr.col_def_typ AS
(column_name VARCHAR,
datatype VARCHAR,
is_key BOOLEAN,
is_changed BOOLEAN,
old_value VARCHAR ,
new_value VARCHAR
);
CREATE SEQUENCE EXC_SEQ START WITH 1 INCREMENT BY 1 MINVALUE 1 CACHE 20 NO CYCLE ;
 
IN変数

行の操作によってコンフリクトが発生するたびに、SharePlexはこのメタデータ情報をプロシージャに渡します。

変数 説明
src_host

操作が実行されたソースシステムの名前。文字と小文字は区別され、例えばSysAのように、ソースシステムと同じ大文字と小文字を使用して渡されます。ターゲットシステム上で名前付きpostキューが使用されている場合、この変数は、例えばpostq1などのpostキューの名前で構成されます。

注: 最大文字数は32文字です。32文字を超えるホスト名は32文字に切り詰められます。

src_ora_sid ソースデータベースのORACLE_SID。大文字と小文字は区別され、oratabファイルまたはV$PARAMETERテーブルと同じ大文字と小文字を使用して渡されます。
src_ora_time ソースREDOログ内の変更レコードのタイムスタンプ。
source_rowid ソース行の行ID。例えば'123456'のように、一重引用符で囲まれたリテラルとして渡されます。
target_rowid ターゲットデータベースの対応する行の行ID。SharePlexは、ターゲットデータベースに問い合わせることで行IDを取得します。例えば'123456'のように、一重引用符で囲まれたリテラルとして渡されます。PRIMARYキーを使用して行が見付からない場合、値はNULLとなります。
statement_type 操作がINSERT、UPDATE、DELETEステートメントのどれであるかを示すI、U、Dのいずれかの文字。
source_table owner.tableで表すソース側のテーブルの所有者と名前。この値では大文字と小文字を区別します。これは、データベースでのテーブルの命名方法と同じです。例えば"scott". "emp"のように、二重引用符で囲んで渡します。
target_table owner.tableで表すターゲット側のテーブルの所有者と名前。この値では大文字と小文字を区別します。これは、データベースでのテーブルの命名方法と同じです。例えば"scott". "emp"のように、二重引用符で囲んで渡します。
oracle_err

これは、プロシージャの使用目的がコンフリクト解決かトランスフォーメーションかによって異なります。

トランスフォーメーション: SharePlexは0の値をこの変数に渡します。この変数はコンフリクトの解決のみに使用されます。

コンフリクト解決: コンフリクトの原因となったOracleのエラー番号。

OUT変数

これらの変数は、プロシージャに成功したか失敗したかに基づいてSharePlexのアクションを指示します。

変数 説明
status

プロシージャが成功したかどうかを定義します。このパラメーターには値を指定する必要があります。

  • 0の値は、正常に実行されたことを意味します。この動作は、プロシージャの使用目的がコンフリクト解決かトランスフォーメーションかによって異なります。

    トランスフォーメーション: PostはSQLを書き込みません。トランスフォーメーションに成功すると、SharePlexはイベントログにエラーメッセージを書き込まず、postキューにある次のレプリケートされた操作を読み込むことで処理を続行します。

  • コンフリクト解決: 0の値は、SQLステートメントを続行するようにSharePlexに指示します。コンフリクト解決に成功すると、SharePlexはイベントログにログエントリを書き込みません。
  • 1の値は、プロシージャが失敗したことを意味します。この場合、SharePlexが取るアクションは、アクション変数として指定したものによって異なります。
  • トランスフォーメーションのみ7の値は実行に失敗したことを意味し、Postプロセスの停止を指示します。
action

希望するSharePlexのアクションを定義します。これは、プロシージャの使用目的がトランスフォーメーションかコンフリクト解決かによって異なります。

トランスフォーメーション: このパラメーターには0の値を指定する必要があります。これは、SQLステートメントをポストしないようにSharePlexに指示します。トランスフォーメーションルーチンは、トランスフォーメーションの結果をターゲット側のテーブルや別のテーブルにポストします。このアクションの結果は、レポート変数に指定した内容によって異なります。

コンフリクト解決: コンフリクト解決プロシージャに失敗した場合に取るべきアクションを指定します。このパラメーターには値を指定する必要があります。

  • 0の値は、SQLステートメントをポストしないようにSharePlexに指示します。このアクションの結果は、reporting変数に指定した内容によって異なります。

    さらに、コンフリクト解決ファイルに記載されている次のコンフリクト解決プロシージャがあれば、それを試すようにSharePlexに指示します。

  • 値1は、SharePlexの内部で使用するために予約されています。使用しないでください。
  • 2の値は、コンフリクト解決ファイルに記載されている次のコンフリクト解決プロシージャが存在すれば、それを試すようにSharePlexに指示します。
reporting

不成功に終わったプロシージャの結果をSharePlexがどのように報告するかを決定します。このパラメーターには値を指定する必要があります。

  • 0の値は、SID_errlog.sqlログにエラーを報告したり、失敗したSQLステートメントを書き込んだりしないようにSharePlexに指示します。
  • 値1と2は、SharePlexの内部で使用するために予約されています。使用しないでください。
  • 3の値は、失敗したSQLステートメントをSID_errlog.sqlログに書き込み、イベントログにエラーを報告するようにSharePlexに指示します。

col_def_typeテーブル

SharePlexは、レプリケートされた操作ごとにcol_def_tabtyp PL/SQLテーブルを作成します。 このテーブルには列情報が保存されます。これは、プロシージャの使用目的がトランスフォーメーションかコンフリクト解決かによって異なります。

  • トランスフォーメーション: 行を操作するたびに、SharePlexは列情報をcol_def_typeに書き込みます。
  • コンフリクトの解決: 行の操作でコンフリクトが発生するたびに、SharePlexは列情報をcol_def_tabtypに書き込みます。

すべてのフィールドはSharePlexによってルーチンに渡されますが、SharePlexが行を見付けられない場合は、すべてのフィールドに値があるとは限りません。

以下はcol_def_tabtypテーブルに入力するために使用するデータ型です。

CREATE SCHEMA IF NOT EXISTS sp_cr;
CREATE TYPE sp_cr.row_typ AS
(src_host VARCHAR(32),
src_db VARCHAR(32),
src_time VARCHAR(20),
statement_type VARCHAR(6),
source_table VARCHAR(128),
target_table VARCHAR(128),
native_error INTEGER,
sql_state VARCHAR(10)
);
CREATE TYPE sp_cr.col_def_typ AS
(column_name VARCHAR,
datatype VARCHAR,
is_key BOOLEAN,
is_changed BOOLEAN,
old_value VARCHAR ,
new_value VARCHAR
);
CREATE SEQUENCE EXC_SEQ START WITH 1 INCREMENT BY 1 MINVALUE 1 CACHE 20 NO CYCLE ;
col_def_tabtypの説明
説明
column_name 例えばemp_last_nameなど、ソース側のテーブルからレプリケートされた列の名前をプロシージャに伝えます。この値では大文字と小文字を区別しません。
data type 例えばVARCHAR2など、レプリケートされた列のデータのデータ型をプロシージャに伝えます。この値は常に大文字です。
is_key 列がキー列であるかどうかをプロシージャに伝えます。キー列の場合、SharePlexTRUEの値を渡します。列がキーの一部でない場合、SharePlexFALSEの値を渡します。
is_changed

列の値が変更されたかどうかをプロシージャに伝えます。変更された場合、SharePlexTRUEの値を渡します。列が変更されない場合、SharePlexFALSEの値を渡します。

  • INSERTの場合、NULL以外の値でis_changedTRUEになります。どの列もデータベースに存在しないためです。NULLの値が挿入された場合、is_changedFALSEになります。
  • UPDATEの場合、キー列以外ではis_changedTRUEになります。キー列の場合、is_changedは通常FALSEですが、SharePlexは変更されたキー列の値を渡します。

    コンフリクト解決のみ: ターゲットシステム上でキー値も変更された場合、SharePlexは正しい行を見付けることができず、コンフリクト解決に失敗する可能性があります。

  • DELETEの場合、is_changedは常にFALSEになります。これは、SharePlexがDELETEステートメントのキー値のみをレプリケートするからです。
old_value

レプリケートされた列の、ソースシステムで変更される前の古い値をプロシージャに伝えます。INSERTでは、この列はNULLです。これは、INSERTを実行する前にターゲットデータベースに行が存在しなかったためです。

コンフリクト解決のみ: これは、UPDATEとDELETEの同期チェックの一環としてSharePlexがソース列とターゲット列を比較したときの基準となるプリイメージです。SharePlexによって渡された古い値が、ターゲット行から得られたcurrent_valueの値と一致しない場合、コンフリクトが発生します。

new_value ソースシステムで変更された、レプリケートされた列の新しい値をプロシージャに伝えます。
current_value ターゲット側のテーブルの列の現在の値をプロシージャに伝えます。SharePlexがターゲット行を見付けられない場合、値はNULLになります。
col_def_tabtypテーブルのエントリの例操作のタイプ別

以下の表は、各操作で起こりうる結果を示しています。

INSERT操作
column_name is_changed old_value new_value current_value1 is_key
C1 TRUE NULL bind NULL FALSE
C2 TRUE NULL bind NULL TRUE
C3 FALSE NULL NULL NULL TRUE | FALSE

1 INSERTが失敗するのは、同じPRIMARYキーを持つ行が既にターゲットデータベースに存在するためです。SharePlexはINSERTの現在の値を返しません。

UPDATE操作
column_name is_changed old_value new_value current_value1, 2 is_key
C1 TRUE bind bind NULL | target_value FALSE
C2 FALSE bind NULL NULL | target_value TRUE
C3 TRUE bind bind NULL | target_value TRUE

1コンフリクト解決UPDATEが失敗するのは、SharePlexがPRIMARYキーとプリイメージを使用して行を見付けることができないためです。行が見付からない場合、SharePlexはPRIMARYキーのみを使用して行を検索します。SharePlexが行を見付けた場合、変更された列だけでなくキー列の現在の値も返します。SharePlexがPRIMARYキーを使用しただけでは行を見付けられない場合、SharePlexNULLを返します。

2トランスフォーメーションUPDATEの場合、SharePlexはPRIMARYキーとプリイメージを使用して行を検索することはできません。これはトランスフォーメーションによりプリイメージが異なるためです。別の方法として、PRIMARYキーだけを使用して行を検索することもできます。見付かった場合、SharePlexは変更された列だけでなくキー列の現在の値も返します。PRIMARYキーだけでは行を特定できない場合、current_valueはNULLになります。

DELETE操作
column_name is_changed old_value new_value current_value1 is_key
C1 FALSE bind NULL NULL TRUE

1 DELETEが失敗するのは、SharePlexがPRIMARYキーを使用して行を見付けることができなかったためです。したがって、SharePlexはNULLを返します。

トランスフォーメーションファイルの作成

SQL操作のポストではなくトランスフォーメーションルーチンの呼び出しをSharePlexに指示するには、transformation.SIDファイルを使用します。ここで、SIDはターゲットデータベースのORACLE_SIDです。SQL操作を実行する前に、Postはこのファイルを読み込んで、呼び出さなければならないトランスフォーメーションルーチンがあるかどうかを判断します。

このファイルの場所

空白のtransformation.SIDファイルでは、SIDはターゲットインスタンスのORACLE_SIDです。これは、SharePlexのインストール時にSharePlexの変数データディレクトリのdataサブディレクトリに含まれていたものです。ターゲットシステム上のファイルを使用します。

このファイルがない場合は、ASCIIテキストエディタでASCII形式のファイルを作成することができます。名前はtransformation.SIDでなければなりません。ここで、SIDはターゲットインスタンスのORACLE_SIDです。

注: SIDでは大文字と小文字を区別します。

重要: transformation.SIDファイルは、アクティブな設定ごとに1つだけでなければなりません。

ファイルへの入力方法

以下のテンプレートを使用して、プロシージャを1つ以上のオブジェクトおよび操作のタイプにリンクします。

owner.object {i | u | d | iud} owner.procedure

ここで:

  • owner.objectターゲットオブジェクトの所有者と名前またはワイルドカードエントリです構文規則」を参照
  • i| u | dは、指定されたプロシージャによって変換される操作のタイプです。例えばidiudのように、一部またはすべての操作のタイプを指定することができます。大文字でも小文字でも構いません。
  • owner.procedureは、指定されたオブジェクトと操作のタイプを扱うプロシージャの所有者と名前です。
構文規則
  • オブジェクトの指定、操作のタイプの指定、プロシージャの指定の間には、少なくとも1つのスペースを空けなければなりません。
  • LIKE演算子とSQLワイルドカード%を使用すると、検索文字列を使用して複数のオブジェクトを指定できます例を参照
  • アンダースコア_を使用して1文字のワイルドカードを表すことができます。アンダースコア文字を含むテーブル名emp_salなどの場合、SharePlexはバックスラッシュ\を拡張文字として認識し、アンダースコアがワイルドカードではなくリテラルであることを示します例: like:scott.%\_corp\_emp。LIKE演算子を使用しない場合、オブジェクト名にアンダースコアが含まれていても、バックスラッシュ拡張文字は必要ありません。
  • ファイルのいずれかの場所にコメント行を入れます。コメント行の先頭にはポンド記号#を付けます。
トランスフォーメーションファイルの例
scott.sal IUD scott.sal_tr
like:scott.%\_corp\_emp IUD scott.emp_tr1
like:scott% IUD scott.emp_tr2
scott.cust U scott.sal_tr

レプリケーション中にファイルを変更する方法

トランスフォーメーションファイルはレプリケーション中にいつでも変更でき、テーブルやプロシージャを追加したり削除したりできます。ファイルを変更したら、Postプロセスを一旦停止し、再度開始します。

セキュリティ機能の設定

SharePlexは、ローカルシステム上およびネットワーク経由で転送中のレプリケートされたデータを保護するのに役立つ多くのセキュリティ機能を備えています。この章では、これらの機能の設定と使用に関するガイドラインを説明します。

注意: PostgreSQLからPostgreSQLへデータをレプリケートする場合、SharePlexはSSL/TLSによるデータの保護およびエクスポートとインポート間のデータの暗号化セキュリティ機能のみをサポートします。

内容
Related Documents

The document was helpful.

Select Rating

I easily found the information I needed.

Select Rating