Tchater maintenant avec le support
Tchattez avec un ingénieur du support

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

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

cancel

cancelコマンドは、実行中のcomparerepaircopy、またはappendコマンドジョブをキャンセルするために使用します。

ジョブをキャンセルするには、キャンセルするジョブのジョブIDを指定する必要があります。ジョブIDは、compare、repair、copy、またはappend ジョブを開始するコマンドを発行したときに、そのジョブから返されます。

sp_ctrl> repair using 1elliot

repairing 7 of 7 objects

repair started; job id 408

または、job statusコマンドを発行することで、直近にストリームされたジョブのジョブIDを取得することもできます。

sp_ctrl> job status

Job ID: 408

PID: 11527

Host: prodsys

Started: 22-FEB-15 18:08:09

Job Type: Repair

Status: Processing - 0 objects completed

用途

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

構文

基本コマンド リモートオプション
cancel job_id

[ on host |

on host:portnumber |

on login/password@host |

on login/password@host:portnumber ]

構文の説明
コンポーネント 説明
jobID

キャンセルするジョブのID。

:

sp_ctrl>cancel 407

リモートオプション

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

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

clear history

clean historyコマンドは、compare、repair、copy、appendコマンドの古いジョブから情報とログを削除するために使用します。

これらのジョブは、ソースシステムとターゲットシステムにログファイルを生成します。デフォルトでは、ジョブがSP_SYS_JOB_HISTORY_RETENTIONパラメータで設定された値より古くなると、ジョブ情報とログファイルが消去されます。clear historyコマンドを使用すると、特定のジョブやテーブル、または特定の期間を経過したすべてのジョブについて、ジョブ情報とログをオンデマンドでクリアすることができます。

用途

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

構文

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

clear history

{ all |

source_owner.source_table |

age days |

jobID }

[for o.source_sid]

[ on host |

on host:portnumber |

on login/password@host |

on login/password@host:portnumber ]

構文の説明
コンポーネント 説明
all

すべてのジョブを削除します。

:

sp_ctrl(sysA)> clear history all

source_owner.source_table

特定のテーブルの履歴を削除します。

:

sp_ctrl(sysA)> clear history clear history user2.employee

age days

指定した日数より古いジョブ履歴を削除します。

:

sp_ctrl(sysA)> clear history age 10

jobID 指定されたジョブIDjob statusコマンドで取得の履歴を削除します。
for o.source_sid

オプション。アクティブな設定がない場合、または複数のアクティブな設定がある状況でclear historyコマンドを使用するために使用できます。いずれの場合も、forオプションを使用してソースSIDを指定する必要があります。

:

sp_ctrl(sysA)>clear history all for o.source_sid1

リモートオプション

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

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

clear status

ステータスデータベースから古い警告メッセージを削除するには、clear statusコマンドを使用します。

このコマンドを使用するには:

  1. show statusdb detailコマンドを実行して、消去できるメッセージを見つけます。消去可能なメッセージは、Clear列にYesが指定されています。
  2. 一部のメッセージだけ消去したい場合は、消去する各メッセージのステータスIDをメモしておきます。
  3. ステータスIDごとにclear statusコマンドを発行するか、all引数を使用して、消去可能なすべてのメッセージを一度に削除します。

SharePlexは、消去されたメッセージを識別するメッセージをイベントログに書き込みます。

このコマンドは、デフォルトシステムのステータスデータベースからメッセージを消去します。別のシステムのステータスデータベースからメッセージを消去するには、[on host]オプションを使用します。

注: すべてのメッセージが消去できるわけではありません。

用途

サポート対象のソース: Oracle
サポート対象のターゲット: すべて
認証レベル: オペレーター2
発行対象: ソースまたはターゲットシステム
関連コマンド: show statusdb

構文

基本コマンド リモートオプション
clear status {statusID| all}

[ on host |

on host:portnumber |

on login/password@host |

on login/password@host:portnumber ]

構文の説明
コンポーネント 説明
statusID

削除したい個のメッセージのSharePlex割り当てIDshow statusdbコマンドを使用して取得

:

sp_ctrl(sysA)>clear status 20

all

この引数を使用すると、消去可能なメッセージがすべて削除されます。

:

sp_ctrl(sysA)>clear status all

リモートオプション

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

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

compare / compare using

compareおよびcompare usingコマンドまとめてcompareコマンドと呼びますを使用して、ターゲットテーブルがソーステーブルと同期していることを確認します。

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

compareを実行した後、repairコマンドまたはrepair usingコマンドを実行し、同期していない行をrepairすることができます。

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

サポートされている操作

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

サポートなし

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

    • 高度なデータ型

      • TEXT

      • CHAR > 2,000

      • VARCHAR > 4000

      • サイズなしのVARCHAR

      • BYTEA

    • シーケンス
    • トランスフォーメーションが使用されたテーブル
    • ソースサーバとターゲットサーバ間のデータ受け渡しにパススルーサーバを使用するネットワーク構成
  • カスケードレプリケーション環境では、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より少なくなければなりません。

特別な使用例

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

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

統合レプリケーションは、ターゲットデータベースと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_desvrログに、コマンドがこれらの列をキーとして使用したという通知を出力します。

余分なソース列またはターゲット列があるテーブル

ソーステーブルまたはターゲットテーブルに余分な列があり、それらの列にソートの基準となる一意の値が含まれている場合は、sourcewhere句またはtargetwhere句とともにcompareコマンドを使用します。「compareする行の制御」を参照してください。

XMLデータでのcompare操作

XMLデータに対してCompare操作を実行すると、「ORA-04036: PGA memory used by instance exceeds PGA_AGGREGATE_LIMITORA-04036: インスタンスが使用するPGAメモリがPGA_AGGREGATE_LIMITを超えています」エラーが表示されます。

回避策:

  1. Oracleをバージョン19.19 DBRUにアップグレードします

  2. 提供されている以下のOracle推奨スクリプトを使用して、適切なPGA_AGGREGATE_LIMITを設定します

    WITH

    MAX_PGA as

    (select round(value/1024/1024,1) max_pga from v$pgastat where name='maximum PGA allocated'),

    MGA_CURR as

    (select round(value/1024/1024,1) mga_curr from v$pgastat where name='MGA allocated (under PGA)'),

    MAX_UTIL as

    (select max_utilization as max_util from v$resource_limit where resource_name='processes')

    SELECT

    a.max_pga "Max PGA (MB)",

    b.mga_curr "Current MGA (MB)",

    c.max_util "Max # of processes",

    round(((a.max_pga - b.mga_curr) + (c.max_util * 5)) * 1.1, 1) "New PGA_AGGREGATE_LIMIT (MB)"

    FROM MAX_PGA a, MGA_CURR b, MAX_UTIL c

    WHERE 1 = 1;

  3. SharePlexバージョン11.1にアップグレードするか、そのバージョンをインストールします。

compareの仕組み

compareは、DML操作によって引き起こされる次のようなターゲットテーブルの非同期状態を検出します。

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

ソースシステムでcompareコマンドまたはcompare usingコマンドを実行すると、SharePlexは以下のイベントを開始します。

  1. sp_copプロセスは、ソースシステム上にsp_desvr サーバープロセスを生成します。
  2. sp_desvrプロセスは、sp_ctrlインターフェイスの制御と使用をユーザに返します。compareが進行している間、レプリケーションは続行されます。
  3. sp_desvrプロセスは、ターゲットシステム上でsp_declt クライアントプロセスを開始するために、Postプロセスにメッセージを送信します。
  4. サーバプロセスとクライアントプロセスによって相互の通信が確立されます。
  5. プロセスは、ソーステーブルとターゲットテーブルの行数をcompareすることにより、サニティチェックを実行します。ソーステーブルとターゲットテーブルの行数の差が20%より大きい場合、コマンドは終了します。サニティチェックは、ターゲットデータを再読み込みすることでより迅速に修正できるテーブルのcompareやrepairに無駄な時間をかけることを防ぎます。copyコマンドまたはappendコマンドを使用してターゲットデータを再読み込みするか、別の方法を使用することができます。サニティチェックを上書きするには、overrideオプションを指定してcompareコマンドを再発行します。
  6. サニティチェックをオーバーライドするには、Overrideオプションを指定してCompareコマンドを再発行します。
  7. 行数がサニティチェックに合格すると、テーブルは以下のようにcompareされます。

    • compareコマンドを使用している場合、sp_desvrでソース行を選択し、sp_decltでターゲット行を選択して、行をソートしてcompareします。
    • compare usingコマンドを使用している場合、sp_desvrプロセスはターゲットシステム上に多数の処理スレッドを作成します。SP_DEQ_THREADSパラメーターによって設定される値は、作成されるスレッド数を制御します。各スレッドは、sp_decltクライアントプロセスを生成します。サーバプロセスとクライアントプロセスによって相互の通信が確立されます。処理負荷はクライアントプロセス間で分割されます。ソースとターゲットの各テーブルから行が選択され、ソートされ、compareされます。
  8. 終了すると、プロセスによってログファイルが書き出され、show compareコマンドで結果を見ることができます。

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およびrepairプロセスなど、最大で20のSharePlexプロセスでpostキューを同時に使用することができます。一度に最大で5つのcompareおよびrepairプロセスを実行できるようにすることをお勧めします。

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

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

設定のサブセットのcompare

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

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

    sp_ctrl> compare scott.%

  • 設定ファイル内の全テーブルをcompareするには、compare usingコマンドを使用します。

    sp_ctrl> compare using myconfig

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

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

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

compareする行の制御

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でステータスと結果を表示

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

  • 基本コマンドは、最近開始されたcompareジョブの処理ステータスと、まだ実行中のその他のcompareジョブを表示します。
  • 追加オプションを使用して、履歴のあるcompareジョブのステータス概要を表示したり、compareジョブの詳細情報を表示したりすることができます。

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

警告とエラーの表示

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

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

  • JobIDは、SharePlexによって割り当てられたジョブIDです。
  • SIDは、ソーステーブルがあるOracleインスタンスのORACLE_SIDです。
  • ProcessIDsp_xdesvrプロセスのプロセスIDです。

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

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

ログファイル名の例:

xdesvr_7_r.aparopka_p4970.log

xdeclt_7-1_r.aparopka_p25095.log

xdeclt_7-1_r.aparopka_p25095_01.sql

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

注意: compare usingコマンドの場合は、稀に複数のログファイルが存在します。

compareジョブのキャンセル

実行中の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パラメーターを設定します。

INSERT、UPDATE、DELETEの各操作に対して別のSQLファイルを作成するには、すべての操作タイプに対して1つのファイルを使用するのではなく、log splitオプションを使用します。

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

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

非同期行のrepair

compareによって検出された非同期行をrepairするには、repairコマンドまたはrepair usingコマンドを使用します。repair / repair usingを参照してください。

用途
サポート対象のソース: Oracle
サポート対象のターゲット: Oracle
認証レベル: オペレーター2
発行場所: ソースシステム
関連コマンド: repair / repair using
構文
構文の説明

必須のコマンドコンポーネント

コンポーネント 説明
compare owner.source_table[.partition]

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

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

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

sp_ctrl(sysA)>compare scott.emp

sp_ctrl(sysA)>compare scott.emp.west

compare using filename

基本コマンドは、filenameにリストされたテーブル内のすべてのソース行とすべてのターゲット行をcompareします。

filenameは、compareするソーステーブルの名前が含まれているファイルの名前です。

sp_ctrl(sysA)>compare using sales

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

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

compareに有効

ソーステーブルをそのターゲットの1つとのみcompareします。ソーステーブルが複数のターゲットシステムにレプリケートされる場合に使用します。

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

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

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

for o.SID

compareに有効

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

SIDは、ソースインスタンスのORACLE_SIDです。大文字と小文字は区別され、oratabファイルまたはV$PARAMETERテーブルに表示される通りに入力する必要があります。

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

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

hint "hint"

compareに有効

SELECTステートメントにOracleヒントを含めます。ヒントはソースおよびターゲットシステム上で使用されます。

"hint"は2000文字以内のOracle標準のヒントです。ヒント全体を二重引用符で囲みます。ヒント文字列の先頭の/*+と末尾の*/を省略します。SharePlexによって追加されます。

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

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

オペレーティングシステムのコマンドラインからcompareを実行する場合、引用符で囲まれた文字列には、以下の例のようにエスケープされた二重引用符の余分なセットが必要です。

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

{include | exclude} "(column_list"

compareに有効

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

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

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

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

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

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

key

compareおよびcompare usingに有効

大きなテーブルのcompareを高速で実行します。このコマンドはすべてのデータ値をcompareするわけではありません。以下のいずれか1つをcompareします。

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

    または...

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

重要: キーまたはorderbyの値が一致しても、他の列の値が一致しなければ、テーブルは同期しないままです。

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

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

sp_ctrl (SysA)>compare scott.emp key

sp_ctrl(sysA)>compare using sales key

log rowdata

compareおよびcompare usingに有効

ハッシュ値ではなく、実際の行データを記録するSQLファイルを生成するようにクライアントプロセスに指示します。ファイルはターゲットシステムに作成されます。compareするテーブルにLONG、LOB、VARRAYがある場合は、log rowdataを使用しないでください。これらのデータ型の値が非常に大きい場合、SharePlexは実際のデータを記録できない可能性があります。

重要! このSQLファイルの目的は、compareされたデータのビューを提供することです。ターゲットテーブルをrepairするために使用しないでください。コマンド実行時に取得されたデータ値は、現在データベースに登録されている値とは異なる可能性があります。非同期の行をrepairするには、repairコマンドを使用します。

sp_ctrl(sysA)>compare scott.emp log rowdata

sp_ctrl(sysA)>compare using sales log rowdata

log split

compareおよびcompare usingに有効

SQLファイルを操作の種類に応じて3つの異なるファイルINSERT用、UPDATE用、DELETE用に分割するように、クライアントプロセスに指示します。

sp_ctrl(sysA)>compare scott.emp log split

sp_ctrl(sysA)>compare using sales log split

{nolocktarget | nolocksource}

compareに有効

repairを含む実行のcompareフェーズ中に、compareプロセスがテーブルをロックするのを防ぎます。通常、SharePlexはcompare中に一時的にテーブルをロックして読み取り一貫性ビューを取得し、その後すぐにロックを解除しますが、repair中は、SharePlexは常にターゲットテーブルをロックします。SharePlexは、読み取り一貫性ビューを取得するために、repair中はソーステーブルを一時的にロックします。

nosqllog

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

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

compareに有効

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

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

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

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

orderby "column_list"

compareに有効

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

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

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

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

オペレーティングシステムのコマンドラインからcompareを実行する場合、引用符で囲まれた文字列には、以下のようにエスケープされた二重引用符の余分なセットが必要です。

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

override

compareおよびcompare usingに有効

サニティチェックを無効にし、サニティチェックのしきい値を超えている、同期していないテーブルのcompareを可能にします。同期していないテーブルをcompareする代わりに、copyコマンドを使用してcopy / appendを参照ターゲットテーブルを再読み込みすることもできます。サニティチェックの詳細については、「compareの仕組み」を参照してください。

例:

SP_ctrl (sysA) > compare scott.emp override

SP_ctrl (sysA) > compare using sales override

port port_number

compareおよびcompare usingに有効

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

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

sp_ctrl(sysA)>compare scott.emp port 1234

quickcheck

compareおよびcompare usingに有効

同期していない行があるかどうかを確認する初期チェックを実行します。同期していない行が1つでも検出されると、プロセスは直ちに停止します。それ以上の情報は返されません。同期していない行の情報はcompareのSQLファイルに記録されません。

このオプションは、keyオプションや、whereオプションのいずれかと併用しないでください。

このオプションはLONG列をサポートしていません。

sp_ctrl(sysA)>compare scott.emp quickcheck

sp_ctrl(sysA)>compare using sales quickcheck

parallelismdegree

compareおよびcompare usingに有効

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

sp_ctrl(sysA)>compare scott.emp parallelism 4

sp_ctrl(sysA)>compare using sales parallelism 4

sourcewhereclause

compareに有効

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

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

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

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

例#1:

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

例#2:

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

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

targetwhere "clause"

compareに有効

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

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

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

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

例#1:

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

例#2:

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

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

threads thread_count

compareおよびcompare usingに有効

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

sp_ctrl(sysA)>compare scott.emp threads 4

sp_ctrl(sysA)>compare using sales threads 4

to target_owner.target_table[.partition]

compareに有効

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

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

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

パーティションのcompare

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

whereclause

compareに有効

ソースシステムとターゲットシステムの両方で、SELECTステートメントにWHERE句を含めます。WHERE句は、特定の行をcompareするためのフィルタとして機能します。

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)>compare 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

Documents connexes

The document was helpful.

Sélectionner une évaluation

I easily found the information I needed.

Sélectionner une évaluation