SQLPlus:TNS格式与常规连接参数的差异及连接失败问题
SQLPlus两种连接方式的差异及连接失败排查
两种SQLPlus连接方式的核心差异
1. 完整TNS描述符连接
这种方式直接传递完整的Oracle网络连接参数,无需依赖本地tnsnames.ora配置:
sqlplus user/pass@"(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.70.44.28)(PORT=1521)))(CONNECT_DATA=(SID=mdm)(SERVER=DEDICATED)))"
- 特点:参数完全明确,指定了TCP协议、目标IP/端口、SID、服务器模式(DEDICATED),客户端直接按配置建立连接,无额外解析逻辑。
2. 简易EZCONNECT格式连接
这是Oracle提供的简化连接语法,省略了完整TNS结构:
sqlplus user/pass@10.70.44.28:1521:mdm
- 特点:客户端会自动将该字符串解析为TNS描述,但解析过程中会触发反向DNS查询(即使输入的是IP地址),依赖客户端的DNS或本地hosts配置。
连接失败原因分析
简易格式连接失败(报错ORA-12545)的核心原因在于跟踪日志中的nttbnd2addr: *** hostname lookup failure! ***:
- 简易EZCONNECT格式的解析逻辑:Oracle客户端会尝试对输入的IP地址执行反向DNS解析,获取对应的主机名,若本地DNS服务器无法完成反向解析,或客户端未配置正确的hosts映射,就会触发主机名查找失败,最终返回
ORA-12545(目标主机或对象不存在)。 - 完整TNS描述符连接无此问题:因为该方式明确指定
HOST=10.70.44.28,客户端直接使用IP建立TCP连接,不会触发反向DNS查询,因此能正常连接。
解决方法
- 继续使用完整TNS描述符连接(已验证可行)
- 禁用客户端反向DNS解析:在Oracle客户端的
sqlnet.ora文件中添加以下配置:
该参数会阻止客户端对IP地址执行反向DNS查询,修复EZCONNECT格式的连接问题。SQLNET.NO_DNS=ON - 配置本地hosts映射:在客户端机器的
hosts文件中添加目标IP与任意主机名的映射(例如10.70.44.28 oracle-mdm),确保反向解析能成功。
内容的提问来源于stack exchange,提问作者ValeryC
相关产品推荐
相关产品推荐

