ORA-00604 ORA-12705

时间:2009-10-27 07:59:10

标签: oracle java-ee nls ora-12705

我在j2ee网络应用程序中遇到此错误。

java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1
ORA-12705: Cannot access NLS data files or invalid environment specified

 oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:145)
 oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
 oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:283)
 oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:278)
 oracle.jdbc.driver.T4CTTIoauthenticate.receiveOauth(T4CTTIoauthenticate.java:785)
 oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:376)
 oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:441)
 oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165)
 oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35)
 oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:839)
 java.sql.DriverManager.getConnection(Unknown Source)
 java.sql.DriverManager.getConnection(Unknown Source)
 org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:133)
 org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
 org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)
 org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:142)
 org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85)
 org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1353)


 org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85)
 org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1353)

这个项目在我同事的电脑上运行......我的意思是这个项目对他们有用但是当我要求他们的项目文件夹并将其导入我的日食时,当我运行它时我遇到了这个错误。 jar文件已与项目文件夹一起打包。

我还使用hibernate创建了一个简单的j2ee项目,但我遇到了同样的错误。 我试图ping数据库服务器并使用PL / SQL开发人员浏览它,我没有任何问题

11 个答案:

答案 0 :(得分:5)

请尝试以下操作:

  1. 检查NLS_LANG设置是否正确。在Windows上,它位于\HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE下的注册表中。
  2. 检查是否正确安装了Oracle客户端软件。
  3. 检查该计算机上是否有多个Oracle主目录。在这种情况下,找到活动的并检查它是否有效。
  4. 如果安装了SQL * Plus,请使用SQL * Plus进行测试。 Sql Developer的工作原理是因为它有自己的客户端安装。
  5. 修改
    关于驱动程序,请查看此站点:Oracle Instant Client。在那里,您将找到有关JDBC访问Oracle所需的最小驱动程序安装的文档。我对此并不了解,因为我使用.Net。

    编辑2:
    请参阅此问题:NLS_LANG setting for JDBC thin driver。您遇到了同样的错误,问题是未定义NLS LANG的默认语言环境。引用:

      

    NLS_LANG设置派生自java.util.Locale。因此,在连接之前,您需要进行类似的调用:

      Locale.setDefault(Locale.<your locale here>);
    

答案 1 :(得分:5)

我发现您可以将这两个参数传递给Java应用程序来解决问题:

-Duser.country=en -Duser.language=en

您也可以在环境变量级别配置值(取决于您的操作系统)。

答案 2 :(得分:4)

对于Windows环境,您需要将系统区域设置和System Format更改为English/US

How to change system locale?

答案 3 :(得分:3)

我遇到了同样的问题。解决方案是将国家/地区和语言添加到sqldeveloper.conf

请打开文件:

\sqldeveloper\sqldeveloper\bin\sqldeveloper.conf

并添加以下内容:

AddVMOption -Duser.language=en
AddVMOption -Duser.region=us

以上就是诀窍。

参考:http://forum.oradba.net/showthread.php?t=423&langid=1

答案 4 :(得分:1)

我找到了解决方案,我只是更改了操作系统中的区域和语言(Windows 7),确保它与oracle区域和语言匹配。

答案 5 :(得分:0)

Oracle JDBC驱动程序在打开新连接后隐式执行以下语句:

ALTER SESSION SET NLS_LANGUAGE='language' NLS_TERRITORY='territory'

在我们的案例中,我们遇到了Oracle XE 11g和嵌入JDBC驱动程序的默认语言/区域映射问题:'ru'语言环境映射到'CIS'区域,只有Oracle EE支持,但Oracle XE有'RUSSIA'仅限领土。 以下是我们修复此问题的方法:

-Doracle.jdbc.territoryMap="ru=RUSSIA;RU=RUSSIA"

NLS_LANGUAGE有选项(默认设置没有问题):

-Doracle.jdbc.languageMap="ru=RUSSIAN;RU=RUSSIAN"

修正:常量 ru = RUSSIAN 取自java jdbc驱动程序的类oracle.sql.converter.CharacterSetMetaData。

答案 6 :(得分:0)

首先执行查询:

select userenv('LANGUAGE') from dual;`

这将给oracle区域和语言。更改操作系统中的区域和语言,两者都应匹配。

答案 7 :(得分:0)

检查JAVA_HOME系统变量,并验证其与项目和程序中使用的版本是否相同

答案 8 :(得分:0)

如果使用intelljIDE进行编译,建议您在配置模型中的VMoptions中添加以下选项

AddVMOption -Duser.region=us. 

答案 9 :(得分:0)

更改机器的区域设置和语言有助于解决此问题。 我将地区更改为美国和英语(美国)作为语言。

答案 10 :(得分:0)

如果你正在运行一个 spring 应用程序,只需添加 Locale.setDefault(Locale.ENGLISH);在主班。

public static void main(String[] args) throws Exception
{
    Locale.setDefault(Locale.ENGLISH);
    SpringApplication.run(ApplicationName.class, args);



}