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

SharePlex 11.4 - 管理者ガイド

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

その他の問題の解決

レプリケーションのその他の問題の解決

このセクションでは、その他のレプリケーションの問題に対するソリューションを確認します。

発生している問題がこのドキュメントに記載されていない場合は、SharePlexのナレッジベースを検索してください

https://support.quest.com

ナレッジベースには、フィルタリングオプションや、SharePlexの使用とトラブルシューティングに役立つその他のリソースへのリンクが含まれます。

一般的な接続エラー

以下は、sp_ctrlを起動する際、またはsp_ctrlhostコマンド、portコマンド、または[on host]コマンドで接続を形成する際に発生する一般的なエラーのソリューションです。

接続エラーメッセージの説明
エラー 原因 ソリューション
ホスト不明: 接続を形成できません hostコマンドまたは [on host] オプションが発行されたときに表示されます。 接続先のシステムが稼働していること、および正しいシステム名を使用していることを確認します。
ネットワークに到達不能 ネットワークがダウンしています。 ネットワーク管理者に、ダウン状態がどれくらい続くと想定しているかを確認します。ダウンタイムにより、SharePlexキューのディスク容量がオーバーする可能性がある場合は、データの再同期が必要にならないように対策を講じます。詳細については、ディスク容量不足を解消する方法を参照してください。

Exportがホスト名でImportに接続できません: ACKの待機中にタイムアウト

ネットワーク構成により接続がタイムアウトになったため、Exportがターゲットに接続できません。これは、レプリケーションアクティビティがほとんどなく、ネットワークにタイムアウト設定がある場合に発生する可能性があります。

SP_XPT_KEEPALIVEパラメータを1に設定します。この設定は、TCPタイムアウトを防止するために、Importに定期的に「hello」メッセージを送信するようにExportプロセスに指示します。

ユーザがSharePlexユーザとして承認されていません -- /etc/groupを確認してください 操作を実行するユーザ権限がありません。 SharePlexユーザは、 SharePlexユーザグループSharePlexAdmin、spoper、spviewのいずれかの/etc/groupファイルUnixおよびLinuxにリストされている必要があります 。
ホストホスト名.netからの不正な接続の試み リモートマシンの名前がauth_hostsファイルにリストされていないため、そのマシンからの接続が拒否されました。 システム名についてはエラーメッセージを参照してください。システムがローカルシステムのsp_copに接続できるようにするには、その名前をauth_hostsファイルに追加します。

一般的なコマンドエラー

エラー 原因 ソリューション
Deactivate/flush a nonactive datasource非アクティブなデータソースの非アクティベーション/フラッシュ アクティブでない設定をフラッシュしようとしています。 不要です。
Bad routing specification誤ったルーティング指定 ルーティングマップの構文が正しくありません。 詳細については、設定ファイル内のルーティング指定を参照してください。
Status db file is corrupt.ステータスDBファイルが破損しています。 ステータスデータベースが破損しています。 SharePlexをシャットダウンし、SharePlex変数データディレクトリSharePlexdataサブディレクトリにあるstatusdbファイルを削除します。sp_copを再度起動すると、新しいファイルが作成されます。
Parameter does not exist in database.パラメータがデータベースに存在しません。

パラメータを設定しようとして、間違った名前を入力したか、またはそのパラメータがお使いのSharePlexのバージョンで非推奨になっています。

list paramコマンドを使用してお使いのバージョンのSharePlexのパラメータを表示し、スペルを確認します。

Parameter type checking failed - look in param - defaults file. パラメータタイプのチェックに失敗しました - param - defaultsファイルを調べてください。 パラメータのデータ型を間違えて入力した可能性があります。 list paramコマンドを使用して有効なデータ型を確認します。

Unknown service specified.不明なサービスが指定されました。

または...

No such module.そのようなモジュールがありません。

または...

Service may be only one of: post, read, import, export, capture, all.サービスは、post、read、import、export、capture、allのいずれか1つだけです。

有効なサービスプロセス名は、captureread、exportimportpost です。 正しい名前でもう一度コマンドを実行します。

Command was called with an invalid argument.コマンドが無効な引数で呼び出されました。

または...

Unknown keyword used in command.コマンドで不明なキーワードが使用されました。

コマンドに無効な入力が含まれています。 helpコマンドを発行してコマンドの有効な入力を確認します。
Permission denied for command - check your authorization level.コマンドの権限が拒否されました。権限レベルを確認してください。 このコマンドを発行できるユーザグループのメンバーではありません。 authlevelコマンドを発行して、権限レベルを確認します。
Default host is not defined: use the ‘host’ command or [on host] option.デフォルトのホストが定義されていません: 'host'コマンドまたは[on host]オプションを使用してください。 SharePlexはコマンドをどのシステムに適用するかを判断できません。 hostコマンドでデフォルトのホストを確立するか、コマンドに[on host]オプションを指定して発行します利用可能な場合

ソースオブジェクトとターゲットオブジェクトを再同期する方法

ソーステーブルとターゲットテーブルを再同期する方法

以下の手順は、非同期のテーブルを再同期する方法を決定するのに役立ちます。

非同期のテーブルに対する手動でのパッチ適用

すべてのデータベースタイプで有効

同期エラーの数が少ない場合は、同期していないテーブルを手動でrepairすることができます。Postプロセスにより非同期状態が検出された場合、そのエラーは無視されて、postキュー内の次の操作が適用され続けます。ただし、Postは非同期エラーを引き起こすソースSQLステートメントをエラーファイルcalleID_errlog.sqlに記録しますIDは、ORACLE_SIDやデータベース名など、SharePlexターゲットインスタンスに使用する識別子。これらのSQLステートメントは、データベースのネイティブSQLインターフェイスを通じてターゲットテーブルに適用できます。この手順はPostによるcompareをバイパスするため、ターゲットテーブルの構造が変更されていないと仮定すれば、操作は成功するはずです。

SharePlexは、ID_errlog.sqlを、ターゲットシステムの変数データディレクトリのdataサブディレクトリに保存します。ファイル内のエントリは以下の例のようになります。

-- Host (irvlabua) Sid (al920u64)

-- session 2, 1 error --

--

-- [1] Tue Dec 11 13:31:32 2007

-- redolog seq#/offset 26622/26980368

-- redolog timestamp 641050290 (12/11/15 13:31:30)

-- original rowid AAE0m8AAWAAAAFEAAA

-- -- NOT FOUND

delete from “SP_5”.”QA_LOB_DISABLE_INROW” t where rownum = 1 and “KEY”='01';

SQLを手動で適用するには:

  1. 影響を受けるソーステーブルへのユーザアクセスを停止します。
  2. ターゲットシステムでID_errlog.sqlファイルを開きます。
  3. SQLステートメントをターゲットテーブルに適用します。
  4. 設定を変更する必要があった場合は、再度アクティベーションします。

    sp_ctrl> activate config filename

  5. ソーステーブルへのユーザアクセスを許可します。

ソーステーブルのコピーによる再同期

すべてのデータベースタイプで有効

この手順では、ソーステーブルのコピーを適用することで、同期していないターゲットテーブルの同期を復元します。同期していないテーブルを再同期するだけで済むため、ユーザは他のすべてのテーブルにアクセスし続けることができます。

重要開始する前にこの手順を確認し、使用するコマンドの詳細について『SharePlexリファレンスガイド』を参照してください。

  1. ソースシステムとターゲットシステムでsp_copが実行されていることを確認します。
  2. ターゲットシステムでsp_ctrlを実行します。
  3. 必要な場合ターゲットシステムでshow syncコマンドを実行し、同期していないテーブルを特定します。

    sp_ctrl> show sync

  4. ソースシステムで、同期していないテーブルのアクティビティを停止します。
  5. ソースシステムでsp_ctrlを実行します。
  6. ソースシステムでflushコマンドを実行します。

    注意: このコマンドには、名前付きキューや複数のターゲットで使用するための追加のオプションがあります。このコマンドの詳細については、『SharePlexリファレンスガイド』を参照してください。

    sp_ctrl> flush datasource

  7. ソースシステムでテーブルをコピーします。
  8. 変更する必要があった場合は、ソースシステムで設定ファイルを再度アクティベーションします。

    sp_ctrl> activate config filename

  9. ソースシステムで、ソーステーブルにユーザが戻れるようにします。
  10. ターゲットシステムで、Postが停止したことが示されるまでstatusコマンドを実行します。

    sp_ctrl> status

  11. ターゲットシステムでテーブルを復元します。

  12. ターゲットシステムで、レプリケーション戦略の要件に従って、トリガ、参照整合性制約、およびチェック制約を無効化または変更します。
  13. ターゲットシステムで、ステータスデータベースを表示して各メッセージのステータスIDを特定します。

    sp_ctrl> show statusdb 詳細

  14. ターゲットシステムで、以下のコマンドを使用して各メッセージをクリアします。

    sp_ctrl> clear status statusID

  15. ターゲットシステムでPostプロセスを開始します。

    sp_ctrl> start post

Oracleトランスポータブル表領域との再同期

Oracleデータベースで有効

トランスポータブル表領域機能により、多数の非同期テーブルを迅速かつ最小限のダウンタイムで再同期することができます。トランスポータブル表領域機能を使用するには、Oracleドキュメントの指示に従って表領域セットを生成し、表領域セットをターゲットデータベースに移動して、そのセットをデータベースに接続します。以下の説明では、この機能を使用してデータを再同期する手順のみを示します。これは、トランスポータブル表領域機能を使うことに習熟していることを前提としています。

重要開始する前にこの手順を確認し、使用するコマンドの詳細について『SharePlexリファレンスガイド』を参照してください。

  1. ソースシステムで、ソース表領域を読み取り専用に設定します。

    SQL> ALTER TABLESPACE name READ ONLY;

  2. ソースシステムでsp_ctrlを実行します。
  3. ソースシステムで、flushコマンドをsp_ctrlで実行します。

    注意: このコマンドには、名前付きキューや複数のターゲットで使用するための追加のオプションがあります。詳細については、『SharePlexリファレンスガイド』を参照してください。

    sp_ctrl> flush datasource

  4. Oracleのドキュメントに従って、メタデータをエクスポートファイルにエクスポートします。
  5. エクスポートが終了したら、データファイルをソースシステムのセカンダリロケーションにコピーします。これにより、ファイルをターゲットシステムにコピーすることによるソースデータベースへの影響を最小限に抑えることができます。
  6. ソースシステムで、ソース表領域を読み取り/書き込みモードに設定します。

    SQL> ALTER TABLESPACE name READ WRITE;

  7. ターゲットシステムで、ターゲットデータベースから既存のデータファイルと表領域を削除し、コピーしたファイルを適用できるようにします。
  8. ソースシステムのセカンダリロケーションからターゲットシステムにファイルをコピーします。
  9. ターゲットシステムで、Oracleのimportユーティリティを使用してメタデータと表領域の定義をインポートします。
  10. ターゲットシステムで、表領域を読み取り/書き込みモードに設定します。

    SQL> ALTER TABLESPACE name READ WRITE;

    注意: ピアツーピアレプリケーションを使用していない限り、SharePlexは、ターゲットテーブルへの書き込みアクセスが許可されている唯一のユーザでなければなりません。

  11. ソースシステムで、設定ファイルを変更した場合は再アク ティブ化します。

    sp_ctrl> activate config filename

  12. ターゲットシステムでsp_ctrlを実行します。
  13. ターゲットシステムでPostプロセスを開始します。

    sp_ctrl> start post

アクティブなデータベース上のOracleホットバックアップを使用した再同期

Oracleデータベースで有効

Oracleホットバックアップとreconcileコマンドを使用してターゲットインスタンスを再同期する場合、バックアップが作成され、適用されている間、ユーザは本番データにアクセスし続けることができます。

重要:
  • データウェアハウスなど、一元的なレポート作成を再同期するために、すべてのソースシステムからホットバックアップを使用することはできません。1つのバックアップは、前のバックアップのデータを上書きします。ソースインスタンスの1つのホットバックアップを使用してターゲットインスタンスを確立し、エクスポート/インポートまたはトランスポータブル表領域などの別の方法を使用して、他のインスタンスからテーブルをコピーすることができます。
  • ピアツーピアレプリケーションを再同期するには、この手順の間、すべてのセカンダリ・ソース・システムを停止する必要があります。すべてのユーザをプライマリシステムに移動し、手順に従ってください。すべてのセカンダリシステムでこの手順が実行された後に、ユーザはそれらのシステムでのアクティビティを再開することができます。
  • 開始する前にこの手順を確認し、使用するコマンドの詳細について『SharePlexリファレンスガイド』を参照してください。

ホットバックアップと再同期するには:

  1. ソースシステムとターゲットシステムでsp_ctrlを実行します。
  2. ターゲットシステムでPostプロセスを停止します。これにより、ターゲットインスタンスのリカバリと調整が完了するまで、複製されたデータをpostキューに蓄積することができます。

    sp_ctrl> stop post

  3. ソースシステムでOracleホットバックアップを実行します。
  4. ソースシステムとターゲットシステムで、sp_copsp_ctrl、およびすべてのSharePlexプロセスCapture、Read、Export、Import、Postが実行されていることを確認します。

    sp_ctrl> status

  5. ソースシステム上でログファイルを切り替えます。

    • データベースをシーケンス番号にリカバリするには、アーカイブログの最大のシーケンス番号を書き留めておきます。

    • Oracleシステム変更番号SCNにデータベースをリカバリするには、ターゲットデータベースでリカバリ先のSCNを選択します。
  6. ホットバックアップからターゲットデータベースをリカバリします。

    • シーケンス番号にリカバリする場合は、RECOVER句でUNTIL CANCELオプションを使用してホットバックアップからデータベースをリカバリし、Oracleが前のステップのログを完全に適用した後にリカバリをキャンセルします。
    • SCNにリカバリする場合は、RECOVER句でUNTIL CHANGE SCNオプションを使用してホットバックアップからデータベースをリカバリし、Oracleが前のステップのSCNに一致するログを適用した後にリカバリをキャンセルします。
  7. RESETLOGSオプションを使用してデータベースを開きます。

  8. ターゲットシステムでreconcileコマンドを実行します。名前付きpostキューを使用している場合は、それぞれについてコマンドを実行します。キュー名が不明な場合は、qstatusコマンドを実行します。

    • シーケンス番号にリカバリする場合は、ステップ5で書き留めたログのシーケンス番号を代入します。

      sp_ctrl> reconcile queue queuename for datasource-datadest seq sequence_number

      例: reconcile queue SysA for o.oraA-o.oraA seq 1234

    • SCNにリカバリする場合は、ステップ5で書き留めたSCNを代入します。

      sp_ctrl> reconcile queue queuename for datasource-datadest scn scn_number

      例: reconcile queue SysA for o.oraA-o.oraA scn 0123456789

    調整プロセスは、終了するまでsp_ctrlの制御を保持します。その後、sp_ctrlプロンプトが戻ります。

  9. ターゲットシステムで、SharePlexのOracleユーザとしてSQL*Plusにログオンし、SharePlexの製品ディレクトリのbinサブディレクトリにあるcleanup.sqlスクリプトを実行します。このスクリプトは、SharePlexユーザが所有するSharePlexテーブルをトランケートし、更新します。sp_copの複数のインスタンスを複数の変数データディレクトリで実行している場合は、SharePlexのOracleユーザがそれぞれに存在します。このスクリプトは、必ず復元するテーブルを所有しているSharePlexユーザとして実行してください。スクリプトでは、SharePlexのユーザ名とパスワードの入力を求められます。

    SQL> @/productdir/bin/cleanup.sql

  10. ターゲットシステムで、レプリケーション戦略に従って以下を無効化または変更します。

    • トリガ
    • 外部キー制約
    • カスケード削除制約または、それらを無視するようにSharePlexを設定
    • チェック制約
    • DMLを実行するスケジュール済みのジョブ
  11. ソースシステムで、設定ファイルを変更した場合は再アク ティブ化します。

    sp_ctrl> activate config filename

  12. ターゲットシステムでPostプロセスを開始します。これで2つのインスタンスが同期され、SharePlexはレプリケーションを続行します。

    sp_ctrl> start post

Oracleアーカイブログを復元する方法

Oracleアーカイブログを復元する方法

SharePlexがキャプチャとレプリケーションを再開できるようにアーカイブログを復元することを決定した場合は、以下の手順を使用して必要なアーカイブログを特定します。

以下の手順を実行して、必要なアーカイブログを特定します。

  1. Captureが処理を再開する必要があるシーケンス番号を特定します。Captureはログラップがあると停止し、必要なREDOログシーケンス番号を含むメッセージをイベントログevent_logに出力します。また、以下の例に示すようにSHAREPLEX_ACTIDテーブルにクエリを実行し、SEQNO列を見ることでも、この数値を知ることができます。

    SQL> select * from splex.shareplex_actid;

    ACTID SEQNO OFFSET AB_FLAG QUE_SEQ_NO_1 QUE_SEQ_NO_2 COMMAND
    ----- ------ -------- -------- ------------- -------------- ------------
    14 114 9757200 0 672101000 0  
  2. Oracle V$LOG_HISTORYテーブルにクエリを実行して、そのシーケンス番号がいつアーカイブされたかを調べ、その時点からのログをソースシステムにコピーします。

    SQL> select * from V$LOG_HISTORY;

    RECID STAMP THREAD# SEQUENCE# FIRST_CHANGE# FIRST_TIM NEXT_CHANGE#
    ----- ------ -------- -------- ------------- --------------
    111 402941650 1 111 2729501 14-JUL-00 2729548
    112 402941737 1 112 2729548 14-JUL-00 2729633
    113 402941930 1 113 2729633 14-JUL-00 2781791
    114 402942019 1 114 2781791 14-JUL-00 2836155
    115 402942106 1 115 2836155 14-JUL-00 2890539

プロセス失敗後にセマフォを解放する方法

プロセスの失敗後にセマフォを解放する方法

データベースの破損やその他のシステムの問題によりSharePlexを強制的にシャットダウンした場合は、使用していたセマフォと共有メモリをSharePlexが解放したことを確認します。

セマフォを確認して解放するには:

  1. シャットダウンしていないSharePlexのプロセスを探し、強制終了します。

    $ ps -ef | grep sp_

    $ kill -9 PID

  2. SharePlex変数データディレクトリのrimサブディレクトリにディレクトリを変更し、shmaddr.locshstinfo.ipcファイルにod -xコマンドを実行します。

    # od -x shmaddr.loc

    0000000 0000 00e1 ed40 0000 4400 9328 0080 0000

    0000020 0002 0021

    0000024

    # od -x shstinfo.ipc

    0000000 0000 00e0 ee90 0000 4100 9328 0010 0000

    0000020 0002 0020

    0000024

  3. 以下の値を書き留めます。

    • 上記の各ファイルの最初の32ビットワードは、共有メモリセグメントのIDと同等な16進値を示します。この値を10進数に変換します。例えば、ステップ2で示したshmaddr.locファイルでは、最初の語は0000 00e1であり、これは10進数で225に相当します。shstinfo.ipcファイルでは、最初の語は0000 00e0であり、これは10進数で224に相当します。
    • shmaddr.locおよびshstinfo.ipcファイルの3番目の語は、共有メモリセグメントとセマフォのKEYと同等な16進数値を示します各セットのキー値は同一。この値を10進数に変換しないでください。例えばshmaddr.locファイルでは、3番目の語は4400 9328です。shstinfo.ipcファイルの3番目の語は4100 9328です。
    • 各ファイルの5番目の語はSEMAPHORE IDです。この値を10進数に変換します。例に示すセマフォIDは16進数で0002 0021と0020 0020であり、10進数ではそれぞれ131105と131104です。
  4. ipcs -smaaコマンドを実行し、すべての共有メモリセグメントとセマフォを表示します。共有メモリセグメントは最初にリストされて「m」で示され、セマフォは「s」で示される。以下のように表示されますが、より広範囲なものになります。

  5. shmaddr.locshstinfo.ipcの共有メモリIDがリストにあり、キーが一致していることを確認します。

  6. 各共有メモリセグメントで、NATTCH列の値が0であることを確認します。これにより、強制終了したSharePlexのプロセスがメモリセグメントを解放したことが確認されます。

  7. セマフォについては、セマフォIDとキーがファイルの値と一致していることを確認します。

  8. rootとしてipcrm -mコマンドをID値例では224と225に対して実行し、メモリセグメントを削除します。

    # ipcrm -m 224

    # ipcrm -m 225

  9. rootとしてipcrm -sコマンドをキー値例では131104と131105に対して実行し、セマフォを削除します。

    # ipcrm -s 131104

    # ipcrm -s 131105

関連ドキュメント

The document was helpful.

評価を選択

I easily found the information I needed.

評価を選択