WebSphere Application Server, Version 6.0.x   
             オペレーティング・システム: AIX , HP-UX, Linux, Solaris, Windows

             目次と検索結果のパーソナライズ化

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

この項目では、Oracle データ・ソースにアクセスする際のトラブルシューティングのヒントを提供しています。

Oracle 系データ・ソースにアクセスするときにどのようなエラーが発生しますか

無効な Oracle URL が指定される

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

管理コンソール内のデータ・ソース・オブジェクトの URL プロパティーを検査してください。 8i OCI ドライバーの場合、oci8 が URL で使用されていることを確認してください。 9i OCI ドライバーの場合は、oci8 または oci のいずれかを使用できます。

Oracle URL の例は、以下のとおりです。
  • シン・ドライバーの場合: jdbc:oracle:thin:@hostname.rchland.ibm.com:1521:IBM
  • シック (OCI) ドライバーの場合: jdbc:oracle:oci8:@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: DataSource から {0} を取得できません。説明: 詳しくは、linkedException を参照してください。

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

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

Oracle データ・ソースに接続中の "Error while trying to retrieve text for error" エラー。

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

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

Oracle データ・ソースに接続中に発生する、8i クラスを参照している java.lang.NullPointerException、または " internal error: oracle.jdbc.oci8. OCIEnv"。

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

java.lang.NullPointerException 例外の例は、次のようになります。
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)
java.sql.SQLException 例外の例は、次のようになります。
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 が含まれていることを確認します。

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

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

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

問題を解決するには、「新規」をクリックし、変数を定義します。 例えば、名前 ORACLE_JDBC_DRIVER_PATH、値 c:¥oracle¥jdbc¥lib を定義します。 ojdbc14.jar ファイル (または、Oracle トレースを使用可能にするための ojdbc14_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>;
この問題は、Oracle バグ: 3979190 で説明されています。 前記のコマンドを実行することにより、問題を解決できます。



関連概念
welc6toptroubleshooting.html
関連タスク
データ・アクセス・アプリケーションの開発
例: CMP Bean と BMP Bean 間の接続を共用するための IBM 拡張 API の使用
関連資料
データ・アクセスの問題
データ・アクセスの問題 - DB2 データベース
データ・アクセスの問題 - SQL サーバー・データ・ソース
データ・アクセスの問題 - Cloudscape データベース
データ・アクセスの問題 - Sybase データ・ソース
データ・アクセス API に対する拡張機能
参照トピック    

ご利用条件 | フィードバック

最終更新: Jan 22, 2008 12:07:38 AM EST
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/index.jsp?topic=/com.ibm.websphere.base.doc/info/aes/ae/rtrb_dsaccess2.html