ヘッダーをスキップ
Oracle Database Gateway for DRDAユーザーズ・ガイド
11gリリース1(11.1)
E05816-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

5 エラー・メッセージ、診断およびレポート

この章では、エラー・メッセージおよびエラー・コードに関する情報を提供します。このデータは、Oracle Database Gateway for DRDAの11.1リリースに固有です。この章には、次の項が含まれます。

5.1 ゲートウェイのエラー・メッセージの解釈

ゲートウェイ・アーキテクチャは、様々なコンポーネントで構成されています。1つ以上のDRDAデータベース表を参照するSQL文を処理するときには、どのコンポーネントでもエラー状態が検出およびレポートされる可能性があります。つまり、エラーは、複数のコンポーネントからのエラー・コードとサポート・データを含む複雑なものとなる可能性があります。ただし、すべての場合において、アプリケーションが最終的に受け取るのは単一のエラー・コードまたはリターン・コードです。

ほとんどのゲートウェイ・メッセージはOracle SQL通信領域(SQLCA)の70文字のメッセージ領域を超えるため、ゲートウェイを通じてデータにアクセスする際に使用するプログラム・インタフェースおよびOracle Call Interfaceでは、SQLGLMまたはOERHMSを使用してメッセージのテキスト全体を表示する必要があります。SQLGLMの詳細は、Oracleプリコンパイラのプログラマーズ・ガイドを参照してください。OERHMSの詳細は、『Oracle C++ Call Interfaceプログラマーズ・ガイド』を参照してください。

ゲートウェイの使用時に発生するエラーは、次のように多くのソースが原因となります。

5.1.1 Oracle Databaseにより検出されたエラー

Oracle Databaseにより検出されたエラーは、ORAタイプの標準メッセージを使用してアプリケーションまたはツールにレポートされます。これらのエラーの詳細は、『Oracle Databaseエラー・メッセージ』を参照してください。たとえば、未定義のデータベース・リンク名が指定されると、次のエラーが発生します。

ORA-02019:  connection description for remote database not found

ORA-9100ORA-9199の範囲のエラーは、汎用ゲートウェイ・レイヤー(DRDAに固有ではないゲートウェイのコンポーネント)用に予約されています。この範囲のメッセージは、『Oracle Databaseエラー・メッセージ』に記載されています。

5.1.2 ゲートウェイにより検出されたエラー

汎用ゲートウェイにより検出されたエラーには、HGO-という接頭辞があります。これらのエラーは、『Oracle Databaseエラー・メッセージ』に記載されています。

エラー・メッセージの例は次のとおりです。

HGO-00706:  HGO:  Missing equal sign for parameter in initialization file.

5.1.3 DRDAソフトウェアで検出されたエラー

クライアント側またはサーバー側のDRDAゲートウェイで検出されたエラーは、通常、エラーORA-28500を使用してレポートされ、次にゲートウェイ固有の拡張エラー・メッセージが続きます。拡張メッセージでは、次の2つのリターン・コードがレポートされます。

  • drcは、「ゲートウェイのエラー・コード」に記載されているDRDA固有のエラーを示します。

  • grcは、DRDAレイヤーで検出された汎用ゲートウェイ・エラーを示します。これらのエラーは、『Oracle Databaseエラー・メッセージ』に記載されています。


注意:

エラー・コードORA-28500は、リリース8より前のゲートウェイではエラー・コードORA-09100でした。エラー・コードORA-28501は、リリース8より前のゲートウェイではORA-09101としてリストされていました。

drcの値に続くカッコ内の値は、Oracleサポート・サービスでのデバッグに使用されます。errpフィールドは、エラーを検出した(クライアントまたはサーバーの)プログラムを示します。errmcが存在する場合、任意のエラー・トークンがリストされます。

たとえば、initsid.oraファイルのDRDA_REMOTE_NAMEパラメータで指定されたデータベース名がDRDAサーバーに定義されていない場合、次のエラー・メッセージが戻されます。

ORA-28500: connection from ORACLE to a non-Oracle system returned the message:
DG4DRDA v11.1.0.5.0 grc=0, drc=-30061 (839C,0000), errp=GDJRFS2E
errmc=XNAME

5.1.4 通信エラー

通信エラーは、ORA-28501を使用してレポートされ、次にネットワーク・エラーまたはセッション状態の欠落を示すdrc=-30080またはdrc=30081を含むゲートウェイ固有のエラー・メッセージが続きます。errmcは、エラーが発生したネットワーク機能を示し、次にネットワーク・インタフェースに固有のエラー番号を示します。

たとえば、initsid.oraファイルのDRDA_CONNECT_PARMで未定義のサイド情報プロファイルが指定されているためにセッションを確立できない場合、次のエラー・メッセージが戻されます。

ORA-28501: communication error on heterogeneous database link
DG4DRDA v11.1.0.5.0 grc=0, drc=-30081  (839C,0001), errp= file or directory(2)
errmc=Initialize_Conversation (CMINIT) CM_PROGRAM_PARAMETER_CHECK(24) No such > file or directory(2)

詳細は、ホスト・オペレーティング・システムの適切なドキュメントを参照してください。

5.1.5 サーバー・データベースにより検出されたエラー

サーバー・データベースにより検出されたエラーは、ORA-28500を使用してレポートされ、次にdrc=-777を含むゲートウェイ固有の拡張エラー・メッセージとsqlcodeが続きます。その次に、DRDAサーバー・データベースから戻されたsqlcodesqlstateerrd(エラー配列)およびerrmc(エラー・トークン)を含む別の行が続きます。使用している特定のデータベースに関するIBM社のドキュメントを参照してください。また、変換される一部のSQLエラーの詳細は、この章の「マップされたエラー」を参照してください。


注意:

エラー・コードORA-28500は、リリース8より前のゲートウェイではエラー・コードORA-09100でした。エラー・コードORA-28501は、リリース8より前のゲートウェイではORA-09101としてリストされていました。

たとえば、次のエラー・メッセージは、initsid.oraファイルのDRDA_PACKAGE_COLLIDまたはDRDA_PACKAGE_NAMEパラメータで指定されたコレクションIDまたはパッケージ名がDRDAサーバー・データベースで認識されなかったことを示します。

ORA-28500: connection from ORACLE to a non-Oracle system returned the message:
DG4DRDA v11.1.0.5.0 grc=0, drc=-30020 (839C,0000), errp=GDJMRCM
sqlcode=-805, sqlstate=51002, errd=FFFFFF9C,0,0,FFFFFFFF,0,0
errmc=124c

5.2 マップされたエラー

一部のSQLエラーは、DRDAサーバー・データベースから戻され、Oracleエラー・コードに変換されます。この処理は、Oracleインスタンスまたはゲートウェイによりエラー状態の特別な処理を提供する場合に必要です。次の表に、マップされたSQLstateのエラー番号、説明、および対応するOracleエラー・コードを示します。

表5-1 マップされたsqlstateエラー

説明 sqlstateエラー Oracleエラー

行が選択されていない

02000

0

一意索引制約違反

23505

ORA-00001

オブジェクトが存在しない

52004または42704

ORA-00942

オブジェクト名が長すぎる(18文字を超える)ため、オブジェクトが存在しない

54003または42622

ORA-00942

不十分な権限

42501

ORA-01031

無効なCCSID(実装されていないキャラクタ・セット変換)

22522

ORA-01460

無効なユーザー名またはパスワード(ログオンの拒否)

N/A

ORA-01017

0(ゼロ)による除算エラー

01519または01564

ORA-01476


次の例は、変換オブジェクトが存在しないエラーです。

ORA-00942: table or view does not exist
DG4DRDA v11.1.0.5.0 grc=0, drc=-942 (839C,0001), errp=DSNXEDST
sqlcode=-204, sqlstate=52004, errd=32,0,0,FFFFFFFF,0,0
errmc=AJONES.CXDCX

5.3 ゲートウェイのエラー・コード

次に、拡張エラー・メッセージのdrc=フィールドに出現するOracle Database Gateway for DRDAの共通エラー・コードを示します。ここに記載されていないdrc値が戻された場合は、Oracleサポート・サービスに連絡してください。

-700 Invalid ORA_MAX_DATE specified
原因: initsid.oraファイルのORA_MAX_DATEに無効な値が指定されました。
処置: ORA_MAX_DATEの値を訂正します。正しい書式は、ORA_MAX_DATE=YYYY-MM-DDです(MMの範囲は1〜12であり、DDの範囲はその月にとって有効な1〜31の数です)。
-701 Default CCSID value not supported
原因: initsid.oraファイルのDRDA_DEFAULT_CCSIDに指定された値は、Oracle Database Gateway for DRDAでサポートされません。
処置: サポートされるDRDAサーバーのキャラクタ・セットのリストは、付録C「DRDAのグローバリゼーション・サポート」を参照してください。
-702 Application Host (bind) variable exceeds 32K
原因: アプリケーション・プログラムにより、DRDAで許可される最大長の32Kを超えるホスト変数が指定されました。
処置: DRDAの制限を考慮してアプリケーションを変更する必要があります。
-703 Local character set not supported
原因: initsid.oraファイルのLANGUAGEパラメータに指定されたキャラクタ・セットは、サポートされません。
処置: サポートされるキャラクタ・セットのリストは、付録C「DRDAのグローバリゼーション・サポート」を参照してください。
-704 UserID length greater than maximum
原因: ゲートウェイのログオンで使用されるユーザーIDの長さが、8文字を超えています。
処置: 8文字以下の長さのユーザーIDを使用する必要があります。ユーザーIDの詳細は、Oracle Database Gatewayのインストレーションおよび構成ガイドの第15章「セキュリティ上の考慮事項」を参照してください。
-705 Password length greater than maximum
原因: ゲートウェイのログオンで使用されるパスワードの長さが、8文字を超えています。
処置: 8文字以下の長さのパスワードを使用する必要があります。パスワードの詳細は、Oracle Database Gatewayのインストレーションおよび構成ガイドの第15章「セキュリティ上の考慮事項」を参照してください。
-777 DRDA Server RDBMS (SQL) Error
原因: サーバー・データベースにより、アプリケーション・レベルのSQLエラーが検出されました。
処置: アプリケーションの修正方法の詳細は、「ゲートウェイのエラー・メッセージの解釈」sqlcodeを参照してください。
-30060 Invalid UserID/Password (DRDA Server RDBMS Authorization)
原因: DRDAサーバー・データベースに受け入れられないユーザーIDまたはパスワードが使用されました。
処置: ユーザーIDまたはパスワードの考慮事項は、Oracle Database Gatewayのインストレーションおよび構成ガイドの第15章「セキュリティ上の考慮事項」を参照してください。
-30061 RDB not found
原因: DRDA_REMOTE_DB_NAMEパラメータで指定されているリモート・データベースは、DRDAサーバーで有効なデータベースではありません。
処置: initsid.oraファイルのDRDA_REMOTE_DB_NAMEパラメータの値を訂正します。
-30080 Communication Error
原因: ゲートウェイで通信エラーが発生しました。
処置: 発生したエラーの解決を試みます。解決しない場合、「ゲートウェイのエラー・メッセージの解釈」を参照し、システム管理者に報告してください。
-30081 Communication Error - lost session
原因: 現在のDRDAネットワーク・セッションが切断されました。
処置: 発生したエラーの解決を試みます。解決しない場合、「ゲートウェイのエラー・メッセージの解釈」を参照し、システム管理者に報告してください。

5.4 SQLトレースおよびゲートウェイ

アプリケーションを開発する場合、ゲートウェイを通じて渡される正確なSQL文を確認できると便利なことがよくあります。この項では、適切なトレース・パラメータを指定し、デバッグ・ゲートウェイを設定する方法について説明します。

5.4.1 Oracle DatabaseでのSQLトレース

Oracle Databaseには、実際にゲートウェイに送信されるSQL文を取得するためのコマンドがあります。このコマンドは、EXPLAIN PLANと呼ばれます。EXPLAIN PLANを使用すると、指定されたSQL文を実行する際にOracle Databaseが準拠する実行計画を確認できます。このコマンドにより、指定された表に(実行計画の各ステップを記述した)行が挿入されます。コストベースの最適化を使用する場合、このコマンドにより、文の実行によるコストも確認できます。このコマンドの構文は次のとおりです。

EXPLAIN PLAN [ SET STATEMENT_ID = 'text' ]
    [ INTO [schema.]table[@dblink] ] FOR statement

このコマンドの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。


注意:

ほとんどの場合、ゲートウェイに実際に送信される(したがってDRDAサーバーに送信される)SQL文を抽出するには、EXPLAIN PLANで十分です。ただし、特定のSQL文の形式に対しては、ゲートウェイで後処理が実行されます。

5.4.2 ゲートウェイでのSQLトレース

UNIXベース・システムの場合:

本番ゲートウェイには、処理速度を向上する目的から、内部的な組込みトレース機能はありません。この製品には、アプリケーションのトレースおよびデバッグを目的とするデバッグ・ゲートウェイを構築するのに使用できるデバッグ・ライブラリが付属しています。

最初に、ゲートウェイの管理者ユーザーIDを使用してログインし、環境を設定します。

$ su - <gateway-Admin-User>

次に、デバッグ・ゲートウェイを構築します。

$ cd $ORACLE_HOME/dg4drda/lib
$ make -f dg4drda.mk ORACLE_HOME=your_oracle_home g4drsrvd

これにより、デバッグ・ゲートウェイが作成され、$ORACLE_HOME/bin/g4drsrvdに格納されます。次に、listener.oraを変更してデバッグ・ゲートウェイを起動します。PROGRAMパラメータを変更してデバッグ・プログラム名を指定します。

(SID_DESC=
        (SID_NAME=drdahoa1)
        (ORACLE_HOME=/oracle/dg4drda/11.1.0)
        (PROGRAM=g4drsrvd))

この変更を反映するには、リスナーをリロードする必要があります。次に、ゲートウェイ初期化ファイルを編集して次のパラメータを追加します。

TRACE_LEVEL

ORACLE_DRDA_TCTL

オプションでLOG_DESTINATIONパラメータを追加できますが、必須ではありません。

パラメータが設定されたゲートウェイ初期化ファイルの一部は、次のようになります。

#
TRACE_LEVEL=255
ORACLE_DRDA_TCTL=debug.tctl
#

前述の例の場合、ゲートウェイとDRDA両方の完全なトレースが実行されます。多くの場合、ゲートウェイ・トレースのみが適切です。ゲートウェイ・トレースのみを取得するには、ORACLE_DRDA_TCTLパラメータを削除(またはコメント・アウト)します。

LOG_DESTINATIONを指定する場合、ファイル名のみ(drda.trcなど)を指定できます。この場合、ログはゲートウェイのログ・ディレクトリ($ORACLE_HOME/dg4drda/log)に書き込まれます。または、完全修飾されたパス名を指定することも可能です。LOG_DESTINATIONを指定しない場合、デフォルト形式の一意のログ・ファイルが生成されます。

ログ・ファイル名の形式は、次のとおりです。

gatewaysid_pid.trc

変数の意味は次のとおりです。

gatewaysidは、ゲートウェイのSIDです。この値は、FDS_INSTANCEパラメータの設定により決定されます。また、pidは、ゲートウェイ・プロセスのプロセス識別子(PID)です。

ログ・ファイル名の例は、次のとおりです。

drdahoa1_3875.trc

DRDAサーバーに渡されるSQL文を検索する場合、'*** HGAPARS ***'および'*** HGAXMSQL ***'という文字列を検索します。HGAPARSに続く文字列は、Oracle Database 11gリレーショナル・データベース管理システム(RDBMS)からの受信文です。HGAXMSQLに続く文字列は、日付の置換が行われた後の送信文です。これは、DRDAサーバーに送信される実際のSQL文です。

アプリケーションの開発が終了したら、listener.oraPROGRAM= valueを以前の値に戻し、本番ゲートウェイを再度使用するためにリスナーをリロードしてください。また、ゲートウェイ初期化ファイルのトレース・パラメータをコメント・アウトする必要があります。

Microsoft Windowsの場合:

ゲートウェイの処理速度を向上するため、本番ゲートウェイにトレース機能は組み込まれていません。

この製品には、アプリケーションのトレースおよびデバッグを目的とするデバッグ・バージョンのゲートウェイが付属しています。

このプロセスでは、次のようにlistener.oraファイルを変更してデバッグ・ゲートウェイを使用します。

  1. ゲートウェイの管理者ユーザーIDでログインし、環境を設定します。

  2. Oracle Net Listenerを停止します。

    > lsnrctl stop
    
  3. 任意のテキスト・エディタでlistener.oraを編集します。

    > notepad C:\Oracle\GTWHome\network\admin\listener.ora
    
  4. ゲートウェイのTNSエントリを検索し、次のようにプログラムを変更します。

    PROGRAM=g4drsrvd
    
  5. ファイルを保存して終了します。次に、Oracle Net Listenerを再起動します。

    > lsnrctl start
    
  6. 任意のテキスト・エディタでゲートウェイのinitsid.oraファイルを編集します。

    > notepad C:\Oracle\GTWHome\dg4drda\admin\initsid.ora
    
  7. 次のパラメータを設定します。

    TRACE_LEVEL=255
    ORACLE_DRDA_TCTL=debug.tctl
    

オプションとして、LOG_DESTINATIONパラメータを追加できますが、必須ではありません。LOG_DESTINATIONを指定する場合、ファイル名のみ(drda.trcなど)を指定するか、完全修飾されたパス名を指定できます。ファイル名のみでLOG_DESTINATIONを指定すると、ログはゲートウェイのログ・ディレクトリ(ORACLE_HOME\dg4drda\trace)に書き込まれます。LOG_DESTINATIONを指定しない場合、デフォルト形式の一意のログ・ファイルが生成されます。ログ・ファイル名の形式は、次のとおりです。

gatewaysid_tid.trc

変数の意味は次のとおりです。

gateway sidは、ゲートウェイのSIDです。

tidは、ゲートウェイ・サービスのスレッド識別子(TID)です。

ログ・ファイル名の例は、次のとおりです。

drdahoa1_3875.trc

DRDAサーバーに渡されるSQL文を検索する場合、'*** HGAPARS ***'および'*** HGAXMSQL ***'という文字列を検索します。HGAPARSに続く文字列は、Oracle Database 11g RDBMSからの受信文です。HGAXMSQLに続く文字列は、日付の置換が行われた後の送信文です。これは、DRDAサーバーに送信される実際のSQL文です。

アプリケーションの開発が終了したら、listener.oraファイルのPROGRAM= valueを以前の値に戻し、本番ゲートウェイを再度使用するためにリスナーをリロードしてください。また、ゲートウェイ初期化ファイルのトレース・パラメータをコメント・アウトする必要があります。