Chat now with support
Chat with Support

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

このガイドについて このガイドで使用されている表記規則 SharePlex コマンド SharePlex パラメータ SharePlex ユーティリティ 付録 B:SharePlex 環境変数

remove config

remove config コマンドは、システムから恒久的に設定ファイルを削除するために使用します。このコマンドは、確認のためのプロンプトを「表示せず」、設定ファイルの削除は取り消すことができません。 アクティブ設定は削除できません。アクティブ設定を削除するには、それをまずディアクティベートします。

ヒント: 設定を誤って削除してしまった場合は、その設定が以前にアクティブであったことがあり、それをアクティベートしてから ora_cleansp を実行していない場合は、その設定を回復できる可能性があります。設定を回復するには、Event Log を表示して、その設定ファイルの activation ID を判断し、それから SharePlex 変数データディレクトリの save サブディレクトリの中で .conf.actid ファイルを探します。ここで、actid は Event Log から取得した activation ID です。

使用法:

サポートされるターゲット: すべて
権限レベル: Operator (2)
発行先: source system
関連コマンド: deactivate config、list config、show config、view config

構文

基本コマンド リモートオプション
remove config filename

[ on host |

on host:portnumber |

on login/password@host |

on login/password@host:portnumber ]

構文の説明

コンポーネント 説明
filename

削除する設定の名前。設定名には、大文字と小文字の区別があります。

例:

sp_ctrl(sysA)> remove config sales

リモートオプション

一連のオプションによって、リモートマシンに対するコマンドの発行や、ログイン名、パスワード、ポート番号、またはこれらの項目の組み合わせを含むコマンドのスクリプト化も可能になります。

オプション 説明
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

remove log

comparecompare using、repaircopy、および append コマンドは、ソースとターゲットの両方でログファイルを生成します。ジョブ情報とソースログファイルは、ジョブが SP_SYS_JOB_HISTORY_RETENTION よりも古くなった場合、または clear history コマンドが使用された場合にクリーンアップされます。データベースからジョブ履歴をクリーンアップせずに、ソース上のログファイルを削除する、またはターゲットからログファイルを削除するには、remove log コマンドを使用します。

例:

sp_ctrl> remove log age 5

Logs removed

使用法:

サポートされるターゲット: Oracle
権限レベル: Operator (2)
発行先: source system
関連コマンド: compare、repair、copy、append

構文

基本コマンド リモートオプション
remove log {all | age days | copy | compare}

[ on host |

on host:portnumber |

on login/password@host |

on login/password@host:portnumber ]

構文の説明

コンポーネント 説明
all

この引数は、すべてのログを削除します。

例:

sp_ctrl(sysA)> remove log all

age days

この引数は、指定日数よりも古いログを削除します。

例:

sp_ctrl(sysA)> remove log age 10

copy

この引数は、copy または append コマンドのログを削除します。

例:

sp_ctrl(sysA)> remove log copy

compare

この引数は、compare/repair コマンドのログを削除します。

例:

sp_ctrl(sysA)> remove log

リモートオプション

一連のオプションによって、リモートマシンに対するコマンドの発行や、ログイン名、パスワード、ポート番号、またはこれらの項目の組み合わせを含むコマンドのスクリプト化も可能になります。

オプション 説明
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

rename config

rename config コマンドは、設定ファイルに異なる名前を付けるために使用します。システム上の設定ファイルの中で一意の名前を使用します。

アクティブ設定は名称変更できません。アクティブ設定を名称変更するには、それをまずディアクティベートします。

使用法:

サポートされるターゲット: すべて
権限レベル: Operator (2)
発行先: source system
関連コマンド: copy config、edit config、list config、view config

構文

基本コマンド リモートオプション
rename config {filename to newname

[ on host |

on host:portnumber |

on login/password@host |

on login/password@host:portnumber ]

構文の説明

コンポーネント 説明
filename to newname
  • filename は、名称変更する設定の名前です。設定名には、大文字と小文字の区別があります。
  • to は構文の必須部分です。
  • newname は、設定に与える新しい名前です。

例:

sp_ctrl(sysA)> rename config sales to sales2

リモートオプション

一連のオプションによって、リモートマシンに対するコマンドの発行や、ログイン名、パスワード、ポート番号、またはこれらの項目の組み合わせを含むコマンドのスクリプト化も可能になります。

オプション 説明
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

repair / repair using

repair および repair using コマンド(repair コマンドとして総称)を使用して、単一または複数のターゲットテーブル内の非同期行を修復します。

  • repair コマンドは、個別のターゲットテーブルか、ワイルドカードの使用によって特定のスキーマ内のターゲットテーブル(任意の数)を修復します。個別のテーブルの修復時には、カラムベースのフィルタリングによって、修復対象として選択される行を制御できます。
  • repair using コマンドは、アクティブな設定内に列挙されているか、アクティブな設定内のテーブルのサブセットを含む別ファイル内に列挙されている、すべてのターゲットテーブルを修復します。

repair コマンドは最初に比較を実行して、修復の必要がある行を特定してから、修復を実行します。テーブルの比較方法の詳細については、「compare/compare using」を参照してください。

注: 実行中の比較または修復は、どんな方法でもソーステーブルに影響しません。SharePlex は、読み取りの一貫性のクエリのためだけにデータベースにログインし、ソーステーブルのロックは短時間です。SharePlex は処理中にターゲットテーブルを短時間ロックしますが、ユーザーはロックについてほとんど、またはまったく気付かずにそれらのテーブルにアクセスを継続できます。

サポートされる操作

SharePlex は、DML 操作(INSERT、UPDATE、DELETE)によって引き起こされたターゲットテーブル内の非同期行を検出して修復できます。特定のデータ型とオブジェクトの比較および修復のサポートの詳細については、『SharePlex リリースノート』を参照してください。

サポートされていない

  • SharePlex は、次の比較および修復をサポートしていません(スキップします)。

    • VARRAY 内部の UDT。他の UDT がサポートされています。
    • シーケンス。
    • トランスフォーメーションが使用されたテーブル。
    • ソースとターゲットサーバー間でデータを渡すために使用されるパススルーサーバーが使用されるネットワーク設定。
    • ソースおよびターゲット(ソース上の CLOB、ターゲット上の BINARY、またはその逆)に異なるストレージを持つ XMLtype。Like to like compare/repair がサポートされています。
    • VARRAY 型は SDO_GEOMETRY または ST_GEOMETRY の内部にはありません
  • カスケードレプリケーション環境では、比較および修復はサポートされていません。
  • 比較または修復するテーブルには DDL を実行しないでください。比較では、SharePlex がサポートする状態を含め、DDL 操作によって引き起こされた非同期状態を検出しません。DDL によってテーブル定義が変更された場合、比較処理によって作成された SELECT 文が無効化され、比較が必要な行が取得されます。次のエラーは、DDL が発生したことを示します。

    Oracle Error:ORA-01466: unable to read data - table definition has changed

    DDL によって引き起こされた非同期状態を修正すれば、repair コマンドを使用して行のデータを再同期できます。

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

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

その他の条件

  • 比較または修復するテーブルは、アクティブな設定ファイルの一部である必要があります。
  • ソーステーブルのコミットされていないトランザクションにより、比較および修復プロセスが、読み取りの一貫性のために必要な短時間のロックをできなくなります。比較または修復を実行する前に、すべてのトランザクションがコミットされていることを確認します。
  • 複製の遅延により、比較および修復プロセスのパフォーマンスが低下します。ターゲット上の比較および修復プロセスを生成するソースからのメッセージは、複製されたデータとともにキューを通して送信されます。またデータバックログによって引き起こされる遅延によって、生成メッセージが遅延し、ソースプロセスの読み取りの一貫性が失われる可能性があります。可能な場合は、オフピーク時に比較と修復を実行します。

  • 複製または修復するテーブルは切り詰めないでください。比較コマンドは、開始時に各ソーステーブルのスナップショットを取ります。テーブルが切り詰められた場合、スナップショットの中のテーブルビューが切り詰められ、コマンドが無効な非同期状態を返すことがあります。

repair コマンドの使用方法

比較および修復コマンドを使用して同期したデータを維持するには、最初に compare または compare using コマンドを実行してから、repair status コマンドで結果を表示することをお勧めします。このコマンドは、非同期になっている行および考えられる原因を示します。非同期状態の原因を修正しない限り、この時点で行を修復しても、複製は再び非同期になります。問題を修正したら、repair または repair using コマンドを発行します。

事前の比較を行わずに、repair または repair using コマンドを実行できます。このコマンドは、最初に比較を実行して、非同期行を特定し、それらの行を修復します。ただし今後の非同期状態を防ぐために、非同期状態の根本的な原因を修正する必要があります。

非同期状態の原因および解決方法については、『SharePlex 管理ガイド』の「同期の問題の解決」を参照してください。

修復を実行するとき

ターゲットテーブルを修復する最良の時期は、テーブルのサイズ、問題の原因、非同期行の範囲、およびどれだけの時間ユーザーをロックアウトできるかによって異なります。修復を開始する前に、次の条件を考慮します。

  • テーブルのユーザーは通常、テーブルを比較するときに適用される短時間のロックの影響を受けませんが、repair プロセスの間は、ターゲットテーブルからロックアウトされます。小さなテーブルの場合は、これは大問題になりませんが、広汎な修復が必要な大きなテーブルの場合は、待ち時間は大問題になることがあります。
  • ターゲットテーブルをロックすると、そのテーブルに変更を加えて他のテーブルに移動する前に Post が修復の終了を待つ必要がある場合に、post のパフォーマンスが低下する可能性があります。このため、ターゲットデータの遅延が増加し、post キューに操作が蓄積されます。変更が必要なオブジェクトの Post が修復するオブジェクトと異なる場合は、2 つのプロセスを同時に実行できます。
  • テーブルをすぐに修復する必要があるが、ロックまたは複製の遅延を許容できない場合は、修復を特定の行に限定するために、where オプションを使用できます。代わりに key オプションも使用できますが、修復で一部の非同期行が消失する可能性があります。

  • 修復まで待つことができる場合は、問題の原因をすぐに修正してから、ピーク時間外に修復を実行します。

特別な使用事例

次のシナリオでは、比較の実行時に特別な処理が必要です。

使用事例 サポートの比較
集約レプリケーション

中央データベース内のターゲットテーブルには、投稿元のソースデータベースよりも多くの行が存在しており、多くの場合、ソースデータベースよりも多くの列が存在します。このような環境で repair コマンドを使用する場合は、特別な考慮が必要です。

repair using コマンド

集約レプリケーションは、repair using コマンドによってサポートされていません。repair using コマンドによって、ソーステーブルに存在しないターゲット行が意図せず削除されることがあります。

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

repair コマンド

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

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

重要!この設定をセットアップするには、『SharePlex 管理ガイド』の「中央データストアを維持するための複製の設定」を参照してください。ソース ID を特定する以外の集約レプリケーションの実装で比較または修復コマンドを使用すると、ターゲット行が意図せず削除されることがあります。

ターゲット行を正確に選択できるようにするには、targetwhere オプションと where オプションを組み合わせる必要があります。

ピアトゥピアレプリケーション

ピアトゥピア設定では、どのシステムが信頼されるソースシステムで、どちらがセカンダリシステム、つまりターゲットシステムであるかを判断する必要があります。セカンダリシステムは、修復が実行されるシステムです。ピアトゥピア環境で比較または修復を実行する前に、次のステップに従います。

  1. セカンダリシステムでのユーザーアクセスを停止し、そのシステムからの複製された操作が信頼されるソースデータベースに post するのを待ちます。ユーザーはソースデータベースへのアクセスを継続できます。
  2. ソースおよびセカンダリシステムで qstatus コマンドを発行します。
  3. キューの中のメッセージが 10 個以下である場合は、ソースシステムから比較を実行します。
  4. 比較時に、sp_desvr および sp_declt の起動後に、ソースデータベースおよびセカンダリデータベースへのユーザーアクセスを許可できます。
  5. ユーザーをテーブルからロックせずに、ターゲットテーブルの選択した行を修復するには、where オプションを指定した repair コマンドを使用します。
キーなしのテーブル

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

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

ソーステーブルよりも多くの列があるターゲットテーブル

repair および repair using コマンドは、ソーステーブルにないターゲット列を無視します。修復は次の作業を行ないます。

  • INSERT は、ソーステーブルの中に対応する列があるターゲット列に値を挿入しますが、追加の列には挿入しません。NOT NULL 制約があるがデフォルト値のない列では、Oracle エラーが発生します。ターゲットテーブルの余分な列では、デフォルト値を使用することをお勧めします。
  • UPDATE は、ソーステーブルの中に対応する列があるターゲット列の値を再同期しますが、追加の列の値にはこれを行いません。
  • DELETE は、ターゲットテーブルの中の追加の列によって影響を受けません。これは、repair コマンドが、一致する列の中の列データに基づいて行を選択するためです。
UNIQUE 制約が含まれるテーブル

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

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

  • ターゲットテーブルで UNIQUE 制約を無効にしてから repair コマンドを実行し、修復が終了した後で制約を再び有効にします。
  • 一意制約違反が発生したターゲット行を削除してから修復を再実行して、SharePlex が正しいデータを行に挿入できるようにします。
LOB 列が含まれているテーブル

いずれかのターゲットテーブルに LOB 列が存在する場合、修復時間は長くなります。修復を高速化するには、SP_DEQ_SKIP_LOB パラメータを 0 に設定して、LOB 列が比較および修復でスキップされるようにします。詳細については、次を参照: SP_DEQ_SKIP_LOB

repair の仕組み

repair は、DML 操作によって引き起こされたターゲットテーブル内の非同期状態を修復します。

  • 余分な行または消失した行
  • 値が一致しない行

repair の条件

repair および repair using コマンドは、次の修正用の SQL 文を発行します。

  • ソース側に行が存在しているが、ターゲット側にない場合は、SharePlex は INSERT 文を発行します。
  • ターゲット側に行が存在しているが、ソース側にない場合は、SharePlex は DELETE 文を発行します。
  • ターゲットの行がソースの行と異なり、キー列が一致する場合は、SharePlex はソースの値に基づいて UPDATE 文を発行します。
  • repair または repair using コマンドを Oracle パーティション化テーブルで使用している場合、repair プロセスのデフォルト動作は、INSERT および DELETE だけを使用して行を修復することです。UPDATE を必要とする修復は、DELETE とそれに続く INSERT に変換されて、UPDATE によって行がパーティションを変更し、テーブルで行の移動ができなくなるエラーを防止します。SharePlex が INSERT、UPDATE、および DELETE を正しく使用してパーティション化テーブルを修復するように、修復動作を変更できます。詳細については、次を参照: SP_DEQ_PART_TABLE_UPDATE

プロセス

repair は常に、ターゲットテーブル内の非同期状態を特定するための比較を伴います。repair または repair using コマンドを実行すると、SharePlex が次のイベントシーケンスを開始します。

  1. sp_cop プロセスが、ソースシステムで sp_desvr(サーバー)プロセスを起動します。
  2. sp_desvr プロセスが、sp_ctrl インターフェイスの制御および使用をユーザーに戻します。複製は、比較の実行中も継続されます。
  3. sp_desvr プロセスが Post にメッセージを送信して、ターゲットシステムで sp_declt(クライアント)プロセスを開始します。
  4. サーバおよびクライアントのプロセスは、互いに直接通信を確立します。
  5. 行の選択と修復は、次のように進行します。

    • repair コマンドを使用している場合、sp_desvr はソーステーブルから、sp_declt はターゲットテーブルからそれぞれ行を選択します。行の並べ替え、比較、および修復が行われます。
    • repair using コマンドを使用している場合は、sp_desvr プロセスはターゲットシステム上に多数の処理スレッドを作成します。SP_DEQ_THREADS パラメータの設定値によって、作成するスレッドの数を制御します。各スレッドは、sp_declt(クライアント)プロセスを 1 つ起動します。サーバおよびクライアントのプロセスは、互いに直接通信を確立します。処理負荷は、クライアントのプロセス間で分散されます。各ソースおよびターゲットテーブルから取得された行の選択、並べ替え、比較、および修復が行われます。修復中のターゲットテーブルはロックされます。修復が完了すると、ロックが解除されます。
    • 順番が回ってきた修復対象ターゲットテーブルはロックされます。作業が完了すると、ロックは解除されます。

  6. 処理が終了すると、プロセスはそれぞれのログファイルに情報を書き込みます。処理の結果は、show repair コマンドで表示できます。

エラー処理

修復用の SQL 文を適用しているときにデータベースエラーが発生した場合は、SharePlex はその文から先の修復を停止して、以前に適用した有効な文だけをコミットします。このために、テーブルは部分的に修復されますが、まだ非同期になっていることがあります。repair status コマンドは、この状況をアラートで通知します。

SQL ログファイルの管理

compare および repair コマンドは、非同期行の修復に必要な SQL をログファイルと同じ場所の SQL ファイルに書き込みます。compare コマンドのみが発行される場合、SharePlex はこれらの SQL 文を実行しません。repair コマンドが発行される場合、このコマンドは compare コマンドと同一の機能を実行しますが、SQL 文を実行して非同期行を修復する点が異なります。

SQL ログファイルの出力は抑制できます。このファイルを抑制する理由はいくつかあります。

  • データには機密情報が含まれています。SQL ログファイルはクリアテキストで書き込まれます。SQL ログファイルを作成しないことで、機密データがディスクに保存されず、保存データのセキュリティ要件(PCI コンプライアンス基準への対応に必要な要件など)を満たす可能性があります。
  • 比較または修復されたテーブルには、膨大な非同期行があります。このサイズのログファイルは、大量のディスク領域を消費することがあります。

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

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

詳細については、次を参照: SharePlex 変数

複数のプロセスの実行

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

  • 複数の compare および repair コマンドは同時に動作して、ソースおよびターゲットテーブルのペアをそれぞれ処理できます。また、1 つのコマンドで Oracle ワイルドカードを使用して、複数のテーブルのセットを指定することもできます。SharePlex が、ワイルドカードをサポートする方法の詳細については、『SharePlex 管理ガイド』の「ワイルドカードによる複数のオブジェクトの指定」を参照してください。
  • compare using および repair using コマンドは、ファイル全体で動作します。たとえば、設定ファイル全体のテーブルを比較または修復したり、1 つ以上の比較ファイルを作成したり、ターゲットテーブルのサブセットに影響を与えるファイルを修復したり、これらを同時に実行したりすることができます。手順については、コマンド構文を参照してください。

複製プロセス、比較および修復プロセスを含めて、最大で 20 個の SharePlex プロセスが、同時に post キューを使用できます。任意の時間に最大で 5 つの比較および修復プロセスを実行することをお勧めします。compare using および repair using コマンドを使用すると、プロセスごとにさらに多くのテーブルを比較することで、20 個というプロセス制限を回避できます。

制限に達したために比較または修復が失敗した場合、SharePlex はメッセージをイベントログに記録します。

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

設定のサブセットの修復

次の方法で、アクティブな設定のサブセットを修復できます。

  • 単一のスキーマに属する、レプリケーション内のすべてのターゲットテーブルを修復するには、repair コマンドをワイルドカードとともに使用します。

    sp_ctrl> repair scott.%

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

    sp_ctrl> repair using myconfig

  • 単一のターゲットルート内のすべてのターゲットテーブルを修復するには、repair using コマンドを at オプション付きで使用します。

    sp_ctrl> repair using config.active at prodsys@o.ora112

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

修復対象の行の制御

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

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

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

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

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

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

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

    重要! 追加の行を持つターゲットテーブルに対して比較と修復の両方を実行する予定がある場合は、UPDATE および DELETE を比較するために、targetwhere のみを使用します。repair コマンドは、INSERT の正しい値を判別できません。この問題を回避するには、追加の列にデフォルト値を設定するか、挿入した行を手動で更新します。

プロセスの識別

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

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

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

  • この基本コマンドでは、最後に実行された repair ジョブの処理ステータス、およびまだ完了していないその他のジョブが表示されます。
  • その他のオプションを利用して、履歴が存在しているすべての repair ジョブのサマリステータス、または特定のジョブの詳細情報を表示することもできます。

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

警告およびエラーの表示

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

sp_desvr プロセスによって書き込まれるログの名前は desvr_JobID_SID_pProcessID.log です。ここで、

  • JobID は、SharePlex が割り当てたジョブ ID です。
  • SID は、ソーステーブルが存在する Oracle インスタンスの、ORACLE_SID です。
  • ProcessID は、sp_desvr プロセスのプロセス ID です。

sp_declt プロセスによって書き込まれるファイルの名前には、declt_JobIDTableID_SID_SourceHost_pProcessID.log または .sql のいずれかが付けられます。ここで、

  • JobID は、ジョブに SharePlex が割り当てたジョブ ID です。
  • TableID は、ジョブ内のテーブルに対して SharePlex が割り当てたテーブル ID です。
  • SID は、ソーステーブルが存在する Oracle インスタンスの、ORACLE_SID です。
  • SourceHost は、ソースホストの名前または IP アドレスです。
  • ProcessID は、sp_declt プロセスのプロセス ID です。

ログファイル名の例

desvr_606_ora112_p14610.log

declt_606-1_ora112_prodsys_p6528.log

declt_606-1_ora112_prodsys_p6528.sql

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

repair ジョブのキャンセル

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

sp_ctrl(sysA)>cancel JOBID

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

比較履歴とログの管理

SharePlex は、ソースシステム上のデータベース内で完了した各ジョブの履歴を保持します。SP_SYS_JOB_HISTORY_RETENTION パラメータは、履歴が保持される期間を制御します。

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

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

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

バッチサイズの制御

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

使用法:

サポートされるターゲット: Oracle
権限レベル: Operator (2)
発行先: ソースシステム
関連コマンド: compare/compare using

構文

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

[ at target_host@o.target_sid ] |

[ for o.source_sid ] |

[hinthint”] |

[ {include | exclude} "column_list" ] |

[ insertonly ] |

[ key ] |

[ nosqllog ] |

[ not "exception_list" ] |

[ onepass ] |

[ orderby "column_list” ] |

[ parallelism degree ] |

[ port port_number ] |

[ 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]

この基本コマンドは、すべてのターゲット行ですべてのソース行を修復します。

owner.source_table は、ソーステーブルの所有者および名前です。“HR”.emp のように、大文字小文字の区別を強制したり、名前の中にスペースを使用したりする場合は、二重引用符を使用します。

ワイルドカードを使用したテーブル名(所有者名ではありません)がサポートされています。修復するには、このコマンドでワイルドカードを満たすテーブルを、アクティブな複製設定で(明示的にまたはワイルドカードで)リストする必要があります。SharePlex によるワイルドカード処理の詳細については、『SharePlex 管理ガイド』の「ワイルドカードによる複数のオブジェクトの指定」を参照してください。

例:

sp_ctrl(sysA)>repair scott.emp

repair using filename

この基本コマンドは、filename で列挙されたターゲットテーブル内のすべての非同期行を修復します。

filename は、修復するターゲットを持つソーステーブルの名前を含むファイルの名前です。

例:

sp_ctrl(sysA)>repair using sales

オプションのコマンドコンポーネント

コンポーネント 説明
at target_host@o.target_sid

repair コマンドに有効

ソーステーブルが複数のターゲットシステムに複製される設定で、1 つのターゲットテーブルに限定して修復します。

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

target_sid は、ターゲット Oracle インスタンスの ORACLE_SID です。

例:

sp_ctrl(SysA)>repair scott.emp at prod@o.prodsid

for o.SID

repair コマンドに有効

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

SID は、ソースインスタンスの ORACLE_SID です。SID には大文字と小文字の区別があり、oratab ファイル、V$PARAMETER テーブル、または Windows レジストリの表示内容と同じように入力する必要があります。

使用するときは、このオプションは必須コマンド引数の後につける必要がありますが、他のオプションと任意の順序でつけることができます。

例:

sp_ctrl (SysA)>repair scott.emp for o.oraA

hint "hint"

repair コマンドに有効

SELECT 文の Oracle ヒントが含まれます。ヒントは、ソースおよびターゲットシステムで使用します。

hint” は、標準の Oracle ヒント(2000 文字以内)です。ヒント全体を二重引用符で囲みます。ヒント文字列では、冒頭の /*+ および末尾の */ を省略します。これらは SharePlex によって付加されます。

使用するときは、このオプションは必須コマンド引数の後につける必要がありますが、他のオプションと任意の順序でつけることができます。

例:

sp_ctrl (SysA)>repair scott.emp where “file >001005” hint “emp(salary)”

オペレーティングシステムのコマンドラインから repair を実行する場合、引用文字列には追加のエスケープ用二重引用符を付加する必要があります。

/productdir/bin/sp_ctrl repair scott.emp hint “\“emp(salary)\””

{include | exclude} "(column_list)"

repair コマンドに有効

修復対象の列をフィルタします。

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

(column_list) は、含める列または除外する列のリストです。

  • 各名前はコンマで区切ります。列の名前にスペースが含まれていない限り、リスト内でスペースを使用することはできません。
  • 列リストは二重引用符で囲みます。
  • 列挙する列の順序は任意です。並べ替えは昇順で行われます。
  • 列名には、大文字と小文字の区別がありません。
  • このオプションを使用する場合は、コマンドの必須引数の後に付ける必要がありますが、他のオプションと任意の順序で付けることができます。

注意: 修復されなかった非同期行が列に残る可能性があります。

例:

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

insertonly

repair コマンドに有効

INSERT 文に限定してターゲットテーブルを修復します。

例:

sp_ctrl(SysA)>repair scott.emp insertonly

key

repair および repair using コマンドに有効

サイズの大きなテーブルの高速な比較および修復を実行します。このコマンドはすべてのデータ値を比較するわけではなく、次のいずれかに限定して比較します。

  • PRIMARY キー列または非 NULL の UNIQUE キー列。

    または

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

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

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

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

このオプションは、SharePlex キー定義に対する修復の基準として使用しないでください。SharePlex キー定義の詳細については、『SharePlex 管理ガイド』の「一意のキーの定義」を参照してください。

例:

sp_ctrl (SysA)>repair scott.emp key

sp_ctrl(sysA)>repair using sales key

nosqllog

SQL ログファイルの出力を抑制します。このファイルには、非同期行の修復に必要な SQL が含まれています。このファイルを出力しない場合、いくつかの理由が挙げられます。

  • データには機密情報が含まれています。SQL ログファイルはクリアテキストで書き込まれます。SQL ログファイルを作成しないことで、機密データがディスクに保存されず、保存データのセキュリティ要件(PCI コンプライアンス基準への対応に必要な要件など)を満たす可能性があります。
  • 比較または修復されたテーブルには、膨大な非同期行があります。このサイズのログファイルは、大量のディスク領域を消費することがあります。
notexception_list

repair コマンドに有効

テーブル指定にワイルドカードが含まれている場合に修復の対象から除外するため、テーブルの例外リストを指定します。

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

  • owner.tablename のフォーマットを使用します。
  • 各名前はコンマで区切ります。リスト内では、スペースを使用できません。
  • リストを二重引用符で囲みます。
  • 任意の順序でテーブルをリストします。
  • このオプションを使用する場合は、コマンドの必須引数の後に付ける必要がありますが、他のオプションと任意の順序で付けることができます。

例:

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

onepass

repair および repair using コマンドに有効

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

通常、修復は最初に compare、次に repair(このとき、ターゲットテーブルはロックされます)という 2 つのパスで実行されます。この両方のパスで一貫性のあるビューが必要です。onepass を使用すると、比較クライアントが一貫性のあるビューマーカーを受信した直後にターゲットテーブルがロックおよび修復されます。

例:

sp_ctrl(SysA)>repair scott.emp onepass

orderbycolumn_list

repair コマンドに有効

比較する行を並べ替えるときに repair プロセスの ORDERBY 句で使用する列を指定します。このオプションによって、プライマリキーまたは一意キーを持たないテーブルに対して修復を実行できるようになります。

"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

port port_number

repair および repair using コマンドに有効

ソースまたはターゲットシステムの SharePlex のバージョンが 8.0 より前の場合、下位互換性のために使用できます。

サーバプロセスとの通信に使用するクライアントプロセスのソースシステム上のポートを指定します。以前のバージョンの SharePlex では、通信は双方向で、クライアントとサーバ間の通信では、ランダムなポート番号がデフォルトで選択されていました。このオプションは、ランダムなポート選択を、ファイアウォールで必要とされるような特定のポート番号で上書きします。

例:

sp_ctrl(sysA)>compare scott.emp port 1234

sourcewhereclause

repair コマンドに有効

対象の列がターゲットテーブル内に存在しない場合、ソーステーブル内の 1 つまたは複数の列を repair の基準にします。

  • clause を二重引用符で囲み、テーブルを完全修飾名(scott.emp など)で参照します。
  • 大文字小文字の区別を強制したり、テーブル名の中にスペースを使用したりする場合は、二重引用符を使用します。
  • 日付は、'YYYYSMMDDHH24MISS' のフォーマットにする必要があります。日付をこのフォーマットに変換するには、Oracle の 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\””

  • 使用するときは、このオプションは必須コマンド引数の後につける必要がありますが、他のオプションと任意の順序でつけることができます。

Example #1:

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

Example #2:

次の例は、sourcewherewhere のオプションを組み合わせて目的の結果を得る方法を示しています。sourcewhere 句を使用するのは、ソースの repair プロセスに限定されますが、where 句を使用するのは、ソースとターゲットの両方の repair プロセスです。

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

targetwhere "clause"

repair コマンドに有効

対象の列がソーステーブル内に存在しない場合、ターゲットテーブル内の 1 つまたは複数の列を repair の基準にします。

  • clause を二重引用符で囲み、テーブルを完全修飾名(scott.emp など)で参照します。
  • 大文字小文字の区別を強制したり、テーブル名の中にスペースを使用したりする場合は、二重引用符を使用します。
  • 日付は、'YYYYSMMDDHH24MISS' のフォーマットにする必要があります。日付をこのフォーマットに変換するには、Oracle の TO_DATE 関数を使用します。たとえば、c1 が DATE 列である場合、WHERE 句 "c1 > '10-SEP-2001'" は無効ですが、"c1 > to_date('10- SEP-2001', 'DD-MON-YYYY')" は有効です。
  • オペレーティングシステムのコマンドラインから比較を実行する場合、引用文字列には追加のエスケープ用二重引用符を付加する必要があります。

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

  • 使用するときは、このオプションは必須コマンド引数の後につける必要がありますが、他のオプションと任意の順序でつけることができます。

Example #1:

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

Example #2:

次の例は、sourcewherewhere のオプションを組み合わせて目的の結果を得る方法を示しています。targetwhere 句を使用するのは、ターゲットの repair プロセスに限定されますが、where 句を使用するのは、ソースとターゲットの両方の repair プロセスです。

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 つのターゲットに限定して修復します。ソーステーブルが複数のターゲットシステムに複製され、ターゲットテーブルの名前が異なる場合に使用します。

このオプションを使ってターゲットパーティションを指定することもできます。

例:

(パーティションの修復)

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

whereclause

repair コマンドに有効

ソースおよびターゲットシステムの両方の SELECT 文に、WHERE 句を含めます。WHERE 句は、特定の行を修復するフィルタとして機能します。

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

  • clause を二重引用符で囲み、テーブルを完全修飾名(scott.emp など)で参照します。
  • 大文字小文字の区別を強制したり、テーブル名の中にスペースを使用したりする場合は、二重引用符を使用します。
  • 日付は、'YYYYSMMDDHH24MISS' のフォーマットにする必要があります。日付をこのフォーマットに変換するには、Oracle の 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

Related Documents

The document was helpful.

Select Rating

I easily found the information I needed.

Select Rating