设为首页 收藏本站
查看: 557|回复: 0

[经验分享] Oracle 11g下TNS连接报错ora

[复制链接]

尚未签到

发表于 2015-12-19 15:38:06 | 显示全部楼层 |阅读模式
 
TNS连接错误是Oracle用户经常遇到的问题。在实际工作中,由于用户终端环境的复杂,各种TNS连接问题经常困扰日常用户。操作系统版本问题、客户端服务器双重安装、多版本客户端安装、本地环境变量配置是我们经常遇到的故障场景和原因。
本篇记录一个TNS Bug引发问题的解决,记录下来,供有需要的朋友不时之需。
 
1、问题说明
 
问题是一个同事在配置连接到数据库时候,总是报错不能连接。笔者使用tnsping继续测试,发现客户端不能正确解析连接名称。
这种问题出现的最大可能,就是tnsnames.ora文件中配置格式出现问题。Oracle Net网络协议中,listener.oratnsnames.orasqlnet.ora是三个核心配置文件。三个文件保持着文本规格配置方法,是比较简单、但也容易出错的配置文件。
果然在tnsnames.ora文件中,我们发现了配置片段。
 
 
testDB =
 (DESCRIPTION =
 (ADDRESS_LIST =
 (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.xx.xx)(PORT = 1521))
)
 (CONNECT_DATA =
 (SERVICE_NAME = testdb)
)
)
 
 
这种格式显然是同事从其他地方黏贴过来的。在之前的博客文章中,我们讨论过tnsnames.ora中格式的解析规则,具体如下:
ü  本地Net名称必须顶行头书写,不能出现空格;
ü  配置信息括号中,只有最外层括号允许顶行头书写,其他括号不允许。注意:如果最外层括号顶行头书写,虽然tnsping和连接可以识别连接,但是netca配置工具不能识别,会出现配置工具hang住的情况;
根据这个思路,进行格式整理,形成如下格式:
 
 
testDB =
   (DESCRIPTION =
     (ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.xx.xx)(PORT = 1521))
)
   (CONNECT_DATA =
    (SERVICE_NAME = testdb)
)
)
 
 
之后,使用tnsping进行测试。
 
 
C:\Users\Thinkpad>tnsping testdb
 
TNS Ping Utility for 32-bit Windows: Version 11.1.0.6.0 - Production on 01-6 -
2015 14:12:27
 
Copyright (c) 1997, 2007, Oracle.  All rights reserved.
 
已使用的参数文件:
F:\app\xxx\product\11.1.0\db_1\network\admin\sqlnet.ora
 
 
已使用 TNSNAMES 适配器来解析别名
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
(HOST = 172.16.xx.xx)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = testdb)))
TNS-12532: TNS: 无效的参数
 
 
这个就有超出笔者经验的情况了。从tnsping的情况看,Oracle Net是可以正确解析出链接字符串。而且配置参数类型都是比较常见的类型,没有出现错误的概率。
最诡异的是错误提示:无效的参数。让人一时摸不到头脑。
无奈之下,笔者尝试删除掉连接内容,重新执行netca配置一个相同的连接。但是在最后测试的环节,出现相同提示错误:
 
 
正在连接...ORA-12532: TNS: 无效的参数
测试未成功。
 
您提供的一些信息可能不正确。
单击“后退”检查提供的 Net 服务名的信息, 或单击“更改登录”来更改用户名。
 
 
比较诡异的问题了。
 
2、问题分析与解决
 
数据库服务器、监听程序肯定是正常的,其他用户连接没有问题。问题根源依然是在客户端没错。根据经验:首先详细检查一下同事本地机器的配置和软件情况。
首先,发现同事安装的不是客户端程序,而是Oracle 11gR1版本服务器。
 
 
C:\Users\Thinkpad>tnsping sicsdb
 
TNS Ping Utility for 32-bit Windows: Version 11.1.0.6.0 - Production on 01-6 -
2015 14:12:27
 
 
具体版本是11.1.0.6,此外同事64位服务器上安装了32位数据库软件。根据经验,Oracle任何一个大版本发布,不到release 2的时候,是可能有很多潜在Bug出现的。另外,虽然在Windows环境下,64位操作系统可以兼容32位软件程序,但是很多底层调用是会出现问题的,更容易引起bug的出现。
按照这个思路,笔者在官方MOS网站上找到对应的文章信息:11g: TNS-12532 / ORA-12532 Reported When Firewall Is Enabled (文档>
在文章中,说明在11.1.0.6Oracle Net Services中,可能会出现ora 12532错误。标准的该错误提示内容为:
 
 
[oracle@SICS-MIGPC-DB ~]$ oerr ora 12532
12532, 00000, "TNS:invalid argument"
// *Cause:  An internal function received an invalid parameter.
// *Action: Not normally visible to the user. For further details, turn
// on tracing and reexecute the operation. If error persists, contact
// Oracle Customer Support.
 
 
这是一个很内部的错误,一般不会被普通用户看到。主要原因在于从客户端向外发送信息的时候,被防火墙或者其他原因阻塞。
这个问题已经被Oracle内部识别为一个bug,编号是6031201。出现12532错误的提示信息显然是不正确的,应该对应TNS:connection refused信息。
联系同事修改该问题,将本机的防火墙关闭,重新实验,连接成功。
 
 
C:\Users\Thinkpad>tnsping testdb
 
TNS Ping Utility for 32-bit Windows: Version 11.1.0.6.0 - Production on 01-6 -
2015 14:39:54
 
Copyright (c) 1997, 2007, Oracle.  All rights reserved.
 
已使用的参数文件:
F:\app\xxxx\product\11.1.0\db_1\network\admin\sqlnet.ora
 
 
已使用 TNSNAMES 适配器来解析别名
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
(HOST = 172.16.xx.xx)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = testdb)))
OK (10 毫秒)
 
 
故障消失。建议同事卸载低版本Oracle,安装11.2.0.4系列客户端。
 
3、结论
 
Oracle Net是官方提供的连接策略,很多朋友在配置过程中存在各种各样的问题。在实际中,不要被问题表象所迷惑,抽丝剥茧、逐步深入可以帮助我们正确的解决问题。

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-153412-1-1.html 上篇帖子: ORACLE中的EXPDP总结 下篇帖子: tnsping 可以 sqlplus 报错 ORA
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表