OracleデータベースOracle 10gR2で接続プールを作成しようとすると、このエラーが発生します。
Java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1
ORA-12705: Cannot access NLS data files or invalid environment specified
SqlplusとiSQLPlusクライアントを介してデータベースに接続できますが、このJavaプログラムを使用して接続しようとすると、接続プールを初期化するときにこのエラーが発生します。接続プールを初期化しません。
誰かがそれを解決するのを手伝ってくれませんか?
DBバージョン:Oracle version 10.2.0.1
OS:RHEL 4.0
データベースに接続しているときに、このエラーをスローしているJavaコードが最低限必要なコードです。
import Java.sql.*;
public class connect{
public static void main(String[] args) {
Connection con = null;
CallableStatement cstmt = null;
String url = "jdbc:Oracle:thin:@hostname:1521:Oracle";
String userName = "username";
String password = "password";
try
{
System.out.println("Registering Driver ...");
DriverManager.registerDriver (new Oracle.jdbc.driver.OracleDriver());
System.out.println("Creating Connection ...");
con = DriverManager.getConnection(url, userName, password);
System.out.println("Success!");
} catch(Exception ex) {
ex.printStackTrace(System.err);
} finally {
if(cstmt != null) try{cstmt.close();}catch(Exception _ex){}
if(con != null) try{con.close();}catch(Exception _ex){}
}
}
}
問題を解決するために、2つのパラメータをJavaアプリに渡すことができることを理解しました。
-Duser.country=en -Duser.language=en
環境変数レベルでも値を構成できます(OSによって異なります)。
import Java.util。*;
Locale.setDefault(Locale.ENGLISH); // use this for change NLS
String URL = "jdbc:Oracle:thin:@//"+khost+":"+kport+"/"+kbasename;
DriverManager.registerDriver(new Oracle.jdbc.OracleDriver());
Connection con = DriverManager.getConnection(URL,kuser,kpassword);
とは
NLS_LANG
Javaプログラムを実行しようとしているマシンでに設定しますか?まだ設定していない場合は、最初にNLS_LANGの設定を解除して、それを試してください。それが機能しない場合は、特定のデータベースの文字セットに変更して、問題が解決するかどうかを確認します。
Metalinkのドキュメント#158654.1は、この種のエラーを解決する方法を説明しています。
これは、環境内の単純なエラー($ NLS_ *環境変数を確認してください)または権限の許可($ Oracle_HOME/ocommon/nls/admin/dataに対する権限がありますか?)