You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 17:47:37