如何在Pentaho Data Integration中用多地址TNS连接Oracle数据库
PDI连接Oracle多节点TNS失败,报ORA-12504等错误
现状
已通过Oracle SQL Developer、sqlplus使用 username/password@tnsname 格式的连接字符串成功连接目标Oracle数据库,但使用Pentaho Data Integration(PDI)按照常规步骤连接时,触发错误:ORA-12504:TNS:listener was not given the SERVICE_NAME in CONNECT_DATA。
目标数据库TNS配置(tnsnames.ora)
sample_TNS.world= (DESCRIPTION= (CONNECT_TIMEOUT=5)(TRANSPORT_CONNECT_TIMEOUT=3)(RETRY_COUNT=3)(ADDRESS_LIST=(LOAD_BALANCE=off)(FAILOVER=on) (ADDRESS=(PROTOCOL=TCP)(HOST=host1.com)(PORT=38000)) (ADDRESS=(PROTOCOL=TCP)(HOST=host2.com)(PORT=38000)) (ADDRESS=(PROTOCOL=TCP)(HOST=host3.com)(PORT=38000))) (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=TEST.COM)))
已尝试的排查与连接方式
- 提取单个HOST填入PDI的「Host Name」字段,将TNS配置中等号后的全部内容复制到「Database Name」字段
- 仅保留单个HOST的ADDRESS信息填入对应字段
- 选择「Generic database」作为连接类型,留空主机和端口,在「Database Name」中填入完整服务描述
- 验证TNS配置的格式:无拼写错误、括号匹配,且该配置在其他工具可正常使用,排除格式问题
- 已成功用PDI连接本地Oracle数据库,排除驱动兼容性问题
Wireshark抓包结果
尝试1:留空主机和端口,将DESCRIPTION内容填入Database Name字段
"3DU<zE2Í%@M ¬Gô Rípÿ[TNrÞPì (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.xx.xxx.xxx)(PORT=38000)))(CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=myusername))(SERVER=DEDICATED)(SERVICE_NAME=TEST.COM)(CONNECTION_ID=xxxxxxxxxxxxx)))
尝试2:挑选单个HOST填入「Host Name」字段,将等号后全部内容填入「Database Name」字段
"3DU<zEöÍ·@K» ¬Gô Ró»pùO0çÜP…@Î(DESCRIPTION=(CONNECT_DATA=(SID=(DESCRIPTION=(CONNECT_TIMEOUT=5)(TRANSPORT_CONNECT_TIMEOUT=3)(RETRY_COUNT=3)(ADDRESS_LIST=(LOAD_BALANCE=off)(FAILOVER=on)(ADDRESS=(PROTOCOL=TCP)(HOST=host1.com)(PORT=38000)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=TEST.COM))))(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=myusername))(CONNECTION_ID=xxxxxxxxxxxxxxx))(ADDRESS=(PROTOCOL=TCP)(HOST=10.xx.xxx.xxx)(PORT=38000)))
环境信息
- 操作系统:64位Windows
- PDI版本:Pentaho Community Edition 9.3.0.0-428
- JDK版本:OpenJDK 1.8.0_352
- 驱动:ojdbc8.jar 放置于
data-integration/lib/目录下
已确认HOST域名与IP均匹配TNS配置,求正确的PDI连接配置方法。
内容的提问来源于stack exchange,提问作者anondire
相关产品推荐
相关产品推荐

