Oracle データ・ソースへのデータ・アクセスの問題
トラブルシューティングのヒントを使用して、Oracle データ・ソースへのアクセスに役立ててください。
Oracle 系データ・ソースにアクセスするときに、どのエラーが発生しますか?
- 無効な Oracle URL が指定される
- 「DSRA0080E: データ・ストア・アダプターが例外を受信しました。 元の例外メッセージを参照: ORA-00600」
- DSRA8100E: データ・ソースから {0} を取得できません。説明: 詳しくは、linkedException を参照してください。
- 「Error while trying to retrieve text for error」
- クラス・ローダー・エラーは、Oracle OCI ドライバーを JDBC プロバイダーとして使用している場合に発生します。
- Oracle データ・ソースに接続中に発生する「java.lang.UnsatisfiedLinkError」
- Oracle クラスの参照中、または Oracle データ・ソースへの接続中にエラー発生
- WSVR0016W: Oracle JDBC Thin Driver のクラスパス入力に無効な変数があります
- トランザクションのリカバリー失敗 (XA データ・ソース)
- アプリケーション・サーバーで Oracle JDBC Diagnosability MBean を登録するときに、SystemOut.log ファイルにエラーが出力される
無効な Oracle URL が指定される
このエラーは、 ターゲット・データ・ソースの URL プロパティー上で URL を誤って指定した場合に生じます。
管理コンソール内のデータ・ソース・オブジェクトの URL プロパティーを検査し、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 のバージョンを調べてください。 これは、クラスパスを参照してドライバーが入っているディレクトリーを調べると判別できることがあります。
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 プロバイダーとして構成している場合は、ネイティブ・ライブラリーの保管場所へのパスを指定する必要があります。ネイティブのライブラリー・パスを指定しなかった場合、このプロバイダーを使用して最初に接続しようとしたときに、クラス・ローダー・エラーが発生します。
この問題を解決するには、管理コンソールでネイティブ・ライブラリー・パス」フィールドにネイティブ・ライブラリーへのパスを指定します。
をクリックして Oracle OCI ドライバーを選択し、次に「Oracle データ・ソースに接続中に発生する「java.lang.UnsatisfiedLinkError」
データ・ソースが UnsatisfiedLinkError エラーを作成し、 問題が Oracle モジュールに関連していることを例外全体が示している場合は、 環境変数 LIBPATH が設定されていないか、誤って設定されていると考えられます。
- WebSphere Application Server が稼働しているときのユーザー・プロファイルを調べて、LIBPATH 環境変数に Oracle ライブラリーが含まれていることを確認します。
Java の LIBPATH (java.library.path) プロパティーを domain_region_libpath 環境変数で、control_region_libpath、server_region_libpath、adjunct_region_libpath のように構成します。領域 LIBPATH 変数の設定方法については、トピック『BBOM0001I メッセージで参照される変数の値の変更』を参照してください。
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 が定義されていないときに生じます。
管理コンソールでこの問題を確認してください。 ORACLE_JDBC_DRIVER_PATH が定義されていることを確認します。
と移動して、変数問題を解決するには、「新規」をクリックし、変数を定義します。 例えば、名前 ORACLE_JDBC_DRIVER_PATH、値 c:¥oracle¥jdbc¥lib を定義します。ojdbc6.jar ファイル (または Oracle トレースを使用可能にするための ojdbc6_g.jar ファイル) を含む、オペレーティング・システム内のディレクトリーを指定する値を使用します。
トランザクションのリカバリー失敗 (XA データ・ソース)
問題
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>;
user
には、XA データ・ソースのトランザクション・リカバリーの実行を許可されている、アプリケーション・サーバー内のユーザー ID が入ります。トランザクション・リカバリーの実行を許可されているユーザー
ID がない場合、アプリケーション・サーバーは、データ・ソースのログイン用の別名をユーザー ID として使用します。この問題は、Oracle バグ: 3979190 で説明されています。 前記のコマンドを実行することにより、問題を解決できます。
アプリケーション・サーバーで Oracle JDBC Diagnosability MBean を登録するときに、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 の診断が適切に初期設定されていないことです。