Chat now with support
Chat with Support

SharePlex 8.6.6 - 管理ガイド

このガイドについて このガイドで使用されている表記規則 SharePlex の概要 SharePlex の実行 複数の SharePlex インスタンスの実行 sp_ctrl でのコマンドの実行 SharePlex パラメータ 複製のための Oracle 環境の準備 設定ファイルの作成 オープンターゲットのターゲットへの複製の設定 複製方法の設定 分割レプリケーションの設定 名前付きキューの設定 変更履歴ターゲットを維持するための SharePlex の設定 Oracle DDL の複製 エラー処理のセットアップ データの変換 SharePlex セキュリティ機能の設定 実稼動環境での複製のアクティベート SharePlex の監視 複製上の問題の防止および解決方法 非同期データの修復 Oracle の高可用性を維持するための手順 アクティブな複製環境の変更 Oracle アプリケーションのパッチまたはアップグレードの適用 ソースまたはターゲット上の Oracle データのバックアップ Capture プロセスのチューニング Post プロセスのチューニング 付録 A:ピアトゥピアの説明図 付録 B:SharePlex 環境変数

アクティベーションの問題の解決

複製上の問題の防止および解決方法 > アクティベーションの問題の解決

このセクションでは、設定ファイルのアクティベーションに関連する可能性がある問題と解決策を説明します。

発生した問題がこのドキュメントに記載されていない場合は、以下のアドレスの SharePlex サポート技術情報を検索してください。

https://support.quest.com

サポート技術情報には、フィルタリングオプションと、SharePlex の使用およびトラブルシューティングに役立つ他のリソースへのリンクがあります。

注: 設定問題の多くは、設定をアクティベートしたり、新規または変更されたオブジェクトがある設定を再アクティベートしたりする前に、sp_ctrl の中で verify config コマンドを使用することで防止できます。verify config コマンドは、設定を見直して、activation および複製の基本要件が満たされていることを確認するために役立ちます。詳細については、『 SharePlex リファレンスガイド』を参照してください。

SharePlex が設定ファイルの場所を見つけられない

SharePlex がアクティベートする設定ファイルの場所を見つけられない場合は、その場所を確認します。アクティベーションが成功するには、設定ファイルが SharePlex 変数データディレクトリの config サブディレクトリの中にある必要があります。sp_ctrlcreate config コマンドは、そのディレクトリに設定ファイルを自動的に配置します。誰かが設定ファイルを移動した可能性があります。

また、create config コマンドを使用せずに設定ファイルを作成した場合にも問題が発生します。ファイルがオペレーティングシステム経由で直接作成された場合や、config.sql または build_config.sql スクリプトによって作成された場合に発生する可能性があります。その時点の作業ディレクトリが config サブディレクトリではなかった場合、またはファイルが別のディレクトリに保存された場合、アクティベーションでは見つかりません。

解決策:設定ファイルを SharePlex 変数データディレクトリの config サブディレクトリに移動します。

一部のオブジェクトがアクティベーションに失敗する

SharePlex が設定ファイルにリストされている 1 つ以上のオブジェクトをアクティベートできない場合は、他のテーブルのアクティベーションを続行して、SID_oconf##.log ファイルまたは show activate コマンドディスプレイに、失敗したオブジェクトの名前を表示します。

次に、個々のオブジェクトが activation に失敗する理由を説明します。

問題 説明 解決策
無効なオブジェクト

SharePlex でサポートされないオブジェクトの複製を試行している可能性があります。

SharePlex がサポートするオブジェクトや操作を理解するには、このリリースに付属する『SharePlex リリースノート』を参照してください。

無効なターゲットシステム

SharePlex がルーティング情報を取得できない

ターゲットの名前を確認し、ルーティングマップの構文エラーを修正します。データベースによって、インスタンス名を指定するものと、実際のデータベース名を指定するものがあります。

設定ファイルでのデータベース指定」および「設定ファイルでのルーティング指定」を参照してください。その後、影響を受ける設定を再度アクティベートします。

構文エラーおよびスペリングの間違いがある単語

スペリングの間違いがある名前、所有者名なしで指定されたオブジェクト名、設定の指定におけるその他の不適切な構文により、オブジェクトのアクティベーションに失敗することがあります。

verify config コマンドを実行して、エラーを表示します。設定の構文については、「設定ファイルの作成」を参照してください。
SharePlex がテーブルをロックできない

アクティベーションで設定ファイルのテーブルをロックできない場合、そのテーブルのアクティベーションは失敗します。

SharePlex データベースユーザーにテーブルのロック権限を割り当てます。

アクティベーション全体が失敗する

設定のアクティベーション全体が失敗する理由はいくつかあります。設定のアクティベートに関する一般的なエラーメッセージは次のとおりです。

「Bad configuration file」

「The Oracle sid SID specified in the config file is invalid.」

次に、activation 失敗の原因および解決方法を説明します。

問題 説明 解決策
パスワードの問題

SharePlex でソースデータベースへの接続に問題があり、SharePlex アカウントが存在する場合は、パスワードが変更されているかどうかを調べます。

接続情報を更新します。「SharePlex データベースアカウントの変更」を参照してください。
deactivation 直後の activation

まれな場合ですが、deactivation の直後に設定をアクティベートした場合は、activation が失敗します。

設定をディアクティベートした後、新しい設定をアクティベートする前に、イベントログに以下のメッセージが表示されるまでお待ちください。Notice: sp_ordr (for o.ora10 queue o.ora10) Deactivated.

データソース指定がない

データソース指定が間違っているか不完全です。以下のようなエラーが返されます。

The datasource specified in the config file is invalid.

次のように指定します。

Datasource:o.SID

または

Datasource:r.database_name

ORACLE_SID が正しくない Datasource:o.SID 行で、間違った ORACLE_SID が指定されています。 設定ファイルを編集して、正しい ORACLE_SID を指定します。「ORACLE_SID および ORACLE_HOME の確認方法」を参照してください。

不十分な PROCESSES 設定

Oracle Error 20(ORA-00020 maximum number of processes (string) exceeded)がアクティベーション失敗の原因である場合は、Oracle がソースシステム上の、1 つ以上のスレッドにログオンできるようにするための、リソースを使い尽くしてしまっているためです。

Oracle で PROCESSES パラメータを増やすか、使用しているアクティベーションスレッドの数を減らします。スレッド数は、activate config コマンドの threads オプションで制御されます。

ORA-00942: table or view does not exist.

SharePlex がデータディクショナリにアクセスできません。

init.ora ファイルの O7_DICTIONARY_ACCESSIBILITY パラメータが TRUE に設定されていることを確認します。(これがデフォルトです。)このパラメータを変更した場合は、データベースは再起動する必要があります。

activation が長すぎます

ユーザーがアクティベーション中にソーステーブルにアクセスしている場合は、SharePlex は必要なロックを取得するために、待機が必要な場合があります。

解決策show activate コマンドを使用して、各テーブルの activation 状態を表示します。SharePlex がテーブルのロックを待機している場合は、コマンド出力で警告メッセージが表示されます。show activate コマンドの詳細は、『 SharePlex リファレンスガイド』を参照してください。

reconcile コマンドの完了が遅い

ソースデータベースの活動が低いときに reconcile コマンドを発行した場合は、一部の状況では、コマンドのプロセスがストールしたように見えることがあります。これは、reconcile がソースシステムから到着し続けるデータに依存するために発生します。ホットバックアップまたはコピーの後で、ソースシステムで複製活動がない場合は、reconcile プロセスは、ソースの活動が再開するまで待機します。これは正常です。

一般的なアクティベーションエラー

次に、設定をアクティベートするときに発生しうる一般的なエラーメッセージを説明します。

ACTIVATE CONFIG エラーメッセージ 原因 解決策
line n, source object name (T_HFL_1) not of form OWNER.TABLE 設定ファイルにリストされている 1 つ以上のオブジェクトで、所有者名が見つからない可能性があります。 オブジェクト名を ownername.objectname の形式で指定します。
syntax error in line n. 設定ファイルの指定した行に構文エラーがあります。 正しくない構文を修正します。「設定ファイルの作成」を参照してください。
line n, bad routing spec (o.ora10) ルーティングマップに構文エラーがあります。 ルーティングマップが正しく記述されていることを確認します。「設定ファイルでのルーティング指定」を参照してください。
File does not exist. SharePlex が設定ファイルを見つけられません。 list config コマンドを発行します。アクティベートするファイルがリストにない場合は、変数データディレクトリの config サブディレクトリ内にない可能性があります。ファイルを探してそのディレクトリに移動してから、activate config コマンドを再度発行します。
Attempt to run sp_conf when sp_conf is already active 設定がアクティベートするプロセスの中にすでにあります。 何も必要ありません。
Login parameters not set... SharePlex アカウントおよび内部テーブルがソースデータベースに存在しません。 データベースセットアッププログラムを実行します。詳細については、「SharePlex インストールガイド」を参照してください。
WARNING, not all objects activated successfully.Check activation log. 1 つ以上のテーブルでアクティベートに失敗しました。 解決策については、「一部のオブジェクトがアクティベーションに失敗する」を参照してください。
Deactivate/flush a nonactive datasource アクティブでない設定をディアクティベートしようと試みています。 これがディアクティベートしたい設定である場合は、何もする必要がありません。設定のリストを表示するには、list config コマンドを使用します。
(Oracle) Currently involved in transaction. 設定ファイルのオブジェクトがロックされています。 別のプロセスが Oracle テーブルをロックしている場合、SharePlex は Oracle テーブルをロックして分析できません。ロックがソーストランザクション活動による場合は、データベースの負荷が低いときにアクティベーションを試します。

複製の問題の解決

このセクションでは、データの複製時に発生しうる一般的な問題を説明します。

発生した問題がこのドキュメントに記載されていない場合は、以下のアドレスの SharePlex サポート技術情報を検索してください。

https://support.quest.com

サポート技術情報には、フィルタリングオプションと、SharePlex の使用およびトラブルシューティングに役立つ他のリソースへのリンクがあります。

一般的な問題

問題 説明 解決策
ネットワークの問題

ネットワーク的な要因によって、ターゲットシステムへのデータ転送速度が低下したり、完全に転送できなかったりする場合があります。

すべての Export および Import プロセスが実行中であることを確認し、ネットワークの速度低下の原因確認をネットワーク管理者に依頼します。
パラメータの設定

一部の SharePlex パラメータは、デフォルト設定から変更されると、複製のパフォーマンスを阻害するものがあります。

何らかのパラメータ設定が、パフォーマンス低下に関係しているかどうかを判断するには、list param modified コマンドを発行して、デフォルトではないパラメータを表示します。『 SharePlex リファレンスガイド』でこれらのパラメータについての記載を確認し、特定の設定が複製速度に影響しているかどうかを判断します。

Oracle Capture 関連の問題

Capture が停止した場合は、sp_ctrlstatus コマンドを発行して、権限のある SharePlex ユーザーによって意図的に停止されたかどうかを確認します。SharePlex ユーザーに停止された場合は、その理由を調べて、停止が長くなりすぎないことを確認します。

次に Capture が予期せず速度低下または停止する、その他の理由を示します。

問題 説明 解決策
過剰な連鎖

Oracle が単一行の複数のブロックを読み取る必要があるために、ソースデータベースのパフォーマンスが低下します。データベースのブロック断片化により Post が SQL 文を適用する速度が遅くなるために、ターゲットシステムで Post のパフォーマンスが低下します。

連鎖したテーブルを再編成します。
非効率な REDO ログの設定

Capture が REDO ログを読み取る前にそれがラップした場合は、Capture はアーカイブログを読み取りますが、このために複製速度が低下し、ディスク領域が消費される可能性があります。ほとんどの場合、SharePlex がアーカイブログを使用しないで済むように、REDO ログを設定する必要があります。

詳細については、次を参照: SharePlex をサポートするための Oracle redo ロギングのセットアップ

SharePlex のプロセス優先順位が低い

Capture や Read などの速度が、ホットバックアップなどの Oracle が重点的に動作する操作の中で低下した場合は、システム上のプロセス優先度設定を表示して、SharePlex により多くのリソースを割り当てることができるかどうかを判断します。

理想的には、SharePlex の優先度は Oracle の優先度と同じにするべきです。

キーが記録されていない

複製でテーブルの PK/UK ロギングが有効でない場合、SharePlex はデータベースに対してクエリを実行して、更新および削除操作のキー値を取得する必要があります。

PK/UK ロギングを有効にします。

一時テーブルおよび FND テーブル 一時テーブルは、複製のオーバーヘッドやパフォーマンスの低下を招く膨大な変更を受信します。 一時テーブルを複製から削除します。
アーカイブログが使用できない

Capture がログラップを検出し、アーカイブログが使用できないときは、Capture が停止して、「Log wrap detected」エラーを戻します。これは、一定時間待機して、それから再び起動します。ログがリストアされるまでこのプロセスを継続します。

Capture が最後に処理したログからアーカイブログを復元するか、SP_OCT_ARCH_LOC パラメータを使用してログの場所を SharePlex に指し示します。Capture が必要とするログを判断するには、show capture コマンドを detail オプションと併せて使用します。「Oracle アーカイブログのリストア方法」も参照してください。

圧縮されたアーカイブログ

Capture は圧縮されたアーカイブログを読み取ることができません。

Capture が必要とする現在のログと、そのログ以降のすべてのログを解凍して、Capture が処理できるようにします。Capture が必要とするログを判断するには、show capture コマンドを detail オプションと併せて使用します。

予期せぬ場所にあるアーカイブログ

必要なアーカイブログの場所が分からない場合は、Capture が停止します。REDO ログがラップしたときは、Capture は Oracle の archived-log リストの中でアーカイブを探しますが、ログがリスト内にない場合は、Capture は SP_OCT_ARCH_LOC パラメータで指定された場所を探します。

通常の Oracle のロケーション以外の場所にアーカイブログを保存している場合は、このパラメータが、アーカイブログがあるディレクトリのフルパス名に設定されていることを確認してください。

REDO ログにアクセスできません

Capture は、ログが読み取れないか、見つからないときは停止し、それからログを再び読み取ろうと試みます。

SharePlex に REDO ログの読み取り権限がないなど、他のユーザーによって権限が変更されたかどうか調べます。

変数データディレクトリにアクセスできません

変数データディレクトリの state サブディレクトリに対する制限的許可のために、SharePlex ログに書き込むことができない場合、またはそのディレクトリに領域制限がある場合は、Capture が停止します。

変数データディレクトリに対する許可および領域を調べてください。

Oracle Post 関連の問題

Post プロセスの速度を低下させる原因は多数あります。SharePlex は、SQL 文をターゲットインスタンスに適用するまでに許容される内部制御の待機時間を Post が超えると、「operation taking too long」というメッセージを生成します。多くの場合、1 つのテーブルだけでもボトルネックとなります。show sql または show post コマンドを使用すると、どのテーブルを Post が処理しているかが分かるので、次の項目をチェックします。

問題 説明 解決策
フルテーブルスキャン

ターゲットテーブルにキーがない場合、Post はフルテーブルスキャンを実行して正しい行を見つけます。このため、Post プロセスが低速になります。

次のうちのいずれか 1 つを実行します。
  • 可能な場合はインデックスまたはキーを追加し、ヒントファイルを使用します。「Oracle INDEX ヒントの使用」を参照してください。
  • キーを追加できない場合は、キー定義を作成します。「一意のキーの定義」を参照してください。
  • Oracle の DB_FILE_MULTIBLOCK_READ_COUNT パラメータを、1 回の I/O 要求で読み込むことができる最大ブロック数に設定します。これは、システム設定 MAX_IO_SIZE/DB_BLOCK_SIZE で定義します。DB_BLOCK_BUFFERS パラメータも同様に増加できます。
ターゲットテーブル上のビットマップインデックス

ビットマップインデックスはクエリに役立ちますが、Post によって適用される DML 操作が遅くなります。詳細については、「ビットマップインデックス」を参照してください。

複製でターゲットテーブル上のビットマップインデックスの使用を避けるか、または頻繁な DML 活動がないテーブルのみで使用します。

ディスク I/O のボトルネック

ターゲットシステムでのディスク I/O のボトルネックは、Post のパフォーマンスが低下する一般的な原因です。Post は、その時間のかなりの割合で、Oracle がデータをコミットするのを待機しています。ピアトゥピアレプリケーションで同じログデバイスから読み出している Capture プロセスが存在する場合は、効果は悪くなります。

ディスク I/O はデータベース環境の性質ですが、REDO ログを高速なハードディスクまたは半導体デバイス上に配置することで、ボトルネックを軽減できます。

多数のバッファ取得

多数のバッファ取得を起こしている SQL 文のあるテーブルを確認します。サイズおよび一意のインデックスであるかどうかによって、インデックスでは 2 つから 4 つのバッファ取得にするべきです。

4 を超えるバッファ取得が存在する場合は、おそらくインデックスの再構築が必要です。設定ファイルを再度アクティベートしなくても、インデックスを再構築できます。
Oracle の書き込み速度のボトルネック

デフォルトでは、1 つのバッファライタが、すべてのダーティな Oracle ブロックをディスクに書き込みます。そのバッファライタープロセスは、起動して書き込みするときにはいつでも、共有メモリの一部をロックして、実際上、Post プロセスを含めて、データブロックを変更または読み取るプロセスをブロックします。

この問題が解決しない場合は、ライタの数を増やすことを検討します。データベースのマニュアルを参照してください。

トランザクションのサイズが小さい

通常、Post は、各 COMMIT を受信した後に 1 回内部 read/release を行います。つまり、チェックポイント復旧プロセスの一部としてキューからそのデータをパージします。小さなトランザクションでは、こうすることでターゲットシステムで I/O が過剰になり Post プロセスが妨害されます。

ほとんどのトランザクションが小さい場合は、Post の SP_OPO_READRELEASE_INTERVAL パラメータの値を変更してみます。このパラメータの詳細については、『 SharePlex リファレンスガイド』を参照してください。

シーケンスがキャッシュされない

複製のシーケンスがキャッシュされない場合は、複製ボリュームにシーケンスが不必要に追加されています。

シーケンスをキャッシュします。複製されたシーケンスがキーの一部である場合は、それらのキーがあるテーブルを複製して、そのシーケンスを複製設定から削除します。大幅にパフォーマンスが向上するはずです。

ulimit が低い

次のようなエラーは、ターゲットシステムでシステムファイル記述子設定を増やす必要があることを意味します。

Error 07-24-08 12:11:40.360226 8693 12345 Poster error:/var/quest/ vardir/log/event_log:Too many open files (posting from ora102, queue prodsys, to ora10b)

解決策:ulimit を最適な値である 1024 にできるだけ近い値に設定します。

ulimit は、システムのハードリミットとして、またはセッション単位のソフトリミットとして設定できます。

  • ハードリミットの設定:(推奨)ハードリミットを変更するには root ユーザーとシステムの再起動が必要ですが、SharePlex をサポートするため、値は適正レベルで固定されたままです。システム管理者にご相談ください。
  • ソフトリミットの設定:ソフトリミット設定は、設定された sp_cop セッション中に限り有効です。その後はデフォルト値に戻りますが、ハードリミットよりも低い値になり、SharePlex にとって低すぎる値になる可能性があります。
Compare プロセスのロック

repair コマンドは、修復プロセス中に修復が必要なすべての行をロックします。また、非同期状態の行が 1000 件以上ある場合は、テーブル全体をロックします。Post が修復されているテーブルにデータを適用しようとした場合は、これで Post がブロックされることがあります。

repair プロセスが完了するまで Post を待機させたくない場合は、compare プロセスを kill します。repair プロセスで起こるロックの問題を回避するには、repair をピーク時間外に実行することを考慮してください。

Capture と Post の速度の違い

SharePlex は、標準の SQL 文でターゲットデータベースに操作を post するよりも速く、レコードを REDO ログから読み取って処理します。

Post プロセスのチューニング」を参照してください。

アーカイブログディレクトリが一杯である

Post がストールしたように見えたが、正常にシャットダウンせず、Event Log の中のエラーが「sp_opst_mt - operation taking too long」だけである場合は、ターゲットシステム上のアーカイブログのディレクトリが一杯になっていることがあります。この場合は、Oracle は新しいログを作成できず、処理を一時停止します。Oracle の動作を待機しているために、Post はストールします。

古いアーカイブログをいくつか他のデバイスに移動するか削除して、新しいログ用の空き容量を確保します。

コミット削減の問題

コミット削減が機能しない場合は、レコードのディスパッチ速度が遅いため、コミット後に有効なメッセージを利用できない可能性があります。コミットメッセージ後に有効なメッセージが見つかった場合、Post はコミットをスキップできます。それ以外の場合はコミットを発行します。

これが Post プロセスを完全に停止させてしまうほどの問題かどうかを調べるには、複製を通じて小さなトランザクションを大量に実行してから、Post プロセスを起動します。コミット削減がまったく見られない場合は、この問題が原因ではないということです。

Post の停止

Post が停止した場合は、sp_ctrlstatus コマンドを発行して、理由を見つけます。

idle 状態は、post するデータが post キューにないことを意味します。

stopped by user ステータスは、SharePlex ユーザーが Post プロセスを停止したことを意味します。停止したユーザーを調べるには、Event Log 内のユーザー発行コマンドを参照してください。

stopped due to error ステータスは、複製またはデータベースエラーのために Post が停止したことを意味します。

次に、予期せずに Post が停止する原因の一部を説明します。

問題 説明 解決策
修正可能なデータベースエラー

Post は修正可能なデータベースエラーで停止します。このため、データが非同期になるリスクなしに問題を解決できます。エラーおよび不正な SQL 文は、ターゲットシステム上の変数データディレクトリの log サブディレクトリの中にある databaseID_errlog.sql ファイルに記録されます。

ログファイル内の情報を使用して問題を解決してから、Post を再び起動します。post が停止された場所から再開します。

修正不可能なデータベースエラー

非同期状態など一部のエラーは修正できません。その場合、SharePlex はエラーをイベントログに報告し、エラーおよび SQL 文を databaseID_errlog.sql ファイルに書き込んで、処理を継続します。時には、修正できないエラーのために、Post が停止することがあります。

エラーを修正できなくても Post の処理は続行したい場合は、databasemsglist ファイル内のエラーをリストし、SP_OPO_CONT_ON_ERR または SP_OPX_CONT_ON_ERR パラメータを 1 に設定します。これで、SharePlex はエラーを無視して Post 処理を続行します。詳細については、「DML エラーの発生時の post の続行」を参照してください。

ターゲットテーブルのロック

ターゲットテーブルがロックされた場合は、Post プロセスは SQL 文を適用できず、エラーメッセージを生成します。このメッセージは、ユーザー、アプリケーション、またはジョブがテーブルにアクセスしており、非同期状態を起こしていることを意味することがあります。また、Oracle ターゲットの場合は、repair コマンドがテーブルをロックしたことを意味することもあります。

テーブルがロックされた理由を調べ、アクセスの問題を解決します(repair コマンドが原因である場合を除く)。DML がテーブルで実行されている場合は、データを再同期する必要があることがあります。「ソーステーブルとターゲットテーブルの再同期方法」を参照してください。

名前付き export キューが存在するときの設定のディアクティベート

名前付き export キューを使用しており、設定をディアクティベートしたときは、キューから残りのデータを post する代わりに、Post が次のエラーで停止することがあります。

「sp_opst_mt (for o.qa920-o.qa920 queue q5) 15007 - Can't open poster queue que_NOEXIST:Queue does not exist.」

Post を起動して複製を終了するには、SharePlex をシャットダウンしてから、再起動します。

キューの名前が長すぎます

キューの名前が長すぎる場合は、Post が停止します。

設定ファイルで名前付きキューに割り当てられている名前が、15 文字以下であることを確認します。

Post がセマフォエラーを生成する Windows システムで Post が「shs_SEMERR: an error occurred with the semaphore」というエラーメッセージを返す場合、SharePlex は使用可能な数以上のセマフォを必要としています。これは通常、名前付きキューまたは水平分割レプリケーションが使用されているときに発生します。MKS Toolkit を使用してセマフォの数を増やすことができます。
  1. Windows の コントロールパネル で、Configure PTC MKS Toolkit を開きます。
  2. 実行時の設定 を選択します。
  3. カテゴリ から セマフォ を選択します。
  4. 次のセマフォを設定します。

    Max Number of Semaphore IDs:10

    Max Number of Semaphores:512

    Max Number of Semaphore Undo entries:90

新しいテーブルが追加されない

Oracle ソースの場合、アクティベーション後に作成されたテーブルは複製に自動で追加されます。

この自動追加機能はパラメータで制御されます。目標を達成するために適切に設定されていることを確認してください。「Oracle DDL 複製の制御」を参照してください。

オープンカーソルがありません

次のエラーが表示された場合は、Post が使用可能なオープンカーソルを超えています。

Warning: sp_opst_mt (for o.oracle-o.oracle queue oracle) Post has opened number cursors.No more available cursors!Exiting」

Post は一定数のオープンカーソルをターゲットデータベースに必要とします。

次の SQL 文を使用して、現在のデータベースの OPEN_CURSORS の値を表示します。

select value from V$PARAMETER where name = 'open_cursors' ;

SharePlex に適した OPEN_CURSORS の値を判断するには、「オープンカ―ソルの調整」を参照してください。

その他の問題と解決策

問題 説明 解決策
SharePlex がマシン名を解決できない Unix または Linux システムと Windows システム間でマシン名を解決できないことがあります。 複製ネットワークの中のすべてのサーバ(Unix、Linux、および Windows)の IP アドレスおよび名前を、すべての Unix および Linux マシン上の /etc/hosts ファイルに追加し、同じ情報をすべての Windows マシン上の hosts ファイルに追加します。
sp_cop が CPU 時間を使いすぎます SharePlex によるオーバーヘッド活動が、頻繁すぎる可能性があります。

SP_COP_IDLETIME パラメータで sp_cop のアイドル時間を増やします。『 SharePlex リファレンスガイド』でこのパラメータの説明を参照してください。

破損したソーステーブル

ソーステーブルが破壊されているか、複製されたデータをターゲットデータベースに post したくない他の理由がある場合は、そのテーブルをアクティブ設定から削除せず、他のオブジェクトの post に影響を与えずに、そのテーブルの post を防止できます。

1 つ以上のテーブルの post を無効にするには、SP_OPO_DISABLE_OBJECT_NUM または SP_OPX_DISABLE_OBJECT_NUM パラメータを使用します。これで、指定されたオブジェクト ID の DML および DDL 操作の post を無効にするように設定できます。このパラメータはデフォルトで無効になっています。再びターゲットテーブルに post を開始する準備が整ったときは、このパラメータを 0 に設定して再び無効にします。詳細については、『 SharePlex リファレンスガイド』でこのパラメータの説明を参照してください。

一部の列のみが複製された テーブルが垂直分割レプリケーション用に設定されている場合、そのテーブル名がワイルドカードも満たすと、(垂直分割レプリケーションを使った)特定のリストが、ワイルドカードを使用したリストより優先されます。同一のテーブルで、垂直分割とフルテーブルレプリケーションを併用することはできません。 指定された列の複製に問題がない場合、何もする必要はありません。詳細については、「垂直分割レプリケーションの設定」を参照してください。
競合解決でコンパイルエラーが生成されます 競合解決ルーチンでコンパイルの問題が発生する場合は、いずれかのテーブルの名前がその所有者と同じでないかどうかをチェックします。PL/SQL 内の既知の問題により、SharePlex 競合解決ロジックは、名前が所有者と同じテーブルの PL/SQL コンパイルができません。Oracle 社は、この問題の修復を予定していないことを表明しました。詳細は、「Oracle TAR 2577886.996」を参照してください。 この問題は複製には影響ありません。SharePlex は、所有者名とテーブル名が同じテーブルのデータを複製します。

一般的な複製エラー

次のテーブルは、複製中に発生する可能性がある一般的なエラーメッセージの多くに関する説明です。

sp_cop エラーメッセージ 原因 解決策
sp_cop cannot setup; memory segment n in use. 最後に sp_cop をシャットダウンしたときに、キューにアクセスするプロセスがまだ実行されていました。 それらのプロセスを kill してください。SharePlex プロセスの先頭には sp_ が付きます。すべて kill すると、sp_cop は起動するはずです。
Error: sp_cop can't setup shared memory statistics capability - exiting Error: sp_cop(shs) Cannot delete previous memory segment 303.Please check to see if any Shareplex processes are running (ps -ef | grep sp_).If there are some processes running then kill them and restart sp_cop. 同じ変数データディレクトリを指し示す sp_cop が、すでに 1 つ以上存在します。 複数の SharePlex のセッションを実行するには、それぞれのために別々の変数データディレクトリを使用する必要があります。「複数の SharePlex インスタンスの実行」を参照してください。
Capture エラーメッセージ    
Capture time limit (300 sec) exceeded. Capture がレコードを処理していません。REDO ログに問題があることを示している場合があります。特定の秒数が経過すると、Capture はレコードを処理できずに停止し、レコードをログに記録して、このメッセージを返します。 考えられる原因については、「Oracle Capture 関連の問題」を参照してください。問題の原因を判断できない場合は、ログラップが発生する前に Quest サポートにお問い合わせください。
(Oracle)Log wrap detected REDO ログがラップして、Capture がアーカイブログを見つけられません。 アーカイブログを使用できる場合は、解凍してアーカイブログディレクトリに復元します。SharePlex は、アーカイブログをまず Oracle アーカイブログリストで探してから、SP_OCT_ARCH_LOC パラメータで指定された場所を探します。このパラメータは、常に正しい archived log directory に設定しておく必要があります。アーカイブログに圧縮を使用する場合は、SharePlex が処理を終了するまで、それらを圧縮しないでください。SharePlex のカレントログを判断するには、ソースシステム上の sp_ctrl の中で、[detail] オプションをつけて show capture コマンドを発行します。カレントログ以前に生成されたどのログも圧縮できます。ただし、このエラーは、アーカイブログが壊れているときにも発生します。
Post エラーメッセージ    
operation taking too long. ターゲットインスタンスに対する SQL 文の適用時間が、内部の許容時間を超えています。 Oracle Post 関連の問題」を参照してください。
Rowid not found SharePlex がターゲットデータベースでアップデートする正しい行を見つけられません。 ターゲットで行を削除した可能性のあるトリガ、プロセス、またはユーザーを確認します。「同期の問題の解決」も参照してください。
Database not available. Post がターゲットデータベースにログインできません。 データベースが実行されていることを確認し、SharePlex データベースアカウントのパスワードが変更されていないかどうかを確認します。
Oracle 関連エラーメッセージ    
Can’t access OBJ$Table SharePlex がデータディクショナリにアクセスできません。複製するためには、アクセスできる必要があります。 O7_DICTIONARY_ACCESSIBILITY Oracle チューニングパラメータをチェックして、それが TRUE (デフォルト)に設定されていることを確認します。
Forward and backward operation counts do not match... メッセージの順序が正しくない可能性があります。 SharePlex の前に Oracle をシャットダウンしたかどうかを確認します。これは、SharePlex がエラーを戻す原因となることがあり、まれなケースでは、キューが破壊されます。正しい手順は、SharePlex をシャットダウンし、それから Oracle をシャットダウンすることです。この問題を解決するには、Quest サポートに連絡してください。
Error: sp_opst_mt (for o.blues920-o.ora9 queue bluesky) 15033 - Failed to execute SQL on table:QA.T_DEST_1:ORA-00001: unique constraint (.) violated. ソースシステムで一意性制約違反が発生しました。変更は REDO ログに記録されましたが、Oracle がロールバックしました。このロールバックも REDO ログに記録されました。SharePlex がターゲットで制約違反を検出しました。 このメッセージは無視してください。Oracle が違反した動作をロールバックしているために、テーブルは同期したままです。Oracle が違反を処理する方法のために、これは回避できないエラーです。
SQL Cacheエラーメッセージ    
Warning:Too many concurrent transactions.Will disable the SQL Cache capability. SQL Cache サイズが 1 に設定されていますが、より多くのカーソルがまだ必要です。この場合、SharePlex は SQL Cache 機能を無効にします。 意図的な設定である場合は、何もする必要がありません。SQL Cache の詳細については、「SQL Cache のチューニング」を参照してください。

Warning:Running out of cursors.Number of cursors opened so far is number.Will attempt to decrease SQL Cache size.

または

Notice:Shrinking SQL Cache size to number per session.

Post は、カーソルの最大数の超過を検出し、SQL Cache のサイズを削減しようとしています。 この値が 1 になってもまだ十分なカーソルがない場合を除いては、何もする必要がありません。SQL Cache の詳細については、「SQL Cache のチューニング」を参照してください。
SQL Cache disabled. SQL Cache 機能が無効です。 意図的な設定である場合は、何もする必要がありません。SQL Cache の詳細については、「SQL Cache のチューニング」を参照してください。
ヒントファイルのエラーメッセージ(Oracle のみ)    
15050 – hint file not found

SharePlex は、使用しているかどうかに関わらず、hints.SID ファイルを探します。このファイルの場所は、SharePlex 変数データディレクトリの data サブディレクトリです。このファイルが移動または削除されると、SharePlex はこのエラーメッセージを返します。

このメッセージを防ぐには、空のヒントファイルを変数データディレクトリの data サブディレクトリに作成します。そのファイルに hints.SID という名前を付けます。

15051 – missing column in the hint file (either table of index name)

15052 – syntax error for tablename

15053 – syntax error for indexname

ヒントファイルが正しく設定されていません。 INDEX ヒントの使用の詳細については、「Oracle INDEX ヒントの使用」を参照してください。
15054 – source table’s object_id not found in object cache ヒントファイルに、アクティブ設定の中にないソーステーブルが含まれています。ヒントファイルの中のテーブルは、すべてアクティブ設定の中にリストされている必要があります。 このテーブルが設定に含まれる場合は、ヒントファイル中の所有者名とテーブル名が、設定内と同一であることを確認してください。
15055 – more than n valid entries were entered into the hints file ヒントファイルでは、SP_OPO_HINTS_LIMIT パラメータで設定された値と同数のテーブルとインデックスの組み合わせだけが許可されます。 テーブルとインデックスの組み合わせをいくつか削除するか、SP_OPO_HINTS_LIMIT の値を増やします。このパラメータの詳細については、『 SharePlex リファレンスガイド』の Post パラメータの説明を参照してください。
15056 – error allocation memory for hints これは、システムレベルのメモリの問題を示しています。ヒントファイル自体は、多量のメモリを必要としません。 システムメモリが十分であると考える場合は、Post プロセスを停止して、再び起動してください。ヒントファイルを使用していない場合は、このメッセージは無視できます。
17000 – error opening hint file SharePlex がヒントファイルを開くことができません。 ファイルが破損していないかどうかを確認します。ファイルが有効な場合は、Post プロセスに十分な読み取り権限があることを確認します。INDEX ヒントの使用の詳細については、「Oracle INDEX ヒントの使用」を参照してください。
環境関連のエラーメッセージ    
sp_opst_mt: pid=num date/time src host/ sid=db01:N2PB /var/quest/vardir/log/ event_log:Too many open files システムファイル記述子の設定が 1024 ではありません。

ulimit を 1024 に設定します。

ulimit は、システムのハードリミットとして、またはセッション単位のソフトリミットとして設定できます。

  • ハードリミットの設定:(推奨)ハードリミットを変更するには root ユーザーとシステムの再起動が必要ですが、SharePlex をサポートするため、値は適正レベルで固定されたままです。システム管理者にご相談ください。
  • ソフトリミットの設定:ソフトリミット設定は、設定された sp_cop セッション中に限り有効です。その後はデフォルト値に戻りますが、ハードリミットよりも低い値になり、SharePlex にとって低すぎる値になる可能性があります。
06/29/00 08:05 System call error: sp_ocap(que) (for o.QA11 queue o.QA11) No space left on device devname 06/29/00 08:05 Internal error: sp_ocap (for o.QA11 queue o.QA11) 10705 - writecommit failed que_BUFWRTERR:Error writing buffer to file 06/29/00 08:05 Process exited sp_ocap (for o.QA11 queue o.QA11) [pid = 8692] -exit(1) SharePlex がキューのために使用する領域がディスク上からなくなっています。 ディスクスペース不足の解決方法」を参照してください。
gethostbyname name failed - exiting

ローカル hosts ファイルが正しく設定されていません。

ホスト名が hosts ファイル(Unix および Linux では /etc/hosts、Windows では hosts)で正しく指定されていません。このシステムがクラスタの一部でない場合は、ファイルで名前を修正してください。このシステムがクラスタの一部である場合は、仮想 IP アドレスが hosts ファイルでホストのエイリアスにマッピングされている必要があります。クラスタで SharePlex を設定する方法については、『SharePlex インストールガイド』を参照してください。

その他のエラーメッセージ    
Snapshot too old SharePlex で必要な読み込み一貫性ビューが使用できなくなっています。 ロールバックセグメントのサイズを増やします。
Parameter paramname does not exist in the paramdefaults file.Using hard coded default value.Please make sure that your param-defaults file is the correct version.

SharePlex が参照に必要なパラメータを見つけられません。実行している SharePlex のバージョンよりも古いバージョンの param-defaults ファイルがあります。誰かが、ダウンロードしたパッチを使用して SharePlex のバイナリをアップデートしながら、最新の param-default ファイルをインストールしていない可能性があります。

SharePlex を手動で更新するときは、更新後の param-defaults ファイルを必ず確認してください。

Invalid DATE format detected in record with rowid=rowid, on obj object_id.See capture log for detail. ユーザーまたはアプリケーションが無効な日付の値を Oracle データベースに入力し、それがデータベースの有効性チェックをバイパスしています。 データベースチェックによって見つからない場合は、SharePlex が日時の形式を修正できるように SP_OCT_DEF_ パラメータを設定します。『 SharePlex リファレンスガイド』で SP_OCT_DEF パラメータの説明を参照してください。
shs_SHMERR: an error occurred with shared memory. SharePlex(sp_cop)をシャットダウンせずに qview ユーティリティを実行しました。 SharePlex をシャットダウンして、qview を再実行します。

Oracle DDL 複製の問題の解決

複製上の問題の防止および解決方法 > Oracle DDL 複製の問題の解決

このセクションでは、Oracle DDL の複製がアクティブなときに発生する多くの一般的な問題および解決方法を説明します。SharePlex の DDL サポートの詳細については、「Oracle DDL 複製のセットアップ」を参照してください。

発生した問題がこのドキュメントに記載されていない場合は、以下のアドレスの SharePlex サポート技術情報を検索してください。

https://support.quest.com

サポート技術情報には、フィルタリングオプションと、SharePlex の使用およびトラブルシューティングに役立つ他のリソースへのリンクがあります。

DDL が複製しません

デフォルトでは一部の Oracle DDL のみが有効になっています。その他の DDL サポートは、パラメータ設定で明示的に有効にする必要があります。

SP_OPO_STOP_ON_DDL_ERR は、問題を解決してデータベースの同期を保つことができるように、DDL を適用するときにエラーがある場合は、デフォルトで Post プロセスに停止するように指示します。このパラメータは 1 (オン)に設定します。有効にすると、以下のようなメッセージで DDL がスキップされたことが通知されます。

Skipping generic 9i DDL operation, schema (bob) could not be set.

FAILED DDL Replication for "create user bob."

解決策:以下のパラメータが適切に設定されていることを確認します。これらのパラメータを使用して DDL 複製を設定する方法の詳細については、「Oracle DDL 複製の制御」を参照してください。

パラメータ 説明 デフォルト
SP_OCT_REPLICATE_DDL

以下の場合に、TRUNCATE TABLE コマンドおよび ALTER TABLE コマンドを ADD または DROP 列に複製します。

  • 影響を受けるオブジェクトがアクティベーション時にソースとターゲットに存在する、および
  • その名前が設定ファイルに(明示的に、またはワイルドカードを使用して)リストされている。
オン
SP_OCT_AUTOADD_ENABLE アクティベーション後に作成されたテーブルとインデックスを複製に自動的に追加します。 オン
Set SP_OCT_AUTOADD_MV アクティベーション後に作成されたマテリアライズドビューを複製に自動的に追加します。 オフ
SP_OCT_AUTOADD_SEQ アクティベーション後に作成されたシーケンスを複製に自動的に追加します。 オフ
SP_OCT_REPLICATE_ALL_DDL 設定ファイルにリストされていないテーブルとインデックスの DDL を複製します。SharePlex はこれらのオブジェクトのメタデータ変更を複製しますが、オブジェクトに対するデータ変更は維持します。オブジェクトは、設定のアクティベーション前にソースとターゲットに存在する必要があります。 オフ

複製された DDL が Event Log に不完全に表示されます

SharePlex は複製した DDL を Event Log に出力しますが、2,000 文字を超えるステートメントは切り捨てられます。最初の 2,000 文字のみがログに記録されます。

解決策: 何も必要ありません。

キューの問題の解決

このトピックは、SharePlex キューに関連する可能性がある複製の問題を解決するのに役立ちます。

発生した問題がこのドキュメントに記載されていない場合は、以下のアドレスの SharePlex サポート技術情報を検索してください。

https://support.quest.com

サポート技術情報には、フィルタリングオプションと、SharePlex の使用およびトラブルシューティングに役立つ他のリソースへのリンクがあります。

SharePlex がディスク領域を使い尽くしています

キューに蓄積するデータのために、SharePlex がディスク領域を使い尽くしてしまうことがあります。次に、考えられる原因および解決方法を説明します。

問題 説明 解決策
停止した複製プロセス

複製プロセスを停止すると、データがキューに蓄積されます。

ユーザーがプロセスを停止した場合は、SharePlex が蓄積したデータを処理できるように、理由を調べて、できるだけ早くそれを起動します。エラーのためにプロセスが停止した場合は、Event Log を show log コマンドで表示して、何が起こったかを調べて、それから問題を解決して、処理を再開してキューのバックログを減少できるようにします。

大規模な操作

まだ COMMIT されていない大きなトランザクションを保存する場合は、Post キューが大きくなることがあります。ロールバックおよびデータ回復ができるように、COMMIT を受信するまで、SharePlex はデータを post キューに保持します。

qstatus コマンドで、post キューを表示します。Backlog (messages) フィールドの値が、一定であるか減少している一方、Number of messages フィールドの値が増加している場合は、Post はデータをリリースする前に、COMMIT を待機しています。

show post detail コマンドを使用して、Post がトランザクションを正常に処理していることを確認してください。可能な場合は、アプリケーションの COMMIT ポイントを 500 に設定して、SharePlex が処理するためにより小さな SQL 文を生成してください。また、長いトランザクションであることが分かっているテーブルを隔離するために、名前付き post キューを使用する設定を作成することも検討してください。詳細については、「名前付き post キューの設定」を参照してください。

Post キューにメッセージが蓄積されるために、ディスクスペースの問題が発生しそうな場合は、Post が他のトランザクションによる操作の一部をクリアできるようになるまで、Import を停止できます。「ディスクスペース不足の解決方法」を参照してください。

(Oracle)Capture がアーカイブログを処理しています。

Caputre がアーカイブログを処理している場合、アーカイブされたレコードを処理しているときは、capture キューはディスク領域を消費します。

ログの中で Capture がデータベースのずっと後にあると、ソースデータとターゲットデータの間の遅延が大きくなりすぎてターゲットユーザーに受け入れられない可能性があります。ora_cleansp を実行して複製環境とキューをクリーンアップし、データを再同期して、設定を再アクティベートするほうが、変数データディレクトリにディスク領域を追加するよりも実際的なことがあります。

Capture がアーカイブログを処理しているために SharePlex のディスク領域が常態的に不足する場合は、SharePlex サポートチームが Capture のパフォーマンスや REDO 設定の調整を支援できます。複製のための REDO ログの設定方法の詳細については、「SharePlex をサポートするための Oracle redo ロギングのセットアップ」を参照してください。

ソーストランザクション活動での計画外の増加

ソースシステム上の活動での計画外の増加により、Post キューにデータが蓄積し、割り当てられたディスク領域の最大量に達することがあります。

ディスクスペース不足の解決方法」を参照してください。

「failure to write and open queue」エラーが存在します

次のものに似た一連のメッセージが Event Log にある場合は、sp_cop を停止して起動してください。

1 08-06-12 13:20:17.089485 2384 1 sp_ordr(rim) (for o.user queue o.user) Error opening output queue rv=9 que_open(-,writeuser+ X,0x0a02d364+PR+o.user+sp_ordr+o.user)

Notice 08-06-12 13:20:17.089485 2384 1 sp_ordr (for o.user queue o.user) data route to a02d364.48.7e failed err=100

Error 08-06-12 13:20:17.089485 2384 1 sp_ordr (for o.user queue o.user) 11004 - sp_ordr failure writing to queue(s)

Notice 08-06-12 13:20:17.089485 2384 1 sp_ordr (for o.user queue o.user) Exit sp_ordr to retry rim-write.

Info 08-06-12 13:20:17.089485 2384 1 Process exited sp_ordr (for o.user queue o.user) [pid = 8183] - exit(1)

キューが破壊されています

SharePlex をホストするシステムで障害が発生すると、1 つ以上の SharePlex キューが破損することがあり、これらのキューからの読み取りや書き込みでエラーが発生します。この場合は、動作がキューに依存しているために、purge config および abort config コマンドは使用できません。

解決策:キューの破損の問題を解決するには、SharePlex サポートに問い合わせてください。

post キューが大きすぎるようです

post キューのサイズが、その中にあるメッセージ数と比較して大きすぎるような場合は、異常ではありません。SharePlex の post キューは、実際には多数のサブキューから構成されており、それぞれがソースシステム上のユーザーセッションにおおよそ対応しています。サブキューにはそれに関連付けられた 1 つ以上のファイルがあり、それぞれのデフォルトサイズは 8 MB です。8 MB のサイズ全体が使用されていない場合は、データが post され read-release が行われた後も、ファイルはシステムに残ります。

解決策:ステータスディスプレイの post キューのサイズは、すべてのキューファイルが使用している実際のディスク領域です。すでに read-release されている古いファイルは、SharePlex qview ユーティリティの中の trim コマンドを使用して削除できます。このコマンドは、ターゲットデータベースにまだ post およびコミットされていないデータがあるファイルは、削除しません。qview ユーティリティの詳細については、『 SharePlex リファレンスガイド』を参照してください。

Related Documents

The document was helpful.

Select Rating

I easily found the information I needed.

Select Rating