この項目では、Oracle データ・ソースにアクセスする際のトラブルシューティングのヒントを提供しています。
このエラーは、 ターゲット・データ・ソースの URL プロパティー上で URL を誤って指定した場合に生じます。
管理コンソール内のデータ・ソース・オブジェクトの URL プロパティーを検査してください。 8i OCI ドライバーの場合、oci8 が URL で使用されていることを確認してください。 9i OCI ドライバーの場合は、oci8 または oci のいずれかを使用できます。
この例外の理由として、 Oracle データベースのバージョンよりも古いバージョンの Oracle JDBC Driver が使用されていることが考えられます。 WebSphere Application Server では、 複数バージョンの Oracle 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 を正しいバージョンに置き換えてください。 複数のドライバーが構成されている場合は、 誤ったレベルのドライバーをすべて除去します。
Oracle シン・ドライバーを使用している場合、 接続を確立する際にユーザー名またはパスワードが指定されていないと 、"java.sql.SQLException: invalid arguments in call" というエラーが作成されます。 WebSphere Application Server を実行中にこのエラーが表示される場合、別名が設定されていません。
この例外を除去するには、データ・ソースに別名を定義します。
このエラーの原因として最も可能性が高いのは、Oracle 8i OCI ドライバーが、 設定されていないか誤って設定されている ORACLE_HOME プロパティーを指定して使用されている場合です。
このエラーを解決するには、 WebSphere Application Server が実行されているユーザー・プロファイルを検査し、 $ORACLE_HOME 環境変数が正しく設定されていることを確認します。
以下の例のように、 データ・ソースが UnsatisfiedLinkError エラーを作成し、 問題が Oracle モジュールに関連していることを例外全体が示している場合は、 環境変数 LIBPATH が設定されていないか、誤って設定されていると考えられます。
Exception in thread "main" java.lang.UnsatisfiedLinkError: /usr/WebSphere/AppServer/java/jre/bin/libocijdbc8.so: load ENOENT on shared library(s) /usr/WebSphere/AppServer/java/jre/bin/libocijdbc8.so libclntsh.a
Exception in thread "main" java.lang.UnsatisfiedLinkError: no ocijdbc9 (libocijdbc9.a or .so) in java.library.path at java.lang.ClassLoader.loadLibrary(ClassLoader.java(Compiled Code)) at java.lang.Runtime.loadLibrary0(Runtime.java:780)
この問題を解決するには、WebSphere Application Server の稼働時に使用されているユーザー・プロファイルを調べて、LIBPATH 環境変数に Oracle ライブラリーが含まれていることを確認します。 正しいディレクトリーを見つけるには、lobocijdbc8.so ファイルをスキャンします。
問題は、9i OCI ドライバーが AIX 32 ビット・マシン上で使用されており、LIBPATH は正しく設定されているが 、ORACLE_HOME 環境変数が設定されていないか、誤って設定されていることであると考えられます。 アプリケーションが Oracle データ・ソースに接続しようとしているときに、 以下のいずれかに類似する例外が生じることがあります。
Exception in thread "main" java.lang.NullPointerException at oracle.jdbc.oci8.OCIDBAccess.check_error(OCIDBAccess.java:1743) at oracle.jdbc.oci8.OCIEnv.getEnvHandle(OCIEnv.java:69) at oracle.jdbc.oci8.OCIDBAccess.logon(OCIDBAccess.java:452) at oracle.jdbc.driver.OracleConnection. <init>(OracleConnection.java:287)
Exception in thread "main" java.sql.SQLException: internal error: oracle.jdbc.oci8. OCIEnv@568b1d21 at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:184) at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:226) at oracle.jdbc.oci8.OCIEnv.getEnvHandle(OCIEnv.java:79)
この問題を解決するには、WebSphere Application Server が実行されているユーザー・プロファイルを検査し、 $ORACLE_HOME 環境変数が正しく設定されており、 $LIBPATH に $ORACLE_HOME/lib が含まれていることを確認します。
このエラーは、 プロパティー用に環境変数 ORACLE_JDBC_DRIVER_PATH が定義されていないときに生じます。
管理コンソールでこの問題を確認してください。 「環境」>「WebSphere 変数の管理」と移動して、 変数 ORACLE_JDBC_DRIVER_PATH が定義されているかどうか調べます。
問題を解決するには、「新規」をクリックし、変数を定義します。 例えば、名前 ORACLE_JDBC_DRIVER_PATH、値 c:¥oracle¥jdbc¥lib を定義します。 ojdbc14.jar ファイル (または、Oracle トレースを使用可能にするための ojdbc14_g.jar ファイル) を含むオペレーティング・システム中のディレクトリーを指定する値を使用します。
問題
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 トランザクション・サービスなどのサービスが必要です。
解決策
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>;この問題は、Oracle バグ: 3979190 で説明されています。 前記のコマンドを実行することにより、問題を解決できます。