Oracle データ・ソースへのデータ・アクセスの問題

トラブルシューティングのヒントを使用して、Oracle データ・ソースへのアクセスに役立ててください。

無効な Oracle URL が指定される

このエラーは、 ターゲット・データ・ソースの URL プロパティー上で URL を誤って指定した場合に生じます。

管理コンソール内のデータ・ソース・オブジェクトの URL プロパティーを検査し、URL が正しく指定されていることを確認してください。

Oracle URL の例は、以下のとおりです。
  • シン・ドライバーの場合: jdbc:oracle:thin:@//hostname:1521/myDatabase
  • シック (OCI) ドライバーの場合: jdbc:oracle:oci:@tnsname1

「DSRA0080E: データ・ストア・アダプターが例外を受信しました。 元の例外メッセージを参照: ORA-00600」

この例外の理由として、 Oracle データベースのバージョンよりも古いバージョンの Oracle JDBC Driver が使用されていることが考えられます。 WebSphere® Application Server では、複数バージョンの Oracle JDBC Driver を構成することが可能です。

JDBC Driver のバージョンを調べてください。 これは、クラスパスを参照してドライバーが入っているディレクトリーを調べると判別できることがあります。

この方法でバージョンを判別できない場合は、以下のプログラムを使用してバージョンを判別してください。 このプログラムの実行前に、クラスパスを JDBC Driver ファイルのロケーションに設定してください。
import java.sql.*;
     import oracle.jdbc.driver.*;
     class JDBCVersion
     {
         public static void main (String args[])
         throws SQLException
         {
             // Load the Oracle JDBC driver
             DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
             // Get a connection to a database
             Connection conn = DriverManager.getConnection
             ("jdbc:oracle:thin:@appaloosa:1521:app1","sys","change_on_install");
             // Create Oracle DatabaseMetaData object
             DatabaseMetaData meta = conn.getMetaData();
             // gets driver info:
             System.out.println("JDBC driver version is " + meta.getDriverVersion());
         }
     }

ドライバーとデータベースのバージョンが異なる場合は、 JDBC Driver を正しいバージョンに置き換えてください。 複数のドライバーが構成されている場合は、 誤ったレベルのドライバーをすべて除去します。

DSRA8100E: データ・ソースから {0} を取得できません。説明: 詳しくは、linkedException を参照してください。

Oracle シン・ドライバーを使用している場合、 接続を確立する際にユーザー名またはパスワードが指定されていないと 、java.sql.SQLException: invalid arguments in call というエラーが作成されます。 WebSphere Application Server を実行中にこのエラーが表示される場合、別名が設定されていません。

この例外を除去するには、データ・ソースに別名を定義します。

「Error while trying to retrieve text for error」

このエラーの原因として可能性が高いのは、Oracle OCI ドライバーが、 設定されていないか誤って設定されている ORACLE_HOME プロパティーを指定して使用されている場合です。

このエラーを訂正するには、 WebSphere Application Server が実行されているユーザー・プロファイルを検査し、 $ORACLE_HOME 環境変数が正しく設定されていることを確認します。

クラス・ローダー・エラーは、Oracle OCI ドライバーを JDBC プロバイダーとして使用している場合に発生します。

Oracle OCI ドライバーを JDBC プロバイダーとして構成している場合は、ネイティブ・ライブラリーの保管場所へのパスを指定する必要があります。ネイティブのライブラリー・パスを指定しなかった場合、このプロバイダーを使用して最初に接続しようとしたときに、クラス・ローダー・エラーが発生します。

この問題を解決するには、管理コンソールで「リソース」 > 「JDBC」 > 「JDBC プロバイダー」をクリックして Oracle OCI ドライバーを選択し、次に「ネイティブ・ライブラリー・パス」フィールドにネイティブ・ライブラリーへのパスを指定します。

Oracle クラスの参照中、または Oracle データ・ソースへの接続中にエラー発生

Oracle クラスの参照中にエラー java.lang.NullPointerException を受け取る、 または Oracle データ・ソースへの接続中にエラー「internal error: oracle.jdbc.oci. OCIEnv」を受け取る

問題は、OCI ドライバーが AIX® マシン上で使用されており、LIBPATH は正しく設定されているが、ORACLE_HOME 環境変数が設定されていないか、誤って設定されていることであると考えられます。 アプリケーションが Oracle データ・ソースに接続しようとしているときに、 以下のいずれかに類似する例外が生じることがあります。

この問題を訂正するには、WebSphere Application Server が実行されているユーザー・プロファイルを検査し、 $ORACLE_HOME 環境変数が正しく設定されており、 $LIBPATH$ORACLE_HOME/lib が含まれていることを確認します。

WSVR0016W: Oracle JDBC Thin Driver のクラスパス入力に無効な変数があります

このエラーは、 プロパティー用に環境変数 ORACLE_JDBC_DRIVER_PATH が定義されていないときに生じます。

管理コンソールでこの問題を確認してください。 「環境」 > 「WebSphere 変数の管理」と移動して、変数 ORACLE_JDBC_DRIVER_PATH が定義されていることを確認します。

問題を解決するには、「新規」をクリックし、変数を定義します。 例えば、名前 ORACLE_JDBC_DRIVER_PATH、値 c:¥oracle¥jdbc¥lib を定義します。ojdbc6.jar ファイル (または Oracle トレースを使用可能にするための ojdbc6_g.jar ファイル) を含む、オペレーティング・システム内のディレクトリーを指定する値を使用します。

トランザクションのリカバリー失敗 (XA データ・ソース)

問題

WebSphere Application Server が Oracle データベース・トランザクションをリカバリーしようとすると、トランザクション・サービスが以下の例外を出します。
WTRN0037W: トランザクション・サービスの xa_recover 操作でエラーが発生しました。
リソースは com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl@1114a62 です。
エラー・コードは XAER_RMERR です。例外スタック・トレースは、次のとおりです:
javax.transaction.xa.XAException
at oracle.jdbc.xa.OracleXAResource.recover(OracleXAResource.java:726)
at com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl.recover(WSRdbXaResourceImpl.java:954)
at com.ibm.ws.Transaction.JTA.XARminst.recover(XARminst.java:137)
at com.ibm.ws.Transaction.JTA.XARecoveryData.recover(XARecoveryData.java:609)
at com.ibm.ws.Transaction.JTA.PartnerLogTable.recover(PartnerLogTable.java:511)
at com.ibm.ws.Transaction.JTA.RecoveryManager.resync(RecoveryManager.java:1784)
at com.ibm.ws.Transaction.JTA.RecoveryManager.run(RecoveryManager.java:2241)

原因

Oracle では、トランザクションのリカバリーを実行するための特別な権限を持つためには、WebSphere Application Server トランザクション・サービスなどのサービスが必要です。

解決策

ユーザー SYS として、Oracle サーバー上で以下のコマンドを実行します。
grant select on pending_trans$ to public;
grant select on dba_2pc_pending to public;
grant select on dba_pending_transactions to public;
grant execute on dbms_system to < user>;
user には、XA データ・ソースのトランザクション・リカバリーの実行を許可されている、アプリケーション・サーバー内のユーザー ID が入ります。トランザクション・リカバリーの実行を許可されているユーザー ID がない場合、アプリケーション・サーバーは、データ・ソースのログイン用の別名をユーザー ID として使用します。

この問題は、Oracle バグ: 3979190 で説明されています。 前記のコマンドを実行することにより、問題を解決できます。

アプリケーション・サーバーで Oracle JDBC Diagnosability MBean を登録するときに、SystemOut.log ファイルにエラーが出力される

WebSphere Application Server が Oracle データベースに接続しようとすると、SystemOut.log ファイルに以下のエラーが表示されます。
E Oracle JDBC Diagnosability MBean の登録中にエラーが発生しました。javax.management.MalformedObjectNameException: 無効文字 '' がプロパティーの値部分に含まれています (E Error while registering Oracle JDBC Diagnosability MBean. javax.management.MalformedObjectNameException: Invalid character '' in value part of property)

このエラーは、Oracle データベースへの初期接続時に発生し、発生理由は、 MBean の診断が適切に初期設定されていないことです。

このエラーは無視しても問題ありません。ただし、Oracle が提供しているパッチ番号 6362104 を適用することで、今後このエラーが発生しないようにすることができます。このパッチは、他のパッチがあると適切に動作しない可能性があるため、他のパッチを適用済みである場合は Oracle に確認してください。
注: このトピックでは、 1 つ以上のアプリケーション・サーバー・ログ・ファイルを参照します。推奨される代替案として、分散システムや IBM® i システムの SystemOut.logSystemErr.logtrace.logactivity.log ファイルではなく、High Performance Extensible Logging (HPEL) ログおよびトレース・インフラストラクチャーを使用するようにサーバーを構成できます。また HPEL は、ネイティブ z/OS® ロギング機能と連携させて使用することができます。HPEL を使用する場合、LogViewer コマンド・ライン・ツールを サーバー・プロファイルの bin ディレクトリーから使用して、すべてのログ・ファイルにアクセスし、 情報をトレースできます。HPEL の使用について詳しくは、HPEL を使用してのアプリケーションの トラブルシューティングに関する情報を参照してください。

トピックのタイプを示すアイコン 参照トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rtrb_dsaccess2
ファイル名:rtrb_dsaccess2.html