PHP8.1.21版本已发布
vue8.1.21版本已发布
jquery8.1.21版本已发布

ORA-12705: Cannot access NLS data files or invalid environme

原创
2016-06-07 17:36:23 1808浏览

ant 1.8.2部署在241机器,oracle 11g部署在242机器上,今天用ant 1.8.2 通过oracle驱动向oracle 11g的环境插入数据时报下面的错误

ant 1.8.2部署在241机器,Oracle 11g部署在242机器上,今天用ant 1.8.2 通过oracle驱动向oracle 11g的环境插入数据时报下面的错误:

builddb:

BUILD FAILED
/home/build.xml:10: java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1
ORA-12705: Cannot access NLS data files or invalid environment specified

  at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
  at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
  at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:28
  at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:278)
  at oracle.jdbc.driver.T4CTTIoauthenticate.receiveOauth(T4CTTIoauthenticate.java:785)
  at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:362)
  at oracle.jdbc.driver.PhysicalConnection.(PhysicalConnection.java:414)
  at oracle.jdbc.driver.T4CConnection.(T4CConnection.java:165)
  at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35)
  at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801)
  at org.apache.tools.ant.taskdefs.JDBCTask.getConnection(JDBCTask.java:370)
  at org.apache.tools.ant.taskdefs.SQLExec.getConnection(SQLExec.java:942)
  at org.apache.tools.ant.taskdefs.SQLExec.execute(SQLExec.java:614)
  at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
  at java.lang.reflect.Method.invoke(libgcj.so.7rh)
  at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
  at org.apache.tools.ant.Task.perform(Task.java:348)
  at org.apache.tools.ant.Target.execute(Target.java:390)
  at org.apache.tools.ant.Target.performTasks(Target.java:411)
  at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
  at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
  at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
  at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
  at org.apache.tools.ant.Main.runBuild(Main.java:809)
  at org.apache.tools.ant.Main.startAnt(Main.java:217)
  at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
  at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)

Total time: 2 seconds

根据“ ORA-12705”错误号,发现很多人给出了下面的解决方案:

.检查以下变量是否设置正确(invalid environment specified)
NLS_LANG, ORA_NLSxx, or ORACLE_HOME

2.检查$ORACLE_HOME/nls/data目录中的nlb文件(NLS data files)是否损坏,可以先把文件备份,再从其他相同的环境中copy这些文件
 
解决方法1排除了,,原因是以前是好好的最近也未曾改过环境变量.
查找$ORACLE_HOME目录有了惊人的发现,让俺既是惊喜又是振奋,惊喜的是终于发现了NLS目录丢失了,振奋的是自己还有一台机器也安装有Oracle11g.  看来这年头操作系统也靠不近了,不用说copy一份过来。

 

根据上述的解决方案,检查oracle服务器(242)机器“NLS_LANG, ORA_NLSxx, or ORACLE_HOME”参数,发现前两个参数没有设置,于是设置这两个参数,设置完后,问题依旧(重启机器后仍然没有解决问题)。

于是找了第三台机器(记为243机器),在243机器上执行同样的ant脚本,发现可以正确执行。初步怀疑是241机器和243机器的环境变量不同造成的,通过env命令,比较两台机器的环境变量,发现243机器设置了java_home,而241机器没有设置java_home,于是乎快速设置java_home的值(java_home的设置参考:  )。之后,断掉以前的连接,新建一个连接,执行ant命令,数据插入成功。

总结:这里走了弯路,主要是ORA-12705的错误给人太多的错误信息了,期间尝试读过jdbc的驱动,没有发现什么特别的问题。在关键信息解决不了问题的时候,笨方法(比较法)往往还是很能凑效的。

linux

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。