ORA-00604 ORA-12705
Posted
技术标签:
【中文标题】ORA-00604 ORA-12705【英文标题】: 【发布时间】:2009-10-27 07:59:10 【问题描述】:我的 j2ee Web 应用程序出现此错误。
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)
这个项目可以在我同事的电脑上运行...我的意思是这个项目适用于他们,但是当我询问他们的项目文件夹并将其导入到我的 Eclipse 中时,当我运行它时遇到了这个错误。 jar 文件已经打包在项目文件夹中。
我还使用 hibernate 创建了一个简单的 j2ee 项目,但我遇到了同样的错误。 我尝试 ping 数据库服务器并使用 PL/SQL 开发人员浏览它,我没有任何问题
【问题讨论】:
【参考方案1】:尝试以下操作:
-
检查 NLS_LANG 设置是否正确。在 Windows 上,它位于
\HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE
下的注册表中。
检查是否正确安装了 Oracle 客户端软件。
检查该计算机上是否有多个 Oracle 主目录。在这种情况下,找到活动的并检查它是否有效。
如果安装了 SQL*Plus,则使用 SQL*Plus 进行测试。 Sql Developer 可以工作,因为它有自己的客户端安装。
编辑: 关于驱动程序,请查看此站点: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>);
【讨论】:
我是否必须为我的 Web 应用程序安装 Oracle 客户端才能连接?我以为我只需要包含在我的项目中的 odbc 驱动程序 jar。【参考方案2】:我发现您可以将这两个参数传递给您的 Java 应用程序来解决问题:
-Duser.country=en -Duser.language=en
您也可以在环境变量级别配置值(取决于您的操作系统)。
【讨论】:
【参考方案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
【讨论】:
为我工作。但那是火箭科学……我的意思是我怎么猜…… 你是州长哈哈,2小时后非常感谢你! 你拯救了我的一天。【参考方案4】:对于 Windows 环境,您需要将 System Locale 和 System Format
更改为 English/US
。
How to change system locale?
【讨论】:
【参考方案5】:我找到了解决方案,我只是在我的操作系统(Windows 7)中更改区域和语言,确保它与 oracle 区域和语言匹配。
【讨论】:
【参考方案6】:Oracle JDBC驱动在打开新连接后隐式执行以下语句:
ALTER SESSION SET NLS_LANGUAGE='language' NLS_TERRITORY='territory'
在我们的案例中,我们遇到了 Oracle XE 11g 和嵌入 JDBC 驱动程序的默认语言/区域映射的问题:“ru”语言环境被映射到仅受 Oracle EE 支持的“CIS”区域,但 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 类。
【讨论】:
感谢您的回答!就我而言,是System.setProperty("oracle.jdbc.territoryMap", "ru=RUSSIA;RU=CIS");
分配解决了这个问题(对于旧的 Oracle9i)。【参考方案7】:
如果您使用 intelljIDE 进行编译,我建议您在配置模型中找到的 VMoptions 中添加以下选项
AddVMOption -Duser.region=us.
【讨论】:
【参考方案8】:首先执行查询:
select userenv('LANGUAGE') from dual;`
这会给oracle区域和语言。更改操作系统中的区域和语言,两者都应该匹配。
【讨论】:
【参考方案9】:检查 JAVA_HOME 系统变量并确认它与您在项目和程序中使用的版本相同
【讨论】:
您应该提供有关此变量的更多信息:在哪里可以找到它?它到底有什么作用?等等【参考方案10】:更改我机器的区域设置和语言有助于解决这个问题。 我将地区更改为美国和英语(美国)作为语言。
【讨论】:
【参考方案11】:如果您正在运行 Spring 应用程序,只需添加 Locale.setDefault(Locale.ENGLISH);在主课上。
public static void main(String[] args) throws Exception
Locale.setDefault(Locale.ENGLISH);
SpringApplication.run(ApplicationName.class, args);
【讨论】:
以上是关于ORA-00604 ORA-12705的主要内容,如果未能解决你的问题,请参考以下文章
myeclipse6.0 连接oracle10g的问题 ORA-00604,ORA-12705