このセクションでは、その他のレプリケーションの問題に対するソリューションを確認します。
発生している問題がこのドキュメントに記載されていない場合は、SharePlexのナレッジベースを検索してください
ナレッジベースには、フィルタリングオプションや、SharePlexの使用とトラブルシューティングに役立つその他のリソースへのリンクが含まれます。
以下は、sp_ctrlを起動する際、またはsp_ctrlのhostコマンド、portコマンド、または[on host]コマンドで接続を形成する際に発生する一般的なエラーのソリューションです。
エラー | 原因 | ソリューション |
---|---|---|
ホスト不明: 接続を形成できません | hostコマンドまたは [on host] オプションが発行されたときに表示されます。 | 接続先のシステムが稼働していること、および正しいシステム名を使用していることを確認します。 |
ネットワークに到達不能 | ネットワークがダウンしています。 | ネットワーク管理者に、ダウン状態がどれくらい続くと想定しているかを確認します。ダウンタイムにより、SharePlexキューのディスク容量がオーバーする可能性がある場合は、データの再同期が必要にならないように対策を講じます。詳細については、ディスク容量不足を解消する方法を参照してください。 |
Exportがホスト名でImportに接続できません: ACKの待機中にタイムアウト |
ネットワーク構成により接続がタイムアウトになったため、Exportがターゲットに接続できません。これは、レプリケーションアクティビティがほとんどなく、ネットワークにタイムアウト設定がある場合に発生する可能性があります。 |
SP_XPT_KEEPALIVEパラメータを1に設定します。この設定は、TCPタイムアウトを防止するために、Importに定期的に「hello」メッセージを送信するようにExportプロセスに指示します。 |
ユーザがSharePlexユーザとして承認されていません -- /etc/groupを確認してください | 操作を実行するユーザ権限がありません。 | SharePlexユーザは、 SharePlexユーザグループSharePlex(Admin、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変数データディレクトリSharePlexのdataサブディレクトリにある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つだけです。) |
有効なサービス(プロセス)名は、capture、read、export、import、post です。 | 正しい名前でもう一度コマンドを実行します。 |
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を手動で適用するには:
設定を変更する必要があった場合は、再度アクティベーションします。
sp_ctrl> activate config filename
すべてのデータベースタイプで有効
この手順では、ソーステーブルのコピーを適用することで、同期していないターゲットテーブルの同期を復元します。同期していないテーブルを再同期するだけで済むため、ユーザは他のすべてのテーブルにアクセスし続けることができます。
重要開始する前にこの手順を確認し、使用するコマンドの詳細について『SharePlexリファレンスガイド』を参照してください。
(必要な場合)ターゲットシステムでshow syncコマンドを実行し、同期していないテーブルを特定します。
sp_ctrl> show sync
ソースシステムでflushコマンドを実行します。
注意: このコマンドには、名前付きキューや複数のターゲットで使用するための追加のオプションがあります。このコマンドの詳細については、『SharePlexリファレンスガイド』を参照してください。
sp_ctrl> flush datasource
変更する必要があった場合は、ソースシステムで設定ファイルを再度アクティベーションします。
sp_ctrl> activate config filename
ターゲットシステムで、Postが停止したことが示されるまでstatusコマンドを実行します。
sp_ctrl> status
ターゲットシステムでテーブルを復元します。
ターゲットシステムで、ステータスデータベースを表示して各メッセージのステータスIDを特定します。
sp_ctrl> show statusdb 詳細
ターゲットシステムで、以下のコマンドを使用して各メッセージをクリアします。
sp_ctrl> clear status statusID
ターゲットシステムでPostプロセスを開始します。
sp_ctrl> start post
Oracleデータベースで有効
トランスポータブル表領域機能により、多数の非同期テーブルを迅速かつ最小限のダウンタイムで再同期することができます。トランスポータブル表領域機能を使用するには、Oracleドキュメントの指示に従って表領域セットを生成し、表領域セットをターゲットデータベースに移動して、そのセットをデータベースに接続します。以下の説明では、この機能を使用してデータを再同期する手順のみを示します。これは、トランスポータブル表領域機能を使うことに習熟していることを前提としています。
重要開始する前にこの手順を確認し、使用するコマンドの詳細について『SharePlexリファレンスガイド』を参照してください。
ソースシステムで、ソース表領域を読み取り専用に設定します。
SQL> ALTER TABLESPACE name READ ONLY;
ソースシステムで、flushコマンドをsp_ctrlで実行します。
注意: このコマンドには、名前付きキューや複数のターゲットで使用するための追加のオプションがあります。詳細については、『SharePlexリファレンスガイド』を参照してください。
sp_ctrl> flush datasource
ソースシステムで、ソース表領域を読み取り/書き込みモードに設定します。
SQL> ALTER TABLESPACE name READ WRITE;
ターゲットシステムで、表領域を読み取り/書き込みモードに設定します。
SQL> ALTER TABLESPACE name READ WRITE;
注意: ピアツーピアレプリケーションを使用していない限り、SharePlexは、ターゲットテーブルへの書き込みアクセスが許可されている唯一のユーザでなければなりません。
ソースシステムで、設定ファイルを変更した場合は再アク ティブ化します。
sp_ctrl> activate config filename
ターゲットシステムでPostプロセスを開始します。
sp_ctrl> start post
Oracleデータベースで有効
Oracleホットバックアップとreconcileコマンドを使用してターゲットインスタンスを再同期する場合、バックアップが作成され、適用されている間、ユーザは本番データにアクセスし続けることができます。
重要:
|
ホットバックアップと再同期するには:
ターゲットシステムでPostプロセスを停止します。これにより、ターゲットインスタンスのリカバリと調整が完了するまで、複製されたデータをpostキューに蓄積することができます。
sp_ctrl> stop post
ソースシステムとターゲットシステムで、sp_cop、sp_ctrl、およびすべてのSharePlexプロセス(Capture、Read、Export、Import、Post)が実行されていることを確認します。
sp_ctrl> status
ホットバックアップからターゲットデータベースをリカバリします。
RESETLOGSオプションを使用してデータベースを開きます。
ターゲットシステムで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プロンプトが戻ります。
ターゲットシステムで、SharePlexのOracleユーザとしてSQL*Plusにログオンし、SharePlexの製品ディレクトリのbinサブディレクトリにあるcleanup.sqlスクリプトを実行します。このスクリプトは、SharePlexユーザが所有するSharePlexテーブルをトランケートし、更新します。sp_copの複数のインスタンスを複数の変数データディレクトリで実行している場合は、SharePlexのOracleユーザがそれぞれに存在します。このスクリプトは、必ず復元するテーブルを所有しているSharePlexユーザとして実行してください。スクリプトでは、SharePlexのユーザ名とパスワードの入力を求められます。
SQL> @/productdir/bin/cleanup.sql
ターゲットシステムで、レプリケーション戦略に従って以下を無効化または変更します。
ソースシステムで、設定ファイルを変更した場合は再アク ティブ化します。
sp_ctrl> activate config filename
ターゲットシステムでPostプロセスを開始します。これで2つのインスタンスが同期され、SharePlexはレプリケーションを続行します。
sp_ctrl> start post
SharePlexがキャプチャとレプリケーションを再開できるようにアーカイブログを復元することを決定した場合は、以下の手順を使用して必要なアーカイブログを特定します。
以下の手順を実行して、必要なアーカイブログを特定します。
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 |
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が解放したことを確認します。
セマフォを確認して解放するには:
シャットダウンしていないSharePlexのプロセスを探し、強制終了します。
$ ps -ef | grep sp_
$ kill -9 PID
SharePlex変数データディレクトリのrimサブディレクトリにディレクトリを変更し、shmaddr.locとshstinfo.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
以下の値を書き留めます。
ipcs -smaaコマンドを実行し、すべての共有メモリセグメントとセマフォを表示します。(共有メモリセグメントは最初にリストされて「m」で示され、セマフォは「s」で示される)。以下のように表示されますが、より広範囲なものになります。
shmaddr.locとshstinfo.ipcの共有メモリIDがリストにあり、キーが一致していることを確認します。
各共有メモリセグメントで、NATTCH列の値が0であることを確認します。これにより、強制終了したSharePlexのプロセスがメモリセグメントを解放したことが確認されます。
セマフォについては、セマフォIDとキーがファイルの値と一致していることを確認します。
rootとしてipcrm -mコマンドをID値(例では224と225)に対して実行し、メモリセグメントを削除します。
# ipcrm -m 224
# ipcrm -m 225
rootとしてipcrm -sコマンドをキー値(例では131104と131105)に対して実行し、セマフォを削除します。
# ipcrm -s 131104
# ipcrm -s 131105
© ALL RIGHTS RESERVED. 利用規約 プライバシー Cookie Preference Center