应用服务器:Windows Server 2008 R2 Enterprise

故障现象:项目侧同事反映应用服务器上的程序连接数据库报错:ORA-12560: TNS: 协议适配器错误

1.故障重现

在应用服务器上使用sqlplus和PL/SQL工具登录
连接数据库服务器均报错:
```
ORA-12154: TNS: 无法解析指定的连接标识符
```

2.定位问题

## 2.1 ping测试网络 ##
ping 数据库IP地址 网络通畅
```
C:\Users\Administrator>ping 192.168.1.100

正在 Ping 192.168.1.100 具有 32 字节的数据:

来自 192.168.1.100 的回复: 字节=32 时间<1ms TTL=64

来自 192.168.1.100 的回复: 字节=32 时间<1ms TTL=64

来自 192.168.1.100 的回复: 字节=32 时间<1ms TTL=64

来自 192.168.1.100 的回复: 字节=32 时间<1ms TTL=64

192.168.1.100 的 Ping 统计信息:

数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),

往返行程的估计时间(以毫秒为单位):

最短 = 0ms,最长 = 0ms,平均 = 0ms

## 2.2 tnsping测试端口 ##
tnsping 数据库IP地址,报错:TNS-12560:TNS:协议适配器错误

C:\Users\Administrator>tnsping 192.168.1.100

TNS Ping Utility for 32-bit Windows: Version 11.2.0.1.0 - Production on 27-1月 -

2016 09:55:56

Copyright (c) 1997, 2010, Oracle. All rights reserved.

已使用的参数文件:

D:\app\administrator\product\11.2.0\client_1\network\admin\sqlnet.ora

已使用 EZCONNECT 适配器来解析别名

尝试连接 (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=))(ADDRESS=(PROTOCOL=TCP)(HOST

=192.168.1.100)(PORT=1521)))

TNS-12560: TNS: 协议适配器错误

## 2.3 登录数据库主机 ##
SecureCRT工具登录数据库主机服务器报错:

An operation on a socket could not be performed because the system lacked

sufficient buffer space or because a queue was full.

## 2.4 尝试其他机器连接 ##
发现其他机器是可以登录到数据库服务器的,进一步查看数据库相关信息,也发现一切正常:
- 数据库服务正常
- 数据库监听正常
- 防火墙/SELINUX均未启用
- 其他与应用服务器同一网段的主机测试到数据库的连接也正常 看起来非常诡异,不过到现在也确定了不是数据库服务器那边的原因,不是网络的原因。
<h1 id="3">3.解决问题</h1>
## 3.1 两个ORA错误的官方解释 ##
ORA-12560

$ oerr ora 12560

12560, 00000, "TNS:protocol adapter error"

// *Cause: A generic protocol adapter error occurred.

// *Action: Check addresses used for proper protocol specification. Before

// reporting this error, look at the error stack and check for lower level

// transport errors. For further details, turn on tracing and reexecute the

// operation. Turn off tracing when the operation is complete.

ORA-12154

$ oerr ora 12154

12154, 00000, "TNS:could not resolve the connect identifier specified"

// *Cause: A connection to a database or other service was requested using

// a connect identifier, and the connect identifier specified could not

// be resolved into a connect descriptor using one of the naming methods

// configured. For example, if the type of connect identifier used was a

// net service name then the net service name could not be found in a

// naming method repository, or the repository could not be

// located or reached.

// *Action:

// - If you are using local naming (TNSNAMES.ORA file):

// - Make sure that "TNSNAMES" is listed as one of the values of the

// NAMES.DIRECTORY_PATH parameter in the Oracle Net profile

// (SQLNET.ORA)

// - Verify that a TNSNAMES.ORA file exists and is in the proper

// directory and is accessible.

// - Check that the net service name used as the connect identifier

// exists in the TNSNAMES.ORA file.

// - Make sure there are no syntax errors anywhere in the TNSNAMES.ORA

// file. Look for unmatched parentheses or stray characters. Errors

// in a TNSNAMES.ORA file may make it unusable.

// - If you are using directory naming:

// - Verify that "LDAP" is listed as one of the values of the

// NAMES.DIRETORY_PATH parameter in the Oracle Net profile

// (SQLNET.ORA).

// - Verify that the LDAP directory server is up and that it is

// accessible.

// - Verify that the net service name or database name used as the

// connect identifier is configured in the directory.

// - Verify that the default context being used is correct by

// specifying a fully qualified net service name or a full LDAP DN

// as the connect identifier

// - If you are using easy connect naming:

// - Verify that "EZCONNECT" is listed as one of the values of the

// NAMES.DIRETORY_PATH parameter in the Oracle Net profile

// (SQLNET.ORA).

// - Make sure the host, port and service name specified

// are correct.

// - Try enclosing the connect identifier in quote marks.

//

// See the Oracle Net Services Administrators Guide or the Oracle

// operating system specific guide for more information on naming.

## 3.2 windows应用服务器信息 ##
使用systeminfo命令查看这台windows应用服务器信息的部分内容:

C:\Users\Administrator>systeminfo

主机名: XXXXWEB1

OS 名称: Microsoft Windows Server 2008 R2 Enterprise

OS 版本: 6.1.7600 暂缺 Build 7600

OS 制造商: Microsoft Corporation

OS 配置: 主域控制器

OS 构件类型: Multiprocessor Free

注册的所有人:

注册的组织:

产品 ID: xxxxx-OEM-xxxxxxx-xxxxx

初始安装日期: 2014/1/26, 21:31:46

系统启动时间: 2014/9/5, 13:42:21

系统制造商: HP

系统型号: ProLiant BL460c Gen8

系统类型: x64-based PC

处理器: 安装了 2 个处理器。

[01]: Intel64 Family 6 Model 45 Stepping 7 GenuineIntel ~2000

Mhz

[02]: Intel64 Family 6 Model 45 Stepping 7 GenuineIntel ~2000

Mhz

BIOS 版本: HP I31, 2013/12/20

可以看到,服务器据上一次启动,已经运行了一年多。
而从上面CRT连接报出的错误信息初步确定是此台windows服务器的socket资源耗尽。
对windows不是很了解,简单粗暴的重启应用服务器后解决了此问题。

记录一则ORA-12154,ORA-12560解决过程的更多相关文章

  1. oracle错误(ORA:12154 ORA:01034 和 ORA:27101 ORA-18008 ORA-01081)

    按照正常操作流程,启动项目,发现项目报错,原因是连接不上oracle数据库, PLSQL连接时报错,错误码  ORA:12154 无法解析指定的连接标识符 第一次,遇到这个错误,在网上找了资料都是需要 ...

  2. 记录linux /bin被误删除的解决过程

    1.事因: 执行shell测试时,shell中rm -rf $path/* 变量$path为空,结果执行的命令是rm -rf / 事发时及时ctrl+c中断,导致只有/bin /boot目录删除 2. ...

  3. Oracle ORA 12541 报错解决过程

    Oracle 导入全库之后使用plsql登陆时报错 版本12C版本2 ORA-12541: TNS: No Listener 再oracle主机本地可以使用sqlplus 登陆,但是使用plsql无法 ...

  4. PLSQL登录数据库 报ORA -12154的诡异问题

    https://q.cnblogs.com/q/89420/ 现象: 1.机器上先后安装了oracle两个版本的client.在装第一个client后,plsql可以顺利连接数据库a并登录. 2.安装 ...

  5. IIS发布网站 报错500.19 错误解决过程记录

    首先先报上我的环境 WindowsServer 2012 IIS 8.5 网站是FrameWork 4.0 发布网站后浏览,报错信息如下: 解决过程记录如下: 1.看到这个问题首先想到的是权限问题,设 ...

  6. 记录今天客户的SQLSERVER启动不起来( 错误9003)的解决过程2013-11-26

    记录今天客户的SQLSERVER启动不起来( 错误9003)的解决过程2013-11-26 今天一大早上班就接到客户的电话,说:SQLSERVER启动不起来,业务系统使用不了 于是我就使用QQ远程,帮 ...

  7. [转]线上GC故障解决过程记录

    排查了三四个小时,终于解决了这个GC问题,记录解决过程于此,希望对大家有所帮助.本文假定读者已具备基本的GC常识和JVM调优知识,关于JVM调优工具使用可以查看我在同一分类下的另一篇文章: http: ...

  8. 一次线上GC故障解决过程记录

    排查了三四个小时,终于解决了这个GC问题,记录解决过程于此,希望对大家有所帮助.本文假定读者已具备基本的GC常识和JVM调优知识,关于JVM调优工具使用可以查看我在同一分类下的另一篇文章: http: ...

  9. linux服务器报No space left on device错误的解决过程记录

    起因 今天在本地提交了点代码,但到服务器上git pull的时候提示No space left on device,第一反应是猜想可能硬盘满了(很有可能是log导致的),不过想想又觉得不太可能,这台服 ...

随机推荐

  1. Untiy3D开发小贴士 OnEnabled与OnDisabled

    设某个组件为NewBehaviour OnEnabled被调用的情况: 1.GameObject添加组件的时候,即AddComponet<NewBehaviour> : 2.包含3.已添加 ...

  2. oracle统计用户下面所有的表,并显示每个表的行数

    declare  t_count   number(10);  t_str VARCHAR2(500);  cursor t_tables is select table_name from user ...

  3. sqL编程篇(三) 游标与存储过程

    sql编程2 游标与存储过程 sql编程中的游标的使用:提供的一种对查询的结果集进行逐行处理的一种方式不用游标的处理解决方式:逐行修改工资update salar set 工资=‘新工资’ where ...

  4. angular----关于注入HTML

    后台接口返回了一个HTML字符串,要绑定到页面,第一时间想到了innerHTML... 一:先说下一般用法 //原生用法 <div id="content"></ ...

  5. Xcode 升级后,常常遇到的遇到的警告、错误,解决方法(转)

    从sdk3.2.5升级到sdk 7.1中间废弃了很多的方法,还有一些逻辑关系更加严谨了.1,警告:“xoxoxoxo”  is deprecated解决办法:查看xoxoxoxo的这个方法的文档,替换 ...

  6. Android5.1.1 - APK签名校验分析和修改源码绕过签名校验

    Android5.1.1 - APK签名校验分析和修改源码绕过签名校验 作者:寻禹@阿里聚安全 APK签名校验分析 找到PackageParser类,该类在文件“frameworks/base/cor ...

  7. 【BOOM】一款有趣的Javascript动画效果

    实践出真知,有的时候看到一些有趣的现象就想着用自己所学的知识复现一下.    boomJS 缘起 前几天在 github 上看到同事的一个这样的小项目,在 IOS 上实现了这样一个小动画效果,看上去蛮 ...

  8. python自动化测试(4)-使用第三方python库技术实现

    python自动化测试(4)-使用第三方python库技术实现 1   概述 关于测试的方法论,都是建立在之前的文章里面提到的观点: 功能测试不建议做自动化 接口测试性价比最高 接口测试可以做自动化 ...

  9. Hadoop学习笔记—7.计数器与自定义计数器

    一.Hadoop中的计数器 计数器:计数器是用来记录job的执行进度和状态的.它的作用可以理解为日志.我们通常可以在程序的某个位置插入计数器,用来记录数据或者进度的变化情况,它比日志更便利进行分析. ...

  10. [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序

    [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序 本节导读: 本节主要说明使用异步进行程序设计的优缺点及如何通过异步编程. 使用 ...