程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> ORA-12705:CannotaccessNLSdatafilesorinvalidenvironmentspecified另類解決方案

ORA-12705:CannotaccessNLSdatafilesorinvalidenvironmentspecified另類解決方案

編輯:Oracle教程

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.<init>(PhysicalConnection.java:414)
   at oracle.jdbc.driver.T4CConnection.<init>(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的設置參考:http://blog.csdn.net/wgw335363240/article/details/22079311)。之後,斷掉以前的連接,新建一個連接,執行ant命令,數據插入成功。

總結:這裡走了彎路,主要是ORA-12705的錯誤給人太多的錯誤信息了,期間嘗試讀過jdbc的驅動,沒有發現什麼特別的問題。在關鍵信息解決不了問題的時候,笨方法(比較法)往往還是很能湊效的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved