この章では、エラー・メッセージおよびエラー・コードに関する情報を提供します。このデータは、Oracle Database Gateway for DRDAの11.1リリースに固有です。この章には、次の項が含まれます。
ゲートウェイ・アーキテクチャは、様々なコンポーネントで構成されています。1つ以上のDRDAデータベース表を参照するSQL文を処理するときには、どのコンポーネントでもエラー状態が検出およびレポートされる可能性があります。つまり、エラーは、複数のコンポーネントからのエラー・コードとサポート・データを含む複雑なものとなる可能性があります。ただし、すべての場合において、アプリケーションが最終的に受け取るのは単一のエラー・コードまたはリターン・コードです。
ほとんどのゲートウェイ・メッセージはOracle SQL通信領域(SQLCA)の70文字のメッセージ領域を超えるため、ゲートウェイを通じてデータにアクセスする際に使用するプログラム・インタフェースおよびOracle Call Interfaceでは、SQLGLMまたはOERHMSを使用してメッセージのテキスト全体を表示する必要があります。SQLGLMの詳細は、Oracleプリコンパイラのプログラマーズ・ガイドを参照してください。OERHMSの詳細は、『Oracle C++ Call Interfaceプログラマーズ・ガイド』を参照してください。
ゲートウェイの使用時に発生するエラーは、次のように多くのソースが原因となります。
Oracle Databaseにより検出されたエラー
ゲートウェイにより検出されたエラー
クライアント側またはサーバー側のDRDAソフトウェアで検出されたエラー
通信エラー
サーバー・データベースにより検出されたエラー
Oracle Databaseにより検出されたエラーは、ORAタイプの標準メッセージを使用してアプリケーションまたはツールにレポートされます。これらのエラーの詳細は、『Oracle Databaseエラー・メッセージ』を参照してください。たとえば、未定義のデータベース・リンク名が指定されると、次のエラーが発生します。
ORA-02019: connection description for remote database not found
ORA-9100
〜ORA-9199
の範囲のエラーは、汎用ゲートウェイ・レイヤー(DRDAに固有ではないゲートウェイのコンポーネント)用に予約されています。この範囲のメッセージは、『Oracle Databaseエラー・メッセージ』に記載されています。
汎用ゲートウェイにより検出されたエラーには、HGO-という接頭辞があります。これらのエラーは、『Oracle Databaseエラー・メッセージ』に記載されています。
エラー・メッセージの例は次のとおりです。
HGO-00706: HGO: Missing equal sign for parameter in initialization file.
クライアント側またはサーバー側のDRDAゲートウェイで検出されたエラーは、通常、エラーORA-28500
を使用してレポートされ、次にゲートウェイ固有の拡張エラー・メッセージが続きます。拡張メッセージでは、次の2つのリターン・コードがレポートされます。
drc
は、「ゲートウェイのエラー・コード」に記載されているDRDA固有のエラーを示します。
grc
は、DRDAレイヤーで検出された汎用ゲートウェイ・エラーを示します。これらのエラーは、『Oracle Databaseエラー・メッセージ』に記載されています。
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
通信エラーは、ORA-28501
を使用してレポートされ、次にネットワーク・エラーまたはセッション状態の欠落を示すdrc=-30080
またはdrc=30081
を含むゲートウェイ固有のエラー・メッセージが続きます。errmc
は、エラーが発生したネットワーク機能を示し、次にネットワーク・インタフェースに固有のエラー番号を示します。
たとえば、init
sid.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)
詳細は、ホスト・オペレーティング・システムの適切なドキュメントを参照してください。
サーバー・データベースにより検出されたエラーは、ORA-28500
を使用してレポートされ、次にdrc=-777
を含むゲートウェイ固有の拡張エラー・メッセージとsqlcodeが続きます。その次に、DRDA
サーバー・データベースから戻されたsqlcode
、sqlstate
、errd
(エラー配列)およびerrmc
(エラー・トークン)を含む別の行が続きます。使用している特定のデータベースに関するIBM社のドキュメントを参照してください。また、変換される一部のSQLエラーの詳細は、この章の「マップされたエラー」を参照してください。
注意: エラー・コードORA-28500 は、リリース8より前のゲートウェイではエラー・コードORA-09100 でした。エラー・コードORA-28501 は、リリース8より前のゲートウェイではORA-09101 としてリストされていました。 |
たとえば、次のエラー・メッセージは、init
sid.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
一部のSQLエラーは、DRDAサーバー・データベースから戻され、Oracleエラー・コードに変換されます。この処理は、Oracleインスタンスまたはゲートウェイによりエラー状態の特別な処理を提供する場合に必要です。次の表に、マップされたSQLstate
のエラー番号、説明、および対応するOracleエラー・コードを示します。
表5-1 マップされたsqlstateエラー
説明 | sqlstateエラー | Oracleエラー |
---|---|---|
行が選択されていない |
|
0 |
一意索引制約違反 |
|
|
オブジェクトが存在しない |
|
|
オブジェクト名が長すぎる(18文字を超える)ため、オブジェクトが存在しない |
|
|
不十分な権限 |
|
|
無効なCCSID(実装されていないキャラクタ・セット変換) |
|
|
無効なユーザー名またはパスワード(ログオンの拒否) |
N/A |
|
0(ゼロ)による除算エラー |
|
次の例は、変換オブジェクトが存在しないエラーです。
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
次に、拡張エラー・メッセージのdrc=
フィールドに出現するOracle Database Gateway for DRDAの共通エラー・コードを示します。ここに記載されていないdrc
値が戻された場合は、Oracleサポート・サービスに連絡してください。
init
sid.ora
ファイルのDRDA_DEFAULT_CCSID
に指定された値は、Oracle Database Gateway for DRDAでサポートされません。init
sid.ora
ファイルのLANGUAGE
パラメータに指定されたキャラクタ・セットは、サポートされません。アプリケーションを開発する場合、ゲートウェイを通じて渡される正確な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言語リファレンス』を参照してください。
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))
この変更を反映するには、リスナーをリロードする必要があります。次に、ゲートウェイ初期化ファイルを編集して次のパラメータを追加します。
オプションで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.ora
のPROGRAM
= valueを以前の値に戻し、本番ゲートウェイを再度使用するためにリスナーをリロードしてください。また、ゲートウェイ初期化ファイルのトレース・パラメータをコメント・アウトする必要があります。
Microsoft Windowsの場合:
ゲートウェイの処理速度を向上するため、本番ゲートウェイにトレース機能は組み込まれていません。
この製品には、アプリケーションのトレースおよびデバッグを目的とするデバッグ・バージョンのゲートウェイが付属しています。
このプロセスでは、次のようにlistener.oraファイルを変更してデバッグ・ゲートウェイを使用します。
ゲートウェイの管理者ユーザーIDでログインし、環境を設定します。
Oracle Net Listenerを停止します。
> lsnrctl stop
任意のテキスト・エディタでlistener.oraを編集します。
> notepad C:\Oracle\GTWHome\network\admin\listener.ora
ゲートウェイのTNSエントリを検索し、次のようにプログラムを変更します。
PROGRAM=g4drsrvd
ファイルを保存して終了します。次に、Oracle Net Listenerを再起動します。
> lsnrctl start
任意のテキスト・エディタでゲートウェイのinitsid.oraファイルを編集します。
> notepad C:\Oracle\GTWHome\dg4drda\admin\initsid.ora
次のパラメータを設定します。
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を以前の値に戻し、本番ゲートウェイを再度使用するためにリスナーをリロードしてください。また、ゲートウェイ初期化ファイルのトレース・パラメータをコメント・アウトする必要があります。