サポートと今すぐチャット
サポートとのチャット

SharePlex 11.4 - リファレンス・ガイド

このガイドについて このガイドで使用される表記規則 Oracle用SharePlexコマンド SharePlexパラメーター PostgreSQL用SharePlexコマンド PostgreSQL用SharePlexパラメーター 一般SharePlexユーティリティ Oracleクラウドインフラストラクチャ SharePlex環境変数

PostgreSQLの設定のパージ

purge configコマンドを使用して、キューそのものを削除したり設定を非アクティベーションにしたりすることなく、設定に関連付けられたすべてのキューからデータを削除します。非アクティベーションを回避することで、SharePlexでは 、設定データを再計算する必要がなくなります。これにより、テーブルが大きく数が多い場合に、時間を節約し、レプリケーションをより早く開始できるようになります。

ソースシステムでpurge configコマンドを発行して、設定されたルートにあるソースシステムとすべてのターゲットシステムに影響を与えます。purge configアクティビティの実行前または実行中にSharePlexプロセスが停止すると、このコマンドも動作を停止します。プロセスが再開されると、コマンドは動作を再開します。したがって、purge configは、ネットワークが一時的に利用できなくなった場合でも機能し、接続が復元されるまでコマンドはキューに残ります。

purge configコマンド使用上の注意点:

設定をアクティブにしてから、activate configコマンドの後に、purge configコマンドを実行しないでください。レプリケーションを制御する設定情報など、キューに入れられたデータ以上のものをパージし、アクティベーションが無効になる可能性があります。

用途

サポート対象のソース:

PostgreSQLオンプレミスAmazon RDS for PostgreSQL、Amazon Aurora for PostgreSQL、Azure Database for PostgreSQL Flexible Server、Google Cloud SQL for PostgreSQL

サポート対象のターゲット: PostgreSQL、Oracle、SQL Server、Kafka、Amazon RDS for PostgreSQL、Amazon Aurora for PostgreSQL、Azure Database for PostgreSQL Flexible Server、Google Cloud SQL for PostgreSQL
発行対象: ソースシステムおよびターゲットシステム
関連コマンド: abort config、deactivate config

構文

基本コマンド
purge config filename
構文の説明
コンポーネント 説明
filename

パージする設定の名前。設定名では大文字と小文字が区別されます。

:

sp_ctrl(sysA)>purge config sales

PostgreSQLの照合

reconcileコマンドをプロシージャの一部として使用して、データベースユーザの中断を最小限に抑えると共に、ソースデータとターゲットデータを同期インスタンス化します。reconcileコマンドは、進行中のレプリケーションの結果を、ホットバックアップやネイティブ・コピー・ユーティリティなどによってターゲットシステムに適用されたソースデータのコピーと照合します。照合機能は、postキュー内のレプリケートされた変更を、リカバリプロセス後のターゲットデータベースの状態とcompareします。リカバリ中に適用されたトランザクションと、まだ適用されていないpostキューで待機しているトランザクションを区別し、両システムが同期するように、重複していない変更のみをポストします。

reconcileコマンドは、大容量環境で使用するように設計されていますが、状況によっては照合プロセスが停滞する可能性があることを理解すれば、小容量環境でも使用することができます。この状況は、ソースシステムから継続して届くデータにreconcileコマンドが依存しているために生じます。ホットバックアップまたはコピーの実施以降、ソースシステムにレプリケーションアクティビティがない場合、照合プロセスはソースのアクティビティが再開するまで待機します。

reconcileコマンド使用時の注意点

reconcileコマンドは、ソースデータとターゲットデータの初期同期を特定の手順で行う場合に使用します。したがって、これは独立したコマンドではありません。初期同期手順については、『SharePlex管理ガイド』を参照してください。

注意:

  • LSNの前にコミットされたトランザクションがターゲットに確実にレプリケートされるようにします。

  • コミットされていないトランザクションは削除されず、postキューに置かれます。

  • ROLLBACK/COMMITがLSNの前にある場合、トランザクションはpostキューから削除されます。

  • ROLLBACK/COMMITがLSNの後ろにある場合、トランザクションはpostキューに残ります。

用途

サポート対象のソース:

PostgreSQLオンプレミスAmazon RDS for PostgreSQL、Amazon Aurora for PostgreSQL、Azure Database for PostgreSQL Flexible Server、Google Cloud SQL for PostgreSQL

サポート対象のターゲット: PostgreSQL、Oracle、SQL Server、Kafka、Amazon RDS for PostgreSQL、Amazon Aurora for PostgreSQL、Azure Database for PostgreSQL Flexible Server、Google Cloud SQL for PostgreSQL
発行対象: ターゲットシステム
関連コマンド: flush

構文

基本コマンド コマンドオプション
reconcile queuequeuenamefordatasource-datadest

[to flush]

[pglsn Log Sequence Number]

構文の説明
コンポーネント 説明*
queue queueはコマンドの必須部分です。
queuename

照合するターゲットシステム上のpostキュー。有効な値:

  • デフォルトキューを使用する場合のソースシステムの名前
  • 名前付きキューを使用している場合のキューの名前。

名前付きpostキューを使用している場合は、それぞれに対してreconcileコマンドを実行します。キュー名を決定するには、sp_ctrlqstatusコマンドを発行します。キュー名はすべてのプラットフォームで大文字と小文字が区別されます。

fordatasource-datadest
  • datadestはo.SIDで表されます。ここで、SIDはターゲットインスタンスのORACLE_SIDですOracleターゲットの場合

  • datasourceはr.dbnameで表されます。ここで、dbnameはソースインスタンスのデータベース名ですPostgreSQLソースの場合

  • datasourceはr.dbnameで表されます。ここで、dbnameはターゲットインスタンスのデータベース名ですPostgreSQLターゲットの場合

:

sp_ctrl (sysB)> reconcile queue SysA for r.dbname1-r.dbname2PostgreSQLからPostgreSQLへの実装

sp_ctrl (sysB)> reconcile queue SysA for r.dbname1-o.oraBPostgreSQLからOracleへの実装

pglsn LSN number

PostgreSQLの実装の場合はLSN番号を使用します。LSN番号は10進数または16進数形式で指定できます。

現在のLSNを検索するクエリ:

select pg_current_wal_lsn();

:

sp_ctrl (sysB)> reconcile queue SysA for r.dbname1-r.dbname2 pglsn 0/B817B360PostgreSQLからPostgreSQL - 16進形式のLSN

sp_ctrl (sysB)> reconcile queue SysA for r.dbname1-r.dbname2 pglsn 3088560992PostgreSQLからPostgreSQL - 10進形式のLSN

sp_ctrl (sysB)>reconcile queue SysA for r.dbname1-o.oraB pglsn 3088560991PostgreSQLからOracle - 10進形式のLSN

sp_ctrl (sysB)>reconcile queue SysA for r.dbname1-o.oraB pglsn 0/B817B361PostgreSQLからOracle - 16進形式のLSN

to flush

このオプションは、flushコマンドで確立されたフラッシュマーカーに対して照合するために使用します。ピアツーピアレプリケーション環境で複数のOracleデータベースを同期する場合に使用します。

この構文は、基本コマンドの構文の後に表示する必要があります。

:

sp_ctrl (sysA)> reconcile queue SysA for r.dbname1-r.dbname2 to flush

注意: ターゲットでReconcileコマンドを実行する前に、ソースでFlushコマンドを発行し、フラッシュマーカーを作成します。最初にReconcileコマンドを発行しても、ソースマシン上でフラッシュマーカーが作成されるのを待つことになります。

PostgreSQLの設定名の変更

設定ファイルに別の名前を付けるには、rename configコマンドを使用します。システム上の設定ファイル間で固有の名前を使用します。

用途

サポート対象のソース:

PostgreSQLオンプレミスAmazon RDS for PostgreSQL、Amazon Aurora for PostgreSQL、Azure Database for PostgreSQL Flexible Server、Google Cloud SQL for PostgreSQL

サポート対象のターゲット: PostgreSQL、Oracle、SQL Server、Kafka、Amazon RDS for PostgreSQL、Amazon Aurora for PostgreSQL、Azure Database for PostgreSQL Flexible Server、Google Cloud SQL for PostgreSQL
発行対象: ソースシステム
関連コマンド: copy config、edit config、list config、view config

構文

基本コマンド
rename config {filename to newname
構文の説明
コンポーネント 説明
filename to newname
  • filenameは、名前を変更する設定の名前です。設定名では大文字と小文字が区別されます。
  • toは構文の必須部分です。
  • newnameは設定に付ける新しい名前です。

:

sp_ctrl(sysA)> rename config sales to sales2

PostgreSQLのrepair/repair using

repairおよびrepair usingコマンドrepairコマンドと総称されるを使用して、ターゲットテーブル内の同期していない行をrepairします。

  • repairコマンドは、ワイルドカードを使用して指定されたスキーマ内の個のターゲットテーブルまたは任意の数のターゲットテーブルをrepairします。個のテーブルをrepairする場合は、列ベースのフィルタリングを使用して、repair用に選択される行を制御することができます。
  • repair usingコマンドは、アクティブ設定またはアクティブ設定内のテーブルのサブセットを含む別のファイルにリストされたターゲットテーブルをすべてrepairします。

repairコマンドは、まずcompareを実行してrepairが必要な行を特定してからrepairを実行します。テーブルがどのようにcompareされるかについては、compare / compare usingを参照してください。

注意: 実行中のcompareまたはrepairは、ソーステーブルには一切影響を与えません。SharePlexは、読み取りの一貫性についてのクエリを実行するためだけにデータベースにログインし、ソーステーブルのロックは短時間です。SharePlexは、処理中にターゲットテーブルを短時間ロックしますが、ユーザはロックをほとんど意識することなくアクセスを継続できます。ターゲットテーブルまたはしきい値より小さい場合は非同期行は、非同期行を修正するためにrepairプロセスにロックされます。

サポートされている操作

SharePlexは、DML操作INSERT、UPDATE、DELETEによって発生した、ターゲットテーブル内の非同期行を検出し、repairすることができます。

サポートなし

SharePlexは、以下のcompareとrepairをサポートせずにスキップします。

  • シーケンス。
  • トランスフォーメーションが使用されたテーブル
  • ソースサーバとターゲットサーバ間のデータ受け渡しにパススルーサーバを使用するネットワーク構成
  • カスケードレプリケーション環境では、compareとrepairはサポートされません。
  • compareまたはrepair中のテーブルに対してDDLを実行しないでください。compareは、SharePlexがサポートするものも含め、DDL操作によって引き起こされる非同期状態を検出しません。DDLがテーブル定義を変更すると、compareする必要がある行を取得するためにcompareプロセスにより作成されたSELECTステートメントが無効になります。

    DDLによって発生した非同期状態を修正したら、repairコマンドを使用して行のデータを再同期することができます。

  • 255文字を超えるcompareおよびrepairコマンド文字列はサポートされていません。これはオペレーティングシステムの制限です。この制限を回避するには、ソースシステムでeditコマンドを使用します。テキストファイル内にコマンド文字列を入力すると、コマンドが自動的にファイルを実行します。

compareおよびcompare usingでサポートされるデータ型の詳細については、『SharePlexリリースノート』を参照してください。

その他の条件

  • compareまたはrepairするテーブルは、アクティブな設定ファイルの一部でなければなりません。
  • ソーステーブル上にコミットされていないトランザクションがあると、読み取りの一貫性を得るためにcompareおよびrepair処理に必要な短時間のロックを取得できなくなります。compareやrepairを実行する前に、すべてのトランザクションがコミットされていることを確認してください。
  • レプリケーションのレイテンシは、compareやrepairの処理のパフォーマンスを低下させる可能性があります。ターゲット上でcompareおよびrepairプロセスを生成するためにソースから送信されたメッセージは、複製されたデータと共にキューを通じて送信されます。データバックログによる遅延が生じると、生成メッセージの送信が遅れることにより、プロセスが読み取りの一貫性を失うことがあります。可能であれば、compareやrepairはピーク以外の時間帯に行います。

  • compareまたはrepair中のテーブルをトランケートしないでください。compareコマンドは、開始時に各ソーステーブルのスナップショットを取ります。テーブルがトランケートされると、スナップショットのテーブルビューもトランケートされ、コマンドが無効な非同期状態を返すことがあります。
  • ビューをrepairするには、以下が真でなければなりません。

    • ビューテーブルが、基礎となるテーブルのすべての制約列を含んでいること。
    • ビューの制約列の名前が、基礎となるテーブルの制約列の名前と同一であること。
  • Compareプロセスのパフォーマンスを向上させるために、SharePlexはSP_DEQ_PARALLELISMパラメーターによる並列ヒントをサポートしています。このため、並列度、つまり起動するワーカープロセスの数を指定できます。

    デフォルトでは、PostgreSQLデータベースオプティマイザはSQLステートメントに最適な問い合わせ実行計画を選択します。これは、並列ヒントで指定した並列度に直接関連していないこともあります。pg_hint_planにより、クエリを実行するたびに配列ヒントを使用して実行計画を調整することができます。SharePlexは、データベースにpg_hint_plan拡張機能がインストールまたは設定されている場合、内部でこれを利用します。

    並列クエリを使用するための構文の例は以下の通りです。

    pg_hint_plan拡張機能は並列ヒントをサポートしています。Parallel(table <# of workers> [soft|hard])

    SharePlexはハードパースをサポートする並列ヒントを使用します。Parallel(table <# of workers> [hard])

    注意: ワーカーの数は、データベースシステムのCPU VCoreより少なくなければなりません。

repairコマンドの使用方法

compareおよびrepairコマンドによって同期されたデータを維持するための推奨手順は、まずcompareまたはcompare usingコマンドを実行し、次にrepair statusコマンドで結果を表示することです。このコマンドは、非同期行とその考えられる原因を表示します。非同期状態の原因が修正されない限り、今回行をrepairしても、レプリケーションは再び非同期になります。問題が解決した後、repairまたはrepair usingコマンドを実行します。

repairまたはrepair usingコマンドは、予めcompareを行うことなく実行できます。このコマンドはまずcompareを行い、同期していない行を特定し、その行をrepairします。しかし、将来的な非同期状態を防ぐには、非同期状態の根本的な原因を解決しなければなりません。

非同期状態の原因と解決策については、SharePlex管理ガイドを参照してください。

repairを実行するタイミング

ターゲットテーブルをrepairする最適なタイミングは、テーブルのサイズ、問題の原因、非同期行の範囲、ユーザをロックアウトできる時間の長さによって異なります。repairを開始する前に、以下を考慮してください。

  • 通常、テーブルのユーザは、テーブルのcompare時に適用される短時間のロックの影響は受けませんが、repair処理中はターゲットテーブルからロックアウトされます。小さなテーブルであれば支障はないかもしれませんが、大規模なrepairが必要な大きなテーブルの場合、待ち時間が非常に長くなることがあります。
  • ターゲットテーブルのロックは、Postがrepairの終了を待ってから、そのテーブルに変更を適用し、他のテーブルに移動しなければならない場合、ポストのパフォーマンスを低下させる可能性があります。これがターゲットデータのレイテンシを増加させ、postキューに操作が蓄積される原因となります。Postが変更する必要があるオブジェクトと、repair中のオブジェクトが異なる場合、2つのプロセスは同時に実行されます。
  • テーブルをすぐにrepairしなければならないが、ロックやレプリケーションのレイテンシを許容できない場合、whereオプションを使用して、特定の行に限定してrepairすることができます。別の方法としてkeyオプションを使用することもできますが、このオプションを使用すると、非同期行を見逃してしまう可能性があります。

  • repairを待つことができる場合は、問題の原因をすぐに修正し、ピーク時以外の時間帯にrepairを行います。

特別な使用例

以下のシナリオでは、compareを実行する際に特別な処理が必要となります。

使用例 サポートcompare
統合レプリケーション

中央データベース内のターゲットテーブルは、どのソースデータベースよりも行数が多く、ソースデータベースよりも列数が多いことがよくあります。このような環境でrepairコマンドを使用する場合は、特別な配慮が必要です。

repair usingコマンド

統合レプリケーションは、repair usingコマンドではサポートされていません。repair usingコマンドでは、ソーステーブルに存在しないターゲット行が不要に削除されます。

回避策として、統合レプリケーションに関係するテーブルを除外した設定のサブセットを作成し、代わりにサブセット設定をrepairします。repairコマンドを使用すると、統合レプリケーションに関与するテーブルをrepairできます。

repairコマンド

統合レプリケーションは、ターゲットデータベースとPostプロセスがソースホストのIDを各行に追加するように設定されている場合にサポートされます。中央のターゲットテーブルの正しい行をcompareまたはrepairするには、targetwhereオプションを使用し、ソースID値をwhere句の基準にします。

例えば、ある企業の東部本社のデータベースのテーブルと、中央の企業データベースの正しい行をcompareするには、東部データベースのソースIDに「East」を使用し、その値をtargetwhere句の基準にすることができます。repairコマンドで同じtargetwhere句を使用します。compareプロセスおよびrepairプロセスは、ソースID値を使用して、東部データベースに有効な行のみを選択します。

ソースIDを特定する統合レプリケーション以外の実装でcompareコマンドやrepairコマンドを使用すると、ターゲット行が不要に削除される可能性があります。この設定の詳細については、『SharePlex管理ガイド』を参照してください。

ターゲット行が正確に選択されるように、targetwhereオプションと標準のwhereオプションを組み合わせる必要があるかもしれません。

ピアツーピアレプリケーション

ピアツーピア構成では、どのシステムを信頼できるソースシステムとし、どのシステムをセカンダリシステム、つまりターゲットシステムとするかを決めなければなりません。セカンダリシステムは、repairが行われるシステムです。ピアツーピア環境でcompareやrepairを実行する前に、以下の手順に従ってください。

  1. セカンダリシステムのユーザアクセスを停止し、そのシステムから複製された操作が信頼できるソースデータベースにポストされるのを待ちます。ユーザは引き続きソースデータベースにアクセスできます。
  2. ソースおよびセカンダリシステムでqstatusコマンドを実行します。
  3. キュー内のメッセージが10個以下であれば、ソースシステムからcompareを実行します。
  4. compare中、sp_xdesvrおよびsp_xdecltの開始後に、ソースおよびセカンダリデータベースへのユーザアクセスを許可できます。
  5. whereオプションを指定してrepairコマンドを使用すると、ユーザをテーブルからロックアウトすることなく、ターゲットテーブルの選択した行をrepairできます。

この設定の詳細については、『SharePlex管理ガイド』を参照してください。

キーのないテーブル

compareおよびrepairコマンドは、ソースおよびターゲットシステム上でORDER BY句付きのSELECTステートメントを発行します。大規模なテーブルにプライマリキーまたはNULL以外の一意キーとインデックス一意のインデックスが望ましいを持つ場合、順序付けはより速くなります。それ以外の場合は、すべての列がキーとして使用されます。

一意の行識別子はないが、一意の行として識別できる列がテーブルに1つ以上ある場合、orderbyオプションを指定してcompareコマンドを使用できます。このオプションを使用すると、SharePlexは、ソースシステム上のsp_xdesvrログに、コマンドがこれらの列をキーとして使用したという通知を出力します。

1つの行に対してrepairを行う必要がある場合、キーと見なされる列にNULL値が含まれていてはなりません。含まれているとエラーが発生することがあります。この場合、その行を一意に識別し、NULL値を含まない列でorderbyオプションを使用します。

制限事項: SharePlexレプリケーションで、重複データを含む非キー列を含むテーブルを使用する場合、レプリケーションまたはcompare・repair処理でデータの不整合が発生する可能性があります。

ソーステーブルよりも列の数が多いターゲットテーブル

repairおよびrepair usingコマンドは、ソーステーブルに含まれていないターゲット列を無視します。repairでは以下のことを行います。

  • INSERTは、ソーステーブルに対応する列を持つターゲット列に値を挿入しますが、それ以外の列には挿入しません。NOT NULL制約があるがデフォルト値がない列は、PostgreSQLエラーの原因となります。ターゲットテーブル内の余分な列にはデフォルト値が推奨されます。
  • UPDATEは、ソーステーブルに対応する列を持つターゲット列の値を再同期しますが、余分な列の値は再同期しません。
  • DELETEはターゲットテーブル内の余分な列の影響を受けません。これは、repairコマンドは照合する列の列データに基づいて行を選択するためです。
UNIQUE制約を持つテーブル

UNIQUE制約で定義された列では、repair、またはrepair usingコマンドによって一意制約違反エラーが返されることがあります。次の例では、ソーステーブルとターゲットテーブルがそれぞれ2列ずつになっています。最初の列は主キーで、2番目の列にはUNIQUE制約があります。

SharePlexがターゲットテーブルの1行目をrepairしてソースと一致させようとすると、2列目のUNIQUE制約がエラーを返します。これは、値「ABC」が既に2行目に存在するためです。ターゲットテーブルの2行目でも、「XYZ」が既に1行目に存在するため、同じことが起こります。回避策は以下の通りです。

  • repairコマンドを実行する前に、ターゲットテーブル上のUNIQUE制約を無効にし、repair終了後に再度有効にします。
  • 固有の制約違反が発生したターゲット行を削除し、SharePlexによって正しいデータと共にこれらの行が挿入されるようrepairを再度実行します。
LOB列を持つテーブル

いずれかのターゲットテーブルにLOB列があるとrepairにかかる時間が長くなります。より高速なrepairを行うには、SP_DEQ_SKIP_LOBパラメーターを0に設定して、compareとrepairでLOB列がスキップされるようにします。詳細については、SP_DEQ_SKIP_LOB を参照してください。

repairの仕組み

repair操作では、以下のようにDML操作によって発生した、ターゲットテーブルの非同期状態をrepairします。

  • 余分な行または欠けている行
  • 値が一致しない行

repairの条件

repairおよびrepair usingコマンドは 、以下の修正SQLステートメントを発行します。

  • ソース側に行が存在し、ターゲット側に行が存在しない場合、SharePlexはINSERTステートメントを発行します。
  • ターゲット側に行が存在し、ソース側に存在しない場合、SharePlexはDELETEステートメントを発行します。
  • ターゲット行がソース行と異なり、キー列が一致する場合、SharePlexはソース値に基づいてUPDATEステートメントを発行します。

プロセス

repairには常に、ターゲットテーブル内の非同期状態を特定するためのcompareが含まれます。repairまたはrepair usingコマンドを実行すると、SharePlexは以下の一連のイベントを開始します。

  1. sp_copプロセスは、ソースシステム上にsp_xdesvr サーバプロセスを生成します。
  2. sp_xdesvrプロセスは、sp_ctrlインターフェイスの制御と使用をユーザに返します。compareが進行している間、レプリケーションは続行されます。
  3. sp_xdesvrプロセスは、ターゲットシステム上でsp_xdeclt クライアントプロセスを開始するために、Postプロセスにメッセージを送信します。
  4. サーバプロセスとクライアントプロセスによって相互の通信が確立されます。
  5. 行の選択とrepairは次のように進行します。

    • repairコマンドを使用している場合、sp_xdesvrはソーステーブルから行を選択し、sp_decltはターゲットテーブルから行を選択します。行はソートされ、compareされてrepairされます。
    • repair usingコマンドを使用している場合、sp_xdesvrプロセスはターゲットシステム上に多数の処理スレッドを作成します。SP_DEQ_THREADSパラメーターによって設定される値は、作成されるスレッド数を制御します。各スレッドはsp_xdecltクライアントプロセスを生成します。サーバプロセスとクライアントプロセスによって相互の通信が確立されます。処理負荷はクライアントプロセス間で分割されます。ソースとターゲットの各テーブルから行が選択され、ソートされ、compareされてrepairされます。ターゲットテーブルは、repairの順番になるとロックされ、その後ロックが解除されます。
    • ターゲットテーブルは、repairの順番になるとロックされ、その後ロックが解除されます。

  6. 終了すると、プロセスによってログファイルが書き出され、show repairコマンドで結果を見ることができます。

エラー処理

SharePlexは 、repair SQLステートメントの適用時にデータベースエラーが発生すると、そのステートメントから先のrepairを停止し、直前に適用された有効なステートメントのみをコミットします。このように、テーブルは部分的にrepairされますが、まだ同期していない可能性があります。repair statusコマンドは、この状況を警告します。

SQLログファイルの管理

compareおよびrepairコマンドは、すべての非同期行をrepairするために必要なSQLを、ログファイルと同じ場所にあるSQLファイルに書き込みます。compareコマンドのみが発行された場合、SharePlexはこれらのSQLステートメントを実行しません。repairコマンドを実行した場合、このコマンドは、非同期行をrepairするSQLステートメントを実行すること以外はcompareコマンドと同じように動作します。

SQLログファイルの出力を抑制することができます。このファイルを抑制する理由には以下のようなものがあります。

  • データには機密情報が含まれています。SQLログファイルはクリアテキストで書き込まれます。SQLログファイルを生成しないことで、機密データはディスクに保存されず、PCIコンプライアンス基準を満たすために要求されるような保存データのセキュリティ要件を満たすことができます。
  • compareまたはrepairされたテーブルには、非常に多くの非同期行があります。このサイズのログファイルは、大量のディスクスペースを消費する可能性があります。

SQLログファイルを抑制するには、nosqllogオプションをcompareまたはrepairコマンドで使用します。

SharePlexの現在のインスタンスの実行中に、compareとrepairのすべての実行についてSQLログファイルの出力を抑制するには、SP_SYS_SECURE_MODE環境変数を1に設定します。この変数はSharePlexを起動する前に設定する必要があるため、sp_copプロセスが実行されている場合は、この変数を設定した後に再起動する必要があります。この環境変数を指定してsp_copを実行すると、compareコマンドとrepairコマンドによってSQLファイルにデータは保存されず、Post処理でもSharePlexのエラーログにデータは保存されません。

複数のプロセスの実行

すべてのcompareおよびrepairコマンドでは、複数のプロセスを同時に実行することができます。

  • 複数のcompareおよびrepairコマンドを同時に実行し、それぞれがソーステーブルとターゲットテーブルのペアを処理することも、PostgreSQLのワイルドカードを使用して1つのコマンドで複数のテーブルセットを指定することもできます。SharePlexによるワイルドカードのサポートの詳細については、『SharePlex管理ガイド』を参照してください。
  • compare usingrepair usingコマンドはファイル全体で機能します。例えば、設定ファイル全体のテーブルをcompareまたはrepairすることも、ターゲットテーブルのサブセットに影響を与える1つ以上のcompare filesまたはrepair filesを作成し、そのうちの1つまたは複数を同時に実行することもできます。手順については、コマンドの構文を参照してください。

レプリケーションプロセスとcompareおよびrepairプロセスなど、最大で20のSharePlexプロセスでpostキューを同時に使用することができます。一度に最大で5つのcompareおよびrepairプロセスを実行できるようにすることをお勧めします。compare usingおよびrepair usingコマンドを使用すると、compareするプロセスあたりのテーブル数を増やすことで20回のプロセス制限を回避できます。

制限に達したためにcompareやrepairに失敗した場合、SharePlexはイベントログにメッセージを記録します。

注意: editコマンドを使用し、以前のコマンドを編集して新しいコマンドを作成すれば、複数のコマンドをより簡単に実行できます。

設定のサブセットのrepair

アクティブな設定のサブセットは、以下の方法でrepairできます。

  • 1つのスキーマに属するレプリケーション内の全ターゲットテーブルをrepairするには、以下のようにrepairコマンドにワイルドカードを指定します。

    sp_ctrl> repair scott.%

  • 設定ファイル内のすべてのターゲットテーブルをrepairするには、以下のようにrepair usingコマンドを使用します。

    sp_ctrl>repair using myconfig

  • 1つのターゲットルート内のすべてのターゲットテーブルをrepairするには、以下のようにatオプションを指定して、repair usingコマンドを使用します。

    sp_ctrl> repair using config.active at prodsys@r.dbid

  • 設定内のテーブルのカスタムサブセットをrepairするには、repairファイルから指定します。これはプレーン・テキスト・ファイルであり、repairしたいターゲットのソーステーブルのみをリストします。ターゲットテーブルは、コマンドが発行された時点の設定ファイルから取得されます。create configまたはcopy configコマンドを使用してrepairファイルを作成できます。このファイルには、必ず設定ファイルでないことを明確に示す名前を付けてください。詳細については、コマンドの構文を参照してください。

どの行をrepairするかを制御

compareおよびrepairコマンドには、処理の対象として選択する行をフィルタリングできるwhereオプションがあります。デフォルトでは、これらのコマンドはテーブルのすべての行に影響し、ソーステーブルに含まれていないターゲットテーブルの列は無視されます。

  • whereオプションを使用すると、ソーステーブルとターゲットテーブルの同じ名前の列に基づいて行をフィルタリングすることができます。

  • 垂直分割レプリケーションを使用するテーブルにはwhereオプションを使用します。ソース列とターゲット列には異なる名前を付けることができます。whereの選択をソース列に基づいて行います。SharePlexは、ターゲットテーブルの正しいWHERE句を構築するために、設定ファイルから列マッピングを読み取ります。
  • ソーステーブルまたはターゲットテーブルに1つ以上の余分な列が存在し、それらの行に行の一意性を決定する値が含まれている場合は、sourcewhereおよびtargetwhereオプションを使用します。

    • ソーステーブルに余分な列が含まれている場合は、sourcewhereを使用します。
    • ターゲットテーブルに余分な列が含まれている場合は、targetwhereを使用します。

    このオプションを正しく使用するには:

    • 余分な列にはsourcewhereまたはtargetwhereオプションのみを使用します。
    • ソースとターゲットの両方で同じ名前を持つ他の列には、標準のwhereオプションを使用します。

    • SharePlexは、whereオプションとsourcewhereまたはtargetwhereオプションを組み合わせて、完全なWHERE句を作成します。

    重要! 余分な行を持つターゲットテーブルに対してcompareとrepairの両方を実行する予定がある場合は、UPDATEとDELETEのcompare用にtargetwhereのみを使用してください。repairコマンドはINSERTの正しい値を決定できません。この問題を回避するには、余分な列にデフォルト値を設定するか、挿入された行を手動で更新します。

プロセスの特定

compareまたはrepairコマンドが発行されるたびに、ジョブIDがsp_ctrlディスプレイに表示されます。sp_ctrlディスプレイを利用できない場合は、compare statusコマンドを実行することでジョブIDを表示できます。

sp_ctrlでステータスと結果を表示

repairのステータスや結果を表示するには、sp_ctrlrepair statusコマンドを使用します。

  • 基本コマンドは、最近開始されたrepairジョブの処理ステータスと、まだ終了していないその他のジョブを表示します。
  • 追加オプションを使用すると、履歴のあるすべての修理ジョブのサマリーステータスを表示したり、1つのジョブに関する詳細情報を表示したりすることができます。

詳細については、repair statusを参照してください。

警告とエラーの表示

sp_xdesvrおよびsp_xdecltプロセスは、実行するシステム上にログファイルを書き込みます。SharePlexの変数データディレクトリのlogサブディレクトリにあるファイルを開きます。

sp_xdesvrプロセスが書き込むログの名前はxdesvr_<jobid>_r.<dbid>_p<process id>.logです。ここで、

  • JobIDは、SharePlexによって割り当てられたジョブIDです。
  • DBIDはPostgreSQLインスタンスのデータベースIDです。
  • ProcessIDsp_xdesvrプロセスのプロセスIDです。

sp_xdecltプロセスが書き込むファイル名は、xdeclt_<jobid>-<tableid>_r.<dbid>_p<processid>.log.logまたは.sqlを付加したものです。ここで、

  • JobIDは、SharePlexによって割り当てられたジョブのジョブIDです。
  • TableIDは、SharePlexによって割り当てられたジョブ内のテーブルのテーブルIDです。
  • DBIDはPostgreSQLインスタンスのデータベースIDです。
  • SourceHostは、ソースホストの名前またはIPアドレスです。
  • ProcessIDsp_xdecltプロセスのプロセスIDです。

ログファイル名の例:

xdesvr_7_r.aparopka_p4970.log

xdeclt_7-1_r.aparopka_p25095.log

xdeclt_7-1_r.aparopka_p25095_01.sql

ディスク使用量を制御するために、ログは循環方式でエージングされます。現在のログがサイズの限界に達すると、SharePlexは新しいログファイルを生成します。新しいログは最大ログ数まで作成され、その後、SharePlexは最も古いログから上書きを開始します。

repairジョブのキャンセル

実行中のcompareまたはrepairジョブを停止するには、cancelコマンドを使用します。

sp_ctrl(sysA)>cancel JOBID

詳細については、「cancel」を参照してください。

compare履歴とログの管理

SharePlex は、終了した各ジョブの履歴をソースシステムのデータベースに保持します。SP_SYS_JOB_HISTORY_RETENTIONパラメーターは、履歴の保持期間を制御します。

この履歴を必要に応じて消去するには、clear historyコマンドを使用します。SharePlexがジョブの履歴を削除すると、履歴の元となったログファイルも削除されます。

データベースのジョブ履歴を消去せずにソースシステムからログファイルを削除するには、remove logコマンドを使用します。このコマンドは、ターゲットシステムから古いログファイルを削除するためにも使用できます。

ログファイルのサイズを制御するには、SP_DEQ_LOG_FILESIZEパラメーターを設定します。

バッチサイズのコントロール

プロセスがSELECTクエリを実行するときにフェッチされる行のブロックのサイズを制御することができます。ブロックサイズは、SP_DEQ_MALLOCパラメーターで設定された値に基づいて計算されます。この値は、使用されるcompareスレッドの数で等分され、その後、すべての列のサイズを足した値に基づいて再計算されます。

用途

サポート対象のソース: PostgreSQL
サポート対象のターゲット: PostgreSQL
認証レベル: オペレーター2
発行場所: ソースシステム
関連コマンド: compare / compare using

構文

基本コマンド コマンドオプション リモートオプション
repair owner.source_table[.partition]

[ at target_host@r.target_dbid ] |

[ for r.source_dbid ] |

[ {include | exclude} "column_list" ] |

[ insertonly ] |

[key] |

[ nosqllog ] |

[ not "exception_list" ] |

[ onepass ] |

[ orderby "column_list” ] |

[ parallelism degree ] |

[ sourcewhereclause” ] |

[ threads thread_count ] |

[ targetwhereclause” ] |

[ to target_owner.target_table[.partition] ] |

[ whereclause” ]

[ on host |

on host:portnumber |

on login/password@host |

on login/password@host:portnumber ]

repair using filename

[key] |

[ onepass ] |

[port port_number] |

[ threads threads_count ] |

[ parallelism degree ]

[ on host |

on host:portnumber |

on login/password@host |

on login/password@host:portnumber ]

構文の説明
必須コマンドコンポーネント
コンポーネント 説明
repair owner.source_table[.partition]

基本コマンドは、すべてのソース行をすべてのターゲット行と共にrepairします。

owner.source_tableは、ソーステーブルの所有者と名前です。大文字と小文字を区別したり、名前の中にスペースを入れたりするには、二重引用符を使います。例えば、"HR".emp

ワイルドカードのテーブル名オーナー名は不可がサポートされています。repairするためには、このコマンドのワイルドカードを満たすテーブルがアクティブレプリケーション設定に明示的またはワイルドカードでリストされていなければなりません。SharePlexがワイルドカードをどのように処理するかについては、『SharePlex管理ガイド』を参照してください。

sp_ctrl(sysA)>repair scott.emp

repair using filename

基本コマンドは、filenameにリストされているターゲットテーブル内の同期していない行をすべてrepairします。

filenameは、ターゲットをrepairするソーステーブルの名前が含まれているファイルの名前です。

sp_ctrl(sysA)>repair using sales

オプションのコマンドコンポーネント
コンポーネント 説明
at target_host@r.target_database_name

repairに有効

ソーステーブルが複数のターゲットシステムにレプリケートされる設定では、ターゲットテーブルの1つだけをrepairします。

target_hostはターゲットシステムの名前です。

target_dbはターゲットデータベース名の名前です。

sp_ctrl(SysA)>compare scott.emp at prod@r.database_name

for r.DBID

compareに有効

ソーステーブルを含むPostgreSQLインスタンスを指定します。システム上の複数のPostgreSQLインスタンスに同じソーステーブルがある場合に使用します。

DBIDはPostgreSQLソースインスタンスのデータベース名です。大文字と小文字は区別され、configファイルに表示される通りに入力する必要があります。

このオプションを使用する場合は、必要なコマンド引数の後に記述する必要がありますが、他のオプションと共に任意の順序で記述できます。

sp_ctrl (SysA)>compare scott.emp for r.database_name

{include | exclude} "(column_list)"

repairに有効

repairする列をフィルタリングします。

  • includeを使って、repairする列を指定します。他の列はrepairされません。include句には、すべてのキー列を含める必要があります。
  • excludeで指定した列を除くすべての列をrepairするには、excludeを使用します。キー列を除外しないでください。

column_listは、インクルードまたは除外する列のリストです。

  • それぞれの名前はカンマで区切ります。列名にスペースが含まれていない限り、リストにスペースは許可されません。
  • 列リストは二重引用符で囲みます。
  • 列を任意の順序でリストします。ソートは昇順で実行されます。
  • 列名は大文字と小文字を区別しません。
  • このオプションを使用する場合、コマンドの必須引数の後に記述しなければなりませんが、他のオプションと共に任意の順序で記述できます。

注: repairされなかった列には、まだ同期していない行が残っている可能性があります。

sp_ctrl (SysA)>repair scott.emp exclude "color, weight"

insertonly

repairに有効

INSERTステートメントの場合にのみターゲットテーブルをrepairします。

sp_ctrl(SysA)>repair scott.emp insertonly

key

repairとrepair usingに有効

大きなテーブルのcompareとrepairを高速で実行します。このコマンドは、すべてのデータ値をcompareするのではなく、以下のうちの1つだけをcompareします。

  • PRIMARYキー列またはNULLでないUNIQUEキー列のみ。

    または...

  • orderbyオプションで指定された列。テーブルにキーがない場合は、このオプションを使用します。

キーまたはorderby列が一致しない場合、SharePlexは 、行全体を削除してrepairし、ソース値に基づいて再度挿入します。

重要! このオプションの使用には注意が必要です。キーの値が一致していても、キー以外の列の値が同期していない可能性があります。

このオプションを使用する場合は、必須コマンド引数の後に記述しなければなりません。他のオプションと共に任意の順序で表示できます。

このオプションは、SharePlexキー定義に基づくrepairには使用しないでください。SharePlexキー定義の詳細については、『SharePlex管理ガイド』を参照してください。

sp_ctrl (SysA)>repair scott.emp key

sp_ctrl(sysA)>repair using sales key

nosqllog

SQLログファイルの出力を抑制します。このファイルには、同期していない行をrepairするために必要なSQLが含まれています。このファイルを出力しない理由には、以下のようなものがあります。

  • データには機密情報が含まれています。SQLログファイルはクリアテキストで書き込まれます。SQLログファイルを生成しないことで、機密データはディスクに保存されず、PCIコンプライアンス基準を満たすために要求されるような保存データのセキュリティ要件を満たすことができます。
  • compareまたはrepairされたテーブルには、非常に多くの非同期行があります。このサイズのログファイルは、大量のディスクスペースを消費する可能性があります。
notexception_list

repairに有効

テーブル指定にワイルドカードが含まれている場合に、repairしないテーブルの例外リストを指定します。

"exception_list"は、repairしないテーブル名のリストです。

  • owner.tablename形式を使用します。
  • それぞれの名前はカンマで区切ります。リストにスペースは許容されません。
  • リストを二重引用符で囲みます。
  • テーブルを任意の順序でリストします。
  • このオプションを使用する場合、コマンドの必須引数の後に記述しなければなりませんが、他のオプションと共に任意の順序で記述できます。

sp_ctrl(SysA)>repair scott.% not (%temp%)

onepass

repairとrepair usingに有効

compareとrepairを同時に実行するには、このオプションを使用します。同期していない大きなテーブルに使用します。

通常、repairは2つのパスで実行されます。まずcompareを行い、次にrepairでターゲットテーブルをロックします。どちらのパスにも一貫したビューが必要です。onepassでは、compareクライアントが一貫性のあるビューマーカーを受け取るとすぐに、ターゲットテーブルがロックされ、repairされます。

sp_ctrl(SysA)>repair scott.emp onepass

注意: PostgreSQLでは、テーブルに複数のキーが定義されている場合、「onepass」コマンドオプションを使用すると、repair処理中に重複制約違反エラーが発生することがあります。repairはこのオプションなしで正しく機能するため、このようなテーブルには「onepass」コマンドオプションを使用しないことを推奨します。

単一のキーが定義されたテーブルでは、「onepass」オプションによるrepairも適切に機能します。

キーが定義されていないテーブルの場合、「onepass」オプションによるrepairは、重複レコードがなければ適切に機能します。これは、同じ値を持つ複数のレコードがターゲットテーブルにある可能性があり、DELETEステートメントがWHERE句のキーとしてすべての列の値または部分的な列の値を操作するからです。その結果、期待された補正が行われない可能性があります。

orderby "column_list"

repairに有効

ORDERBY句コマンドオプションとKEYコマンドオプションを併用し、ORDERBYオプションで指定された列をcompareします。キーまたはORDERBY列が一致しない場合、SharePlexは行全体を削除し、次にソース値に基づいて再度挿入することでrepairします。

repairプロセスでcompareする行をソートする際に、ORDERBY句で使用する列を指定します。このオプションは、プライマリキーや一意キーを持たないテーブル上でrepairを実行できるようにします。

"column_list"は、ORDERBY句で使用する列の名前です。

  • それぞれの名前はカンマで区切ります。列名にスペースが含まれていない限り、リストにスペースは許可されません。
  • 列リストは二重引用符で囲みます。
  • 列を任意の順序でリストします。ソートは昇順で実行されます。
  • 列名は大文字と小文字を区別しません。
  • このオプションを使用する場合、コマンドの必須引数の後に記述しなければなりませんが、他のオプションと共に任意の順序で記述できます。
  • オペレーティングシステムのコマンドラインからrepairを実行する場合、引用符で囲まれた文字列は、以下のようにエスケープされた二重引用符で囲む必要があります。

    /productdir/bin/sp_ctrl repair scott.emp orderby “\“Last Name,Division\””

sp_ctrl(SysA)>repair scott.emp where “file >001005” orderby “Last Name,Division”

parallelism degree

repairとrepair usingに有効

SELECTステートメントに並列ヒントを追加します。degreeでは、並列度を設定します。

sp_ctrl(sysA)>repair scott.emp parallelism 4

sp_ctrl(sysA)>repair using sales parallelism 4

sourcewhereclause

repairに有効

ターゲットテーブルに列が存在しない場合に、ソーステーブル内の1つまたは複数の列を基にrepairを行います。ソーステーブル上でこの条件によってフィルタリングされた行はロックされます。

  • clauseを二重引用符で囲み、scott.empのように完全修飾名でテーブルを参照します。
  • 大文字と小文字を区別したり、テーブル名内にスペースを入れたりする場合は、二重引用符を使用します。
  • 日付は「YYYYSMMDDHH24MISS」の形式でなければなりません。日付をこの形式に変換するには、PostgreSQLのTO_DATE関数を使用します。例えば、c1がDATE列の場合、WHERE句"c1 > '10-SEP-2001'"は機能しませんが、"c1 > to_date('10- SEP-2001', 'DD-MON-YYYY')"は機能します。
  • オペレーティングシステムのコマンドラインからrepairを実行する場合、引用符で囲まれた文字列は、以下の例のようにエスケープされた二重引用符で囲む必要があります。

    sp_ctrl>repair scott.emp sourcewhere “\“file >001005\””

  • このオプションを使用する場合は、必要なコマンド引数の後に記述する必要がありますが、他のオプションと共に任意の順序で記述できます。

例#1:

sp_ctrl(sysA)>repair scott.emp sourcewhere "file >001005"

例#2:

次の例は、sourcewhereおよびwhereオプションをどのように組み合わせて、望ましい結果を得るかを示しています。ソースrepairプロセスのみがsourcewhere句を使用しますが、ソースrepairプロセスとターゲットrepairプロセスの両方がwhere句を使用します。

sp_ctrl(SysA)>repair scott.emp sourcewhere “deptno = 200” where “mgr = ‘SMITH’”

targetwhere "clause"

repairに有効

ソーステーブルに列が存在しない場合に、ターゲットテーブル内の1つまたは複数の列を基にrepairを行います。ターゲットテーブル上でこの条件によってフィルタリングされた行はロックされます。

  • clauseを二重引用符で囲み、完全修飾名でテーブルを参照します。例えば、scott.emp
  • 大文字と小文字を区別したり、テーブル名内にスペースを入れたりする場合は、二重引用符を使用します。
  • 日付は「YYYYSMMDDHH24MISS」の形式でなければなりません。日付をこの形式に変換するには、PostgreSQLのTO_DATE関数を使用します。例えば、c1がDATE列の場合、WHERE句"c1 > '10-SEP-2001'"は機能しませんが、"c1 > to_date('10- SEP-2001', 'DD-MON-YYYY')"は機能します。
  • オペレーティングシステムのコマンドラインからcompareを実行する場合、引用符で囲まれた文字列には、以下のようにエスケープされた二重引用符の余分なセットが必要です。

    /productdir/bin/sp_ctrl repair scott.emp targetwhere “\“file >001005\””

  • このオプションを使用する場合は、必要なコマンド引数の後に記述する必要がありますが、他のオプションと共に任意の順序で記述できます。

例#1:

sp_ctrl(SysA)> repair scott.emp targetwhere “file >001005”

例#2:

次の例は、targetwhereおよびwhereオプションをどのように組み合わせれば、望ましい結果が得られるかを示しています。ターゲットrepairプロセスのみがtargetwhere句を使用しますが、ソースrepairプロセスとターゲットrepairプロセスの両方がwhere句を使用します。

sp_ctrl(SysA)>repair scott.emp where “deptno = 200” targetwhere “mgr = ‘SMITH’” repair

threads thread_count

repairとrepair usingに有効

repairプロセスが使用する処理スレッドの数を設定します。

sp_ctrl(sysA)>repair scott.emp threads 4

sp_ctrl(sysA)>repair using sales threads 4

to target_owner.target_table [.partition]

repairに有効

ソーステーブルのターゲットの1つだけをrepairします。ソーステーブルが複数のターゲットシステムにレプリケートされ、ターゲットテーブルに異なる名前がある場合に使用します。

このオプションはターゲットパーティションを指定するためにも使用できます。

compare source_owner.source_table.[source_partition] to target_owner.target_table.[target_partition]

パーティションのrepair

sp_ctrl(SysA)>repair scott.emp.east to scott.allemp.alleast

whereclause

repairに有効

ソースシステムとターゲットシステムの両方で、SELECTステートメントにWHERE句を含めます。WHERE句は、特定の行をrepairするためのフィルタとして機能します。この条件によってフィルタリングされた行はロックされます。

clause"には、サブクエリを含まない標準のWHERE句を指定します。

  • clauseを二重引用符で囲み、完全修飾名でテーブルを参照します。例えば、scott.emp
  • 大文字と小文字を区別したり、テーブル名内にスペースを入れたりする場合は、二重引用符を使用します。
  • 日付は「YYYYSMMDDHH24MISS」の形式でなければなりません。日付をこの形式に変換するには、PostgreSQLのTO_DATE関数を使用します。例えば、c1がDATE列の場合、WHERE句"c1 > '10-SEP-2001'"は機能しませんが、"c1 > to_date('10- SEP-2001', 'DD-MON-YYYY')"は機能します。
  • このオプションを使用する場合は、必要なコマンド引数の後に記述する必要がありますが、他のオプションと共に任意の順序で記述できます。

sp_ctrl (SysA)>repair scott.emp where “region=4”

リモートオプション

これらのオプションにより、リモートマシンにコマンドを発行したり、ログイン名、パスワード、ポート番号、またはそれらの組み合わせを含むコマンドをスクリプト化したりすることができます。

オプション 説明
on host

リモートシステム現在のsp_ctrlセッションが実行されているシステム以外でコマンドを実行します。リモートシステムのログイン認証情報の入力を求めるプロンプトが表示されます。使用する場合は、コマンド構文の最後の構成要素でなければなりません。

例: sp_ctrl(sysB)>status on SysA

on host:portnumber

リモートログインとポート番号を指定する必要がある場合は、リモートシステムでコマンドを実行します。使用する場合は、コマンド構文の最後の構成要素でなければなりません。

例: sp_ctrl(sysB)>status on SysA:8304

on login/password@host

リモートログイン、パスワード、ホスト名を指定する必要がある場合は、リモートシステムでコマンドを実行します。使用する場合は、コマンド構文の最後の構成要素でなければなりません。

例:sp_ctrl(sysB)>status on john/spot5489@SysA

on login/password@host:portnumber

リモートログイン、パスワード、ホスト名、ポート番号を指定する必要がある場合は、リモートシステムでコマンドを実行します。使用する場合は、コマンド構文の最後の構成要素でなければなりません。

例: sp_ctrl(sysB)>status on john/spot5489@SysA:8304

関連ドキュメント

The document was helpful.

評価を選択

I easily found the information I needed.

評価を選択