Grails连接Oracle自治数据库报Unknown host specified错误咨询
Grails连接Oracle自治数据库报Unknown host错误解决
问题描述
需要将Grails服务连接Oracle自治数据库,使用如下dataSource配置时:
dataSource { dbCreate = "none" driverClassName = "oracle.jdbc.OracleDriver" url = "jdbc:oracle:thin:@//tns_name?TNS_ADMIN=/home/wallet" username = "username" password = "password" schema = "" dialect = "com.flosslab.egrocery.dialect.Oracle10gDialectExtended" properties { .... } }
持续抛出报错:
java.sql.SQLRecoverableException: IO Error: Unknown host specified
将wallet文件夹放到$ORACLE_HOME/network/admin路径下,执行sqlplus username/password@tns_name命令时,sqlplus可以正常连接数据库,需要确认dataSource配置是否存在遗漏项。
问题根因
你写的JDBC URL格式错误:@//开头的连接串是Oracle JDBC的EZConnect直连格式,这种格式下JDBC驱动会把后面的tns_name当成实际的主机地址去解析,不会读取tnsnames.ora里配置的TNS别名映射,自然会报未知主机的错误。而你用sqlplus能正常连接,是因为sqlplus默认会从$ORACLE_HOME/network/admin路径下读取tnsnames.ora解析别名,走的不是EZConnect模式。
修复方法
把JDBC URL里的双斜杠去掉,改成TNS别名连接格式即可:
url = "jdbc:oracle:thin:@tns_name?TNS_ADMIN=/home/wallet"
额外校验项
改完如果还是连不上,逐一检查以下几点:
- 运行Grails进程的系统用户,对
/home/wallet目录及目录下所有文件(tnsnames.ora、cwallet.sso、ojdbc.properties等)必须有可读权限 - 项目引入的Oracle JDBC驱动(ojdbc8)版本不能低于12.2.0.1,低版本驱动不支持自治数据库wallet的TNS_ADMIN加载方式
- 如果不想把TNS_ADMIN路径写在配置里,也可以在Grails启动的JVM参数里添加
-Doracle.net.tns_admin=/home/wallet,效果和URL中传参一致
内容的提问来源于stack exchange,提问作者joe1531
相关产品推荐
相关产品推荐

