从windows 平台迁移一个简单的Java系统到Linux 平台,应用服务器是Tomcat,在Linux 上安装好JDK后,直接把整个Tomcat复制到了Linux 上,然后启动都正常。但是在软件打开登录的时侯一直提示无法连接到数据库,坚持Tomcat的日志记录的信息如下:
ORA-00604: error occurred at recursive SQL level 1
java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1
ORA-12705: Cannot access NLS data files or invalid environment specified
Google 了很多资料,大多说是NLS_LANG设置的问题:
ORA-12705: "invalid or unknown NLS parameter value specified"
Cause: There are two possible causes:
- An attempt was made to issue an ALTER SESSION statement with an invalid NLS parameter or value.
- The NLS_LANG environment variable contains an invalid language, territory, or character set.
Action: Check the syntax of the ALTER SESSION command and the NLS parameter, correct the syntax and retry the statement, or specify correct values in the NLS_LANG environment variable.
可是我尝试修改这些环境变量都没用,更换JDBC的驱动版本,没用,仍然是报同样的错误,IT系统就是这样,出错的时侯一定有确定的原因,可是有时侯你就是不知道原因在哪里,只能忍受这种折磨。
后来我打算重新安装一个Tomcat版本,可是就在计划把原来的应用程序文件复制到新的Tomcat环境的时侯,发现了在原来的Catalina.sh里的一行配置:
JAVA_OPTS="-server -Dfile.encoding=GB18030 -Xms512m -Xmx1400m -Duser.language=zh_CN -Duser.timezone=Asia/Shanghai -Duser.country=CN
很明显是这里设置的时区和语言参数造成的ORA-12705错误,去掉这些参数,改成这样:
JAVA_OPTS='-Xms256m -Xmx1400m'
重启登录,一切正常。但是Windows平台上的应用也有这样的配置为什么就能正常连接同一台数据库呢?看来不只是和数据库端的设置有关,和应用服务器所在的OS也是有关的。
One Response to ORA-12705给我带来的折腾
发表评论 取消回复
技术组织
最近评论
历史归档
广告位







-Duser.language=zh_CN的影响
在eclipse里通过db explorer连接Oracle在user.language=zh_CN会出现这个错。
我以前有文章写过这个问题。