TNS-12560: TNS:协议适配器错误终极配置

我们知道oracle客户端连接时涉及用到的几个配置文件有:sqlnet.ora、tnsnames.ora、listener.ora。其中sqlnet.ora和tnsnames.ora是在客户端的配置文件,listener.ora则是在服务器端的监听配置文件。

而在最新的oracle版本中,已经将sqlnet.ora文件放到了,同一级目录的samples下,可见sqlnet.ora的用途会逐渐减弱。

其实很多文章都写到要配置这个配置那个,但是要换个角度看问题,首先从大的方面入手:

配置你的虚拟机的ip:

设置RedHat Linux下的IP时,要和本地Windown操作系统的物理网卡或者VMware虚拟机2块虚拟网卡中的一块在同一个网段,这样在本地的Windows操作系统就能telnet到虚拟机上的RedHat Linux系统去了。例如:如果RedHat Linux下的IP和本地Windown操作系统的物理网卡在同一个网段,那么RedHat Linux的Network connection就用Bridged:Connected directly to the physical network;如果RedHat Linux下的IP和VMware虚拟机2块虚拟网卡中的一块在同一个网段(这里用虚拟网卡1),那么RedHat Linux的Network connection就用Custom:Specipic virtual network,并且选择 VMware1(host only)。

如:我通过ipconfig看的自己的ip为192.168.88.144,我想使用host only模式,我就开始下面的操作

通过网上邻居->属性->VMware Network Adapter VMnet8->属性

设置(tcp/ip)将其静态ip设置为:192.168.174.243

同样的方法将VMware Network Adapter VMnet1的静态ip设置为192.168.174.242

然后设置linux主机的ip以及host only模式,在Vmware中通过菜单VM->settings->network Adapter设置为Custom:Specipic virtual network,并且选择 VMware1(host only)。

然后开始设置linux的静态ip。adminstrator->network来打开设置,然后设置在同一个网段。

设置完之后最好通过Activate激活,并在root下通过命令重启network

>service network restart

然后呢,还是不要着急。。。。

干什么呢,防火墙!!!windows防火墙关闭很简单这里就不说了,说说关闭自己的linux防火墙,selinux

在root用户通过命令

>setup

然后选择firewall configuration,通过空格键了选择,将防火墙关闭

下面开始配置监听

在配置服务器端监听程序时要注意几点:

//可以略过这一步 :1、在服务器上的/etc/hosts文件中需要有127.0.0.1  localhost 这一条.默认情况下是有的。若没有则在启动监听器是会报TNS-12537:TNS:connection closed的错误.同时最好添加上你的服务器IP  主机名。

2、配置监听器时可以使用netca或者直接写配置文件listener.ora也行

   netca方式:在root用户下用命令>netca即可,用这种方式快速方便(推荐),但后一种能 提升能力

   配置文件方式:配置文件在$ORACLE_HOME/network/admin下

# listener.ora Network Configuration File: /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
(PROGRAM = extproc)
)
)

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.174.244)(PORT = 1521))
)
)

其中的HOST最好使用IP,主机名可能会发生改变——影响较多。

  客户端的配置主要的是tnsnames.ora这个文件

SID名称 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.174.244)(PORT = 1521))
)
(CONNECT_DATA =
(SID = SID名称)
(SERVER = DEDICATED)
)
)

最近发现有时候自己的监听关闭不了,这个时候就需要你将自己的linux关闭之后重启了,

还有的情况就是运行netca的时候再最后一步会卡主!!!

对于这个问题呢,解决办法是:使用配置文件进行配置,并且在配置listener.ora的时候做些许的改变:

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_NAME=你的实例名SID)
(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
(SID_NAME = 你的实例名SID)
)
)

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.174.244)(PORT = 1521))
)
)

 

 

在这些配置好之后呢,可以再linux内部看看自己能否监听自己,如果不可以可以chage login,如果再不行呢,就用下列操作

这样做是首先启动自己的数据库,然后启动数据库中自己配置好的监听,这样在用net常识看看linux内部是否能够监听的到,net是否配置正确。

下面就通过windows下的客户端的net cofiguration assitant 来配置自己linux下的数据监听就可以了。

最后在说下在排错时用到的一些命令:lsnrctl (start、stop、status)、tnsping (IP/主机名)、netstat -anp (查看端口)、telnet等。

可以在DOS下用tnsping 你的SID来快速查看是否解决问题。

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、付费专栏及课程。

余额充值