TNS-12560的一次解决

公司客户服务部后台数据库出现TNS-12560问题,服务器托管在电信IDC中心。作者前往解决,先检查服务启动情况,发现listener.ora配置有问题,重新配置。之后又对tnsnames.ora、sqlnet.ora等文件进行检查和修改,重建密码文件,最终解决问题,客户端也可正常连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  TNS-12560的一次解决

昨天我们公司客户服务部的一个后台数据库出现TNS-12560问题,他们的WEB维护人员搞了两天没搞定,后来打电话要我去帮他搞.刚开始以为服务器就放在我们公司,我就答应他帮他搞定,后来等我去他们部门的时候他才跟我说服务器是托管在电信的IDC中心.想着不去了的,可是看他挺可怜的(他们经理天天吹,搞不定就辞掉他).等我到了电信的IDC中心后,我后悔了,TMD,里面的服务多的数不清,可见那种辐射有多强,我就在里面呆了一个多小时,出来了以后我头狂晕,受不了!

   回归正题,让我们看看TNS-12560错误这次的解决.这个错误相信经常有人碰到,一般也都知道怎么回事.只是如果出现这个错误而之前先由一个不懂的人看了论坛里或者查的一些资料乱改一些东东以后又在自己去看的时候没有注意到他改的所有的东东,这下有得受了(辐射太强).

    OS:WINDOWS 2000 ADS.DB:ORACLE 8.1.7

   首先我看的是服务启动没有.-------已启动

   再看listener.ora的配置.-----有问题,没有配置监听数据库.在这里出现问题我就用NET8重新配置了一下listener.先删除原来的LISTENER.然后重新创建一个.记得配置数据库服务这一块.重新启动服务,可以启动.

   CONN SYS/ORACLE AS SYSDBA.--------还是出现错误.跟着查看tnsnames.ora.没有发现问题.我又试着用conn sys/oracle@oracle as sysdba.不行,权限不足.再用conn system/oracle@oracle 还是不行,有错误.(没有记下错误号),然后接着查看sqlnet.ora.有问题,里面配置了一个参数ONAME(记不清).我将这一行注释掉.并修改了一下NAMES.DIRECTORY_PATH的顺序TNSNAMES, HOSTNAME, ONAMES.然后再用conn sys/oracle@oracle as sysdba.还是不行错误的用户名(那个人改了密码事先没说).再用conn system/oracle@oracle as sysdba.OK.我就奇怪了,怎么用system可以,而用sys不行呢?想到了可能是用密码文件认证方式了.remote_login_passwordfile=EXCLUSIVE.然后重建密码文件.orapwd file=pwdoracle.ora password=oracle entries=10.然后再conn sys/oracle@oracle as sysdba.OK.可以进.

   再试客户端.conn system/oracle@oracle as sysdba.不行.配置sqlnet.oratnsnames.ora.修改成跟服务器端一样.OK.可以进.

  说明一点,上面的再配置listener.ora,tnsnames.ora,sqlnet.ora文件之后最好重启一下服务.

TNS-12541: TNS: 无监听程序 TNS-12560: TNS: 协议适配器错误 TNS-00511: 无监听程序 文章转自:http://www.luocs.com/archives/464.html 此文版权归作者 – yaogang所有,转载请注明yaogang©www.luocs.com。 Luocs说:这是我一个朋友的一个监听器问题解决案例,这是昨天发生的事情,我一直跟朋友一起Troubleshooting,折腾了半天最后是BUG所致。再次汗颜,Windows平台惹不起啊!好,那么下面开始分享我朋友的案例! 环境描述: OS : Windows Server 2008 64Bit (做了HA) DB : 11.1.0.7.0 排错过程: 前天应用不能访问数据库了 (后台应用能访问数据库),故障发生。 马上登录到服务器里查看监听状态,发现有TNS-12541 ,TNS-12560等错误 Luocs补充:我跟朋友要了错误代码,但他没有保存,就直接贴图。 从计算器的管理 –> 服务选项 –> 检查oracle 监听服务程序,发现该服务已经停止。 手动把监听服务启动,这时候服务状态上显示为已启动,但在CMD窗口执行lsnrctl status的时候依然返回错误信息: C:\>lsnrctl status LSNRCTL for 64-bit Windows: Version 11.1.0.7.0 - Production on 12-11月-2012 18:1 8:32 Copyright (c) 1991, 2008, Oracle. All rights reserved. 正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.10.203.218)(PORT=1521))) TNS-12541: TNS: 无监听程序 TNS-12560: TNS: 协议适配器错误 TNS-00511: 无监听程序 64-bit Windows Error: 61: Unknown error 正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))) 过段时间回显非常慢。 然后我检查了下告警日志,大量的ora错误 Fatal NI connect error 12170. VERSION INFORMATION: TNS for 64-bit Windows: Version 11.1.0.7.0 - Production Oracle Bequeath NT Protocol Adapter for 64-bit Windows: Version 11.1.0.7.0 - Production Windows NT TCP/IP NT Protocol Adapter for 64-bit Windows: Version 11.1.0.7.0 - Production Time: 12-11月-2012 15:23:33 Tracing not turned on. Tns error struct: ns main err code: 12535 TNS-12535: TNS: 操作超时 ns secondary err code: 12560 nt main err code: 0 nt secondary err code: 0 nt OS err code: 0 Client address: ORA-609 : opiodr aborting process unknown ospid (4116_6104) 这时候朋友怀疑是不是监听器配置问题,就把原先的监听器删除重建了下,问题依然。 网上有个解决TNS-12535错误的案例,平台和版本都很类似,如下: 1、在 sqlnet.ora文件中 增加如下行: DIAG_ADR_ENABLED = OFF 2、在listener.ora文件中增加如下行: DIAG_ADR_ENABLED_ = OFF 如何监听是listener时,则前面的名称为:DIAG_ADR_ENABLED_LISTENER = OFF 3、重新启动windows服务管理中的监听程序.先停止,然后再重新启动. 4、检查结果.发现可以了,返回的值在10毫秒.有时为0毫秒.成功!! 但这并不是问题发生原因,在继续排查过程中偶然发现监听日志大小居然为4G。然后把这现象告诉了Luocs。 过了一会儿,Luocs回应是Oracle一个BUG,BUG号为9879101 : THE CONNECT THROUGH LISTENER WAS SLOW WHEN LISTNER LOG GROWED 4GB。 Luocs还提供了MOS上一篇文章,ID 1319797.1 : WINDOWS: Listener Hangs & Lsnrctl Commands Are Slow or Hang,里面给出了解决方法: You can solve this problem by deleting the large listener in $ORACLE_BASE\diag\tnslsnr\\listener\trace\.log 1) Stop the listener process using the command line or Control Panel Service. 2) Delete the log file(s) that are at or approaching the 4G size limit at this location: $ORACLE_BASE\diag\tnslsnr\\listener\trace\.log 3) Issue any lsnrctl command and you will see a new listener.log in its place under: $ORACLE_BASE\diag\tnslsnr\\listener\trace\ Since ADR Diagnostics are enabled for this listener these steps cannot be done dynamically using the lsnrctl utility. e.g. LSNRCTL>set log_file mylog Will yield: TNS-01251: Cannot set trace/log directory under ADR. However, it is possible to disable the flat file listener logging using the following commands: LSNRCTL>set current_listener LSNRCTL>set log_status OFF LSNRCTL>save_config 我就按照以上说明如下进行: 1)LSNRCTL进入交互模式 2)执行set current_listener LISTENER 3)set log_status off 4)stop 停止监听器 5)手工删除ADR指定的监听日志路径下的listener.log文件 6)start重启监听器 7)status查看状态 到此问题解决
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值