GlassFish连接池Ping失败:ORA-00604与ORA-12705错误求助
解决GlassFish连接池Ping失败(ORA-00604/ORA-12705)的问题
这个ORA-12705错误我之前帮不少开发者排查过,核心就是NLS(国家语言支持)配置不匹配或者缺失,导致GlassFish无法和Oracle数据库正确建立会话。结合你遇到的递归SQL层级错误(ORA-00604),给你几个靠谱的解决步骤:
1. 检查并设置GlassFish服务器的环境变量
Oracle的JDBC驱动依赖NLS_LANG环境变量来确定字符集和语言设置,必须和你的Oracle数据库配置匹配:
- 如果是Windows系统:找到GlassFish域的启动脚本(比如
domain1/bin/domain.bat),在开头添加一行:
(这里的set NLS_LANG=AMERICAN_AMERICA.AL32UTF8AL32UTF8要替换成你数据库实际使用的字符集,比如ZHS16GBK) - 如果是Linux/Unix系统:修改
domain1/bin/domain.sh,添加:
修改后重启GlassFish服务器。export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
2. 在GlassFish连接池里直接配置NLS属性
如果修改系统环境变量不方便,可以直接在连接池的额外属性里指定NLS参数:
- 登录GlassFish Web管理界面,依次进入:资源 > JDBC > JDBC连接池
- 选中你的
MyPool,切换到额外属性标签页 - 点击“添加属性”,输入名称
NLS_LANG,值设为和数据库匹配的字符集(比如SIMPLIFIED CHINESE_CHINA.ZHS16GBK) - 保存配置后,重新尝试Ping连接池。
3. 验证Oracle客户端的NLS配置(如果使用胖客户端)
如果你的GlassFish使用的是Oracle胖客户端(而非瘦客户端JDBC驱动),需要确保客户端的NLS配置正确:
- 检查客户端机器上的
tnsnames.ora文件,确认没有错误的NLS参数 - 确保客户端的
NLS_LANG环境变量和数据库端一致
4. 查看server.log获取更细节的错误
报错提示里提到的server.log会有更详细的递归SQL调用栈,你可以重点看:
- 递归SQL具体执行了什么操作(通常是Oracle初始化会话时的NLS相关查询)
- 是否有其他关联错误,比如权限不足导致无法读取NLS数据文件
按照这些步骤排查,基本能解决大部分NLS相关的连接池Ping失败问题。
内容的提问来源于stack exchange,提问作者Youlfey
相关产品推荐
相关产品推荐

