ORA-12705: Cannot access NLS data files or invalid environment specified 另類解決方案

來源:互聯網
上載者:User

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 1ORA-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_HOME2.檢查$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的驅動,沒有發現什麼特別的問題。在關鍵資訊解決不了問題的時候,笨方法(比較法)往往還是很能湊效的。

 

 

 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.