Navigatorを利用中にOracleでエラーが発生した場合、Navigatorが出力するエラーメッセージから原因を調査し必要な対処を行います。
原因および対処方法が分からない場合、Navigatorのログファイルの情報とOracleのSQL*Plusユーティリティを使用して事象を再現させることで原因を調査することができます。特にOracleの環境上の異常が原因でNavigator利用時にエラーが発生した場合などに有効です。
なお、NavigatorとSQL*PlusではOracleのSQLを実行するための内部処理が異なっているため、Navigatorから実行するとエラーが発生し、SQL*Plusなどのユーティリティから実行するとエラーが発生しない場合もあります。
エラー情報の採取方法
Oracleを利用している環境でトラブルが発生した場合、エラー情報などのファイルへの出力を行います。エラー情報などのファイルへの出力は、以下のように行います。
1.環境設定ファイルの設定
Navigatorの環境設定ファイルに以下の環境変数を設定します。
RN_LOG_DIRECTORY=<ディレクトリ名> |
各環境変数について、説明します。
RN_LOG_DIRECTORY=<ディレクトリ名> |
情報を出力するディレクトリを指定します。
<ディレクトリ名>に指定するディレクトリについて、以下のことをあらかじめ確認してください。
指定するディレクトリが存在している
指定するディレクトリへの書き込みが可能
指定するディレクトリに空き容量がある
設定例:
RN_LOG_DIRECTORY=f:\temp (Windowsサーバの場合) |
RN_LOG_DIRECTORY=/tmp (UNIXの場合) |
RN_LOG_WARNING=YES |
ワーニング/エラー情報を出力できます。この情報には、Oracleエラー情報などが出力されます。
2.Navigatorサーバの再接続
Navigatorの環境設定ファイルに設定した内容は、Navigatorサーバを接続したときに有効になります。Navigatorサーバが接続中のときは、一度接続を切断してから接続します。
3.事象の再現
トラブルが発生した事象を再現します。
同一のユーザ名を複数同時利用している場合、情報が正しく出力されません。同一のユーザ名を複数同時利用しない状態で、事象の再現を行ってください。
4.ファイルの確認
環境変数RN_LOG_DIRECTORYに指定したディレクトリに、以下の名前でエラー情報を出力するファイルが作成されます。
KvrcW_<ユーザ名>.log |
<ユーザ名>の部分はNavigatorのユーザ名です。
例:ユーザ名がnaviadmの場合、ファイル名は以下の名前になります。
KvrcW_naviadm.log |
5.環境変数を戻す
作業1.で指定した環境変数RN_LOG_DIRECTORYとRN_LOG_WARNINGの指定を削除します。
指定した状態でNavigatorを利用すると常にログが採取され、ファイルシステムの圧迫やレスポンスの低下を招くことがありますので必ず削除してください。
Oracleトラブルの原因と対処の究明方法
採取したエラー情報から、Oracleのエラーを検出し、原因と対処を究明する方法について説明します。
1.Oracleエラーの検出
Oracleのエラーがあった場合、OracleのエラーメッセージとエラーとなったSQL文は一緒に出力されます。
エラー情報を採取したファイルから、OracleのエラーメッセージとエラーとなったSQL文を探します。
通常、Oracleのエラーは、ファイルの最後の方にあります。ファイルに多数の情報がある場合、文字列「JVQORACL」をキーにして検索してください。
以下に出力例を示します。
<< DASH >> |
この場合、Oracleのエラーメッセージは以下になります。
ORA-00942: 表またはビューが存在しません。 |
この場合、エラーとなったSQL文は以下になります。
SELECT MAX(JVRX.ECODE) FROM JOHOSYS.DHKAMKSF JVRX |
2.Oracleエラーの再現による原因や対処の究明
エラーとなったSQL文をSQL*PlusなどのOracleのユーティリティで実行することにより、Oracleの詳細なエラーを確認することができます。このOracleのエラーから、原因を取り除きます。
SQL*Plusを実行する場合、Navigatorサーバが存在するサーバ上のSQL*Plusを使用してください。
なお、再現させるときに使用するOSのユーザ(エンタープライズ認証の場合は実効ユーザ)とOracleのユーザは、Navigatorを使用する際に指定したユーザと同じにしてください。
SQL*Plusを使用した再現例を以下に示します。
例 | 説明 |
---|---|
ユーザ名を入力してください:KVRG00000BB8 | 接続するときのユーザはNavigatorを利用するときのユーザ名(KVRGで始まるユーザ)で接続します。 |
SQL>ALTER SESSION SET SQL_TRACE=true; | Oracleのトレース情報が出力されるようにします。 |
SQL>ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'; | 日付の書式を設定します。環境変数RN_ORACLE_DATETYPEの値を2で運用している場合は、 |
SQL>SELECT MAX(JVRX.ECODE) FROM JOHOSYS.DHKAMKSF JVRX; | エラーとなったSQL文を実行します。 |
* |
|
エラー行: 1: エラーが発生しました。 | OracleからエラーとなったSQL文のエラーメッセージが表示されます。 |
例 | 説明 |
---|---|
ユーザ名を入力してください:KVRG00000BB8 | 接続するときのユーザはNavigatorを利用するときのユーザ名(KVRGで始まるユーザ)で接続します。 |
SQL>ALTER SESSION SET SQL_TRACE=true; | Oracleのトレース情報が出力されるようにします。 |
SQL>ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'; | 日付の書式を設定します。環境変数RN_ORACLE_DATETYPEの値を2で運用している場合は、 |
SQL>SELECT SUM(JVRX.期首資産価格圧縮前),SUM(JVRX.期首資産価格圧縮後)... | エラーとなったSQL文を実行します。 |
* |
|
エラー行: 1: エラーが発生しました。 | OracleからエラーとなったSQL文とエラーメッセージが表示されます。 |