SharePlexのレプリケーションではソースとターゲットの概念を使用します。
レプリケーションの目的は、ソースデータとターゲットデータの同期(in-sync)を保つことです。これは、ソースデータの状態が、実行されたトランスフォーメーションやレプリケーションストリーム内のタイムラグを調整しながら、ターゲットデータに正確に反映されることを意味します。
ターゲットデータは、SharePlexがサポートする任意のターゲットタイプにすることができます。データベース内のテーブル、メッセージングキューやトピック内のメッセージ、他のソフトウェアプログラムによって消費されるファイル内のXMLまたはSQLレコードなどがその例です。
このトピックでは、SharePlexのデフォルト設定について説明します。SharePlexの設定は、データストリームの分離やパフォーマンスの向上のためにキューやプロセスを追加するカスタマイズが可能です。
SharePlexでは2つの主要なディレクトリを使用します。
製品ディレクトリ: これはSharePlexのインストールディレクトリで、SharePlexのプログラムとライブラリが格納されています。
変数データディレクトリ: これはSharePlexの作業ディレクトリで、現在のレプリケーション環境を構成するキューファイル、ログファイル、その他のコンポーネントが格納されています。
注意: 多くの場合、これらのディレクトリは、それぞれproductdirおよびvardirと呼ばれます。
SharePlexによってインストールされたファイルやディレクトリを削除、名前変更、または編集しないでください。ディレクトリの中には、レプリケーションに不可欠な隠しファイルが含まれているものもあります。一部のファイルは空のように見えますが、SharePlexの1つまたは複数のプロセスによって参照されているため、元の名前で存在している必要があります。ディレクトリの中には、Questテクニカルサポートの監督下でのみ使用される項目もあります。
本番稼働環境で一般的な使用を目的としたプログラムは、SharePlexのドキュメントで公開されています。SharePlexディレクトリのプログラムに対するドキュメントが見付からない場合は、実行を試みないでください。まず、Questテクニカルサポートへお問い合わせください。
ファイルやディレクトリはSharePlexのバージョンによって異なることがありますが、基本的な構造は以下の通りです。
サブディレクトリ | 内容 |
---|---|
BACKUP | アンインストール情報 |
bin | SharePlex実行可能ファイル |
config | 内部で使用されるコンテンツ |
data | デフォルトのパラメーター設定 |
doc | 例外メッセージのカタログ |
install | (UnixおよびLinuxのみ)インストール、ライセンス、アップグレードに関するスクリプト |
lib | SharePlex 共有ライブラリ |
log | SharePlex ログファイル |
mks_oe | SharePlexで使用されるサードパーティ製ソフトウェアのランタイム・インストール・ファイル |
util | SharePlex ユーティリティ |
.app-modules | (UnixおよびLinuxのみ)生の実行可能ファイルを含む隠し内部ディレクトリ。このディレクトリの内容をプロセスの起動に使用しないでください。 |
.meta-inf | (UnixおよびLinuxのみ)インストールプロセス中に使用されるメタ情報を含む、隠し内部ディレクトリ |
サブディレクトリ | 内容 |
---|---|
config | このSharePlexをインストールするための設定ファイル |
data | ステータスデータベース、設定のアクティベーション情報、ユーザ定義パラメーターの設定、およびレプリケーション活動を指示するその他のユーザ定義ファイル |
db | 設定ファイルを個別にアクティベーションするための内部設定データベース |
downgrd | ソースより古いバージョンのSharePlexターゲットに関する情報 |
dump | コアファイル(プロセスが失敗した場合) |
log | SharePlex ログファイル |
rim | キューファイル(作業データファイル) |
save | アクティブおよび非アクティブな設定に関する情報 |
state | オブジェクトキャッシュやシーケンスキャッシュなど、設定がアクティブなときのSharePlexの最新の状態に関する情報 |
temp | コピー機能や追加機能など、SharePlexの同期関連のプロセスで使用します。 |
oos | SP_OPO_SAVE_OOS_TRANSACTIONパラメーターが有効な場合、非同期操作を含むトランザクションを保存します。 |
sp_copプログラムは、SharePlexのレプリケーションプロセス(Capture、Read、Export、Import、Post)とSharePlexのキューを調整し、特定のタスクを実行する他のすべてのバックグラウンドプロセスを開始します。また、レプリケーションネットワーク内の他のシステムとのやり取りも維持します。一般的に、ほとんどのSharePlexユーザは、開始と停止以外にはsp_copを操作することはほとんどありません。sp_copは、開始されるとバックグラウンドで実行されます。
sp_ctrlを使用して、SharePlexのアクティビティを開始、停止、設定、指示、監視するコマンドを発行することできます。sp_ctrlプログラムは、コマンドを実行するsp_copの子プロセスであるsp_cnc(コマンドおよび制御)プロセスと内部でやり取りします。ユーザとsp_cnc自体とのやり取りはありません。
SharePlexは、SharePlexのメインプロセスであるsp_copによって開始される一連のレプリケーションプロセスを通じてデータをレプリケートします。
Importプロセス: Importプロセスは、Export/Importトランスポートペアの後ろの部分です。Importプロセスはターゲットシステム上で動作し、データを受信してpostキューを構築します。ターゲットにデータを送信するExportプロセスごとに、ターゲットシステム上に1つのImportプロセスが存在します。例えば、2つのソースシステム(それぞれにExportプロセスがある)が1つのターゲットシステムにデータをレプリケートする場合、そのターゲットには2つのImportプロセスが存在します。Importプロセスの名前はsp_mportです。
注: 同一システム上のデータベース間でデータをレプリケートすることができます。この場合、ExportプロセスとImportプロセスは作成されません。Readプロセスが、そのシステム上のpostキューにデータを直接配置します。
SharePlexによるすべての通信とデータの移動は、内部のメッセージングとトランスポートシステムによって処理されます。TCP/IP接続を利用した非同期ストリームプロトコルの使用は、大規模なデータ転送の際に非常に効率的な方法です。この方法は、通信帯域幅を節約しながら、最適なパフォーマンス、信頼性、リスタート機能を保証します。SharePlexはあらゆるTCP/IPネットワーク上でレプリケートできます。
キューは、ソースシステムからターゲットシステムに転送されるレプリケートデータを格納します。キューは、データの安全な非同期転送を促進するチェックポイント・リカバリ・システムの一部です。データは生成された順序でキューを通過します。
データは、次のキューに書き込まれるまで、1つのキューから読み取り/リリース(削除)されることはありません。ネットワーク、システム、またはデータベースで速度の低下、障害の発生、またはレプリケーションプロセスの停止が発生すると、ソースシステムとターゲットシステムのキューにデータが蓄積されます。問題や障害が解決されると、SharePlexは停止した時点から処理を再開します。
SharePlexのレプリケーションでは以下のキューを使用します。
注: SharePlexのすべてのキューファイルは、SharePlexの変数データディレクトリのrimサブディレクトリで作成され、保持されます。
レプリケーションプロセスの多くは、SharePlexのインストール時にソースまたはターゲットデータベースにインストールされる一連の内部オブジェクトによって制御および追跡されます。これらはSharePlexが動作するために不可欠なものであるため、決して変更しないでください。
注意: すべてのオブジェクトがすべてのデータベースで使用されるわけではありません。ほとんどはOracleデータベースに使用されます。データベースにオブジェクトが表示されない場合、そのオブジェクトはデータベースに関連していないか、その情報はSharePlexの内部設定に保存されています。使用中のデータベースにありながら、このリストにないオブジェクトがあれば、それは現在のリリースでは使用されていません。
テーブル |
オブジェクトのタイプ |
説明 |
---|---|---|
DEMO_SRC |
テーブル |
SharePlexのデモンストレーションのソーステーブルとして使用します。 |
DEMO_DEST |
テーブル |
SharePlexのデモンストレーションのターゲットテーブルとして使用します。 |
SHAREPLEX_ACTID |
テーブル |
状態をチェックポイントにするためにCaptureで使用します。 |
SHAREPLEX_ANALYZE |
テーブル |
analyzeコマンドで使用します。 |
SHAREPLEX_CHANGE_OBJECT |
テーブル |
オブジェクトのレプリケーションを停止および再開するためにユーザが使用します。 |
SHAREPLEX_COMMAND |
テーブル |
flush、abort、およびpurgeコマンドに使用します。 |
SHAREPLEX_CONFIG |
テーブル |
新しいアクティベーションの開始を示すためにアクティベーションとCaputureプロセスで使用します。 |
SHAREPLEX_DATA |
テーブル |
Oracle TDEレプリケーションのSharePlexウォレットで使用します。 |
SHAREPLEX_DATAEQUATOR |
テーブル |
compareおよびrepairコマンドとPostプロセスで、それぞれの操作を同期させるために使用します。 |
SHAREPLEX_DATAEQUATOR_INSERT_TEMP |
テーブル |
compareおよびrepairコマンドで一時テーブルとして使用します。 |
SHAREPLEX_DATAEQUATOR_UPDATE_TEMP |
テーブル |
compareおよびrepairコマンドで一時テーブルとして使用します。 |
SHAREPLEX_DATAEQUATOR_DELETE_TEMP |
テーブル |
compareおよびrepairコマンドで一時テーブルとして使用します。 |
SHAREPLEX_DDL_CONTROL |
テーブル |
レプリケーション用に有効になっているDDLの制御を改善するためにSP_OCT_REPLICATE_ALL_DDLパラメーターで使用します。 |
SHAREPLEX_JOBID |
シーケンス |
一意のジョブIDを指定するためにsp_cncプロセスおよびcompare、repair、およびcopyコマンドで使用します。 |
SHAREPLEX_JOBS |
テーブル |
ジョブに関する情報を保存するためにsp_cncプロセスおよびcompare、repair、およびcopyコマンドで使用 |
SHAREPLEX_JOB_STATS |
テーブル |
ジョブに関する情報を保存するためにsp_cncプロセスおよびcompare、repair、およびcopyコマンドで使用 |
SHAREPLEX_JOBS_CONFIG |
テーブル |
disable jobsおよびenable jobsコマンドで使用します。 |
SHAREPLEX_LOB_CACHE |
テーブル |
LOBとして格納されたVARRAYを処理する際にCaptureプロセスで使用します。 |
SHAREPLEX_LOBMAP |
テーブル |
LOB列を持つテーブルでPK/UKロギングが有効になっていない場合に、LOBIDと行をマッピングするCaptureプロセスで使用します。 |
SHAREPLEX_LOGLIST |
テーブル |
非アクティブなRACインスタンスを追跡するためにCaptureプロセスで使用します。 |
SHAREPLEX_MARKER |
テーブル |
PK/UKロギングが有効でない場合にReadプロセスで使用します。 |
SHAREPLEX_OBJMAP |
テーブル |
レプリケーションのオブジェクトを定義するためにアクティベーションとCaptureプロセスで使用します。 |
SHAREPLEX_PARTITION_CACHE |
テーブル |
OracleパーティションIDをレプリケーションのテーブルにマッピングするためにCaptureプロセスで使用します。 |
SHAREPLEX_SYNC_MARKER |
テーブル |
copyコマンドとReadおよびPostプロセスで、それぞれの操作を同期させるために使用します。 |
SHAREPLEX_TRANS または SHAREPLEX_OPEN_TRANS |
テーブル |
チェックポイントを保存し、プライマリからプライマリへの設定で適用されたトランザクションをマークするためにPostプロセスで使用します。 |
データをレプリケートするために、SharePlexは、ソースシステム上のトランザクションデータのストリームを読み取り、設定ファイルで指定されたオブジェクトに加えられた変更をキャプチャします。設定ファイルでは、レプリケートするデータとそれを適用するターゲットを指定します。
レプリケーションを開始するには、設定ファイルをアクティベーションします。これは、sp_ctrlのactivate configコマンドによって、ソースとターゲットのデータを初めて同期させる一連のステップの中で行われます。設定がアクティブな場合、SharePlexはデータレコード全体ではなく、設定ファイルで指定されたオブジェクトに加えられた変更のみをレプリケートするため、高速で信頼性の高いレプリケーションソリューションを実現します。
詳細については、次を参照してください。
SharePlexは、トランザクション操作に関する情報から、ソースシステムからターゲットシステムに送信される1つ以上のメッセージを作成します。メッセージは、SQL操作またはSharePlexの内部操作を反映することができますが、ほとんどの場合、メッセージはINSERT、UPDATE、DELETE、COMMIT、TRUNCATE、またはサポートされているDDL操作です。
注: LONG列やLOB列に対する操作のような大規模な操作の場合、メッセージのサイズに制限があるため、複数のメッセージが必要になることがあります。小さなレコードの配列挿入など、他の操作は逆の結果をもたらします。1つのレコードが多数の操作に対応する可能性があります。例えば、データによっては、70,000行の配列挿入がわずか700個のメッセージとしてトランザクションストリームに記録されることもあります。一般的に、そのようなデータ型に対する多数の変更をレプリケートしているのでなければ、プロセスやキューのステータス出力に表示されるメッセージの数は、同じ数のSQL操作にほぼ対応すると考えることができます。
Postプロセスはpostキューからメッセージを読み込み、レプリケートされたデータの変更をターゲットに適用します。データベースターゲットの場合、PostはSQLステートメントを構築してデータを適用します。データベース以外のターゲットの場合、Postはターゲットが要求する形式(ファイルやメッセージングキューまたはトピックなど)でデータレコードを出力します。
SharePlexがターゲットシステム上でSQLステートメントを作成するデフォルトの方法について、以下に説明します。
同期の概念は主にテーブル間レプリケーションに適用され、Postは、ターゲット内の1つの行だけがレプリケートされる行の変更と一致することを確認するために整合性チェックを実行します。これはファイル、メッセージングターゲット、変更履歴ターゲットには適用されません。これらには、Postによって複製されるすべての操作のレコードが含まれており、そのうちのいくつかは時間が経過しても変わらない可能性があります。Postプロセスは、これらのターゲットに対して整合性チェックを実行しません。
同期化されたソース側のテーブルとターゲット側のテーブルの基本的な特徴は、以下の通りです(トランスフォーメーション機能を使用した場合を除く)。
データ整合性はPostプロセスで確保します。PostではWHERE句を適用して、処理するSQL操作のキー値と前の値を比較します。Postは、ソース側のテーブルとターゲット側のテーブルの間の同期を検証するために以下の論理を使用します。
Postは複製されたINSERTを適用しますが、同じキーを持つ行が既にターゲットにあります。Postは以下のロジックを適用します。
注意: INSERTをポストする際に、キー以外の値を考慮しないようにPostを設定することができます(OracleからOracleにデータを複製する場合にのみ適用可能)。『SharePlexリファレンスガイド』のSP_OPO_SUPPRESSED_OOSパラメーターを参照してください。
Postは複製されたUPDATEを適用しますが、UPDATEのキー値と同じキー値を持つ行がターゲットに見付かりません。または、Postは正しい行を見付けますが、その行の値がUPDATEの前の値と一致しません。Postは以下のロジックを適用します。
注意: ターゲット行の現在の値がUPDATEの後の値と一致する場合、非同期のメッセージを返すようにPostを設定できます(OracleからOracleにデータを複製する場合にのみ適用可能)。『SharePlexリファレンスガイド』のSP_OPO_SUPPRESSED_OOSパラメーターを参照してください。
Postが検証するのは、現在のSQL操作によって変更される行の整合性だけです。ターゲットデータベースでそのテーブルや他のテーブルの他の行が非同期になっているかどうかは検証しません。隠れた非同期状態は、かなり後になって、影響を受ける行に対する変更がSharePlexによって最終的にレプリケートされたり、そのデータを使用する過程で不一致が検出されたりするまで現れない可能性もあります。
検出可能な非同期状態の例
誰かがターゲットにログインし、ターゲット側のテーブルのCOLOR列でRow1を「blue」から「red」に更新します。次に、ソースシステム上のアプリケーションユーザがソース側のテーブルに同じ変更を加え、SharePlexがこれをターゲットにレプリケートします。Postが使用するWHERE句では、ターゲットテーブルのプリイメージは「blue」ですが、ターゲット行の現在値は「red」です。Postは非同期エラーを生成し、非同期の状態を警告します。
隠れた非同期状態の例
誰かがターゲットにログインし、ターゲット側のテーブルのCOLOR列でRow2を「blue」から「red」に更新しますが、この変更はソース側のテーブルには反映されず、レプリケートされません。現在、この2つのテーブルは同期していませんが、Postはエラーメッセージを返しません。これは、その行でレプリケーションが実行されていないからです。その後は、その行の他の列(SIZE、WEIGHT)を何回更新しても、誰かがソース側のテーブルのCOLOR列を更新するまではCOLOR列の隠れた非同期状態は持続され、ターゲット上のユーザが持っている情報は不正確になります。その変更がレプリケートされたときにのみ、Postはプリイメージを比較し、エラーメッセージを返します。
ほとんどの場合、非同期データの原因は、レプリケーションで発生した問題ではなく、ターゲットで適用されたDML、不完全なバックアップの復元、またはその他の隠れた非同期状態であり、これらはレプリケーションがその行に影響を与えるまで検出されません。非同期の状態を解決するのには時間がかかり、ユーザアクティビティを妨げる可能性があります。レプリケーションが開始されたら、以下をお勧めします。
お客様が、非同期エラーが発生したトランザクションに対するSharePlexの対応を以下のように決めることができます。
トランザクションに非同期の操作が含まれる場合のPostのデフォルトの動作は、トランザクション内の他の有効な操作の処理を継続し、レイテンシを最小限に抑え、ターゲットを可能な限り最新の状態に保つことです。レイテンシとは、ソースでトランザクションが発生してから、それがターゲットに適用されるまでの時間のことです。きわめて量の多いトランザクションやネットワークトラフィックの中断など、さまざまな要因がレプリケーションのレイテンシの大きさに影響を与えます。
Postは、SQLステートメントと非同期の操作のデータをID_errlog.sqlログファイルに記録します。ここで、IDはデータベース識別子です。このファイルは、ターゲットシステムの変数データディレクトリのlogサブディレクトリにあります。
以下のパラメーターを1に設定することで、Postが非同期状態を見付けたときに停止するように設定できます。
Postでは、トランザクション内のいずれかの操作で非同期エラーが発生した場合に、トランザクションをロールバックして破棄するように設定できます。トランザクション全体がSQLファイルに記録されますが、ターゲットには適用されません。SQLファイルを編集して無効なDMLを修正し、SQLファイルを実行してトランザクションを適用することができます。この機能は、SP_OPO_SAVE_OOS_TRANSACTIONを1に設定することで有効になります。
© ALL RIGHTS RESERVED. 利用規約 プライバシー Cookie Preference Center