Oracle常见故障——Listener类:Hang、Crash及连接风暴的判断-阿里云开发者社区

开发者社区> 努力酱> 正文

Oracle常见故障——Listener类:Hang、Crash及连接风暴的判断

简介:
+关注继续查看
\
 

 

目录

 

  • 监听状态正常,应用反馈时断时连

  • Listener进程crash

  • ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务

  • 11G SCAN LISTENER无法注册服务故障

  • Listener hang

  • TNS-12535 TNS-00505处理

  • 应用测试连接不上数据库,连接直接报TNS-12547: TNS:lost contact处理

由Oracle的Listener引起的报错很多,很大一部分是由于配置不当导致的。通常,我们要么从tnsnames.ora找原因,要么从lisntener.ora找原因。基本上,我们从Oracle连接的时候报出的错误代码可以快速查到原因。

 

下面介绍的几类故障及处理方法,难度稍微要大一些

 

1监听状态正常,应用反馈时断时连

 

 

故障现象:

 

客户端新发起的短连接时断时连,如下所示:

20160628114831118.jpg
 

故障原因:

 

因短连接持续性发起连接耗尽监听ip 1521端口资源,导致监听无法正常处理连接请求。

 

超过每秒50次连接则需要关注,可通过tail -20f listener.log 观察,如持续性快速刷屏则可能已经出现连接风暴.

 

20160628114839252.jpg
 

故障解决/日志分析:

 

20160628114846699.jpg
 

 

2Listener进程crash

 

 

 

故障环境:

 

操作系统为:SunOS 5.10

 

数据库版本:Oracle 10.2.0.4

 

 

故障现象:

 

Listener进程已经crash, 查看主机数据库监听日志listener_ngsetdb3/4.log如下:

20160628114857446.jpg
 

系统日志:

 

20160628114905200.jpg
 

 

故障分析:

 

Listener进程crash是由于IPMP出现故障所致,Listener随后在探测不到服务节点时,直接crash。Oracle MOS文章Solaris Cluster 3.x: IPMP group failure impact [ID 1006916.1]对此有详细描述:在Sun Cluster中,短暂的网络故障会导致IPMP组失败,并触发资源组切换。并且,它会在38秒后回切!

 

 

处理方法:

 

查看监听日志listener.log跟系统日志(/var/adm/ messages)。

手动重启两个节点的Listener,Oracle提供了一个解决方案:修改/etc/default/mpathd文件下的IPMP FAILURE_DETECTION_TIME变量值,即将失败检测时间从默认的10秒(10000)增加到20秒(20000)以上

 

20160628114913600.jpg

注:修改该参数需要重启mpathd服务。

 

 

3ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务

 

 

故障现象:

客户端无法通过监听连接数据库

 

故障原因:

1.实例未注册到listener中,可通过lsnrctl status 查看

2.oracle process达到上限无法建立新的连接。

 

故障解决:

  1. 手工注册数据库,alter system register;

  2. 检查数据库用户连接分布情况,并show process 查看连接限制

Select username,count(1) from v$session group by username order by 2 asc;

 

 Ps :大部分情况由开发商程序bug引起。

 

 

411G SCAN LISTENER无法注册服务故障

 

 

故障现象:

scan listener 无法注册service服务

 

故障原因:

bug 13066936

 

故障解决:

 

20160628114922388.jpg

 

5Listener hang

 

 

故障环境:

任意环境

 

故障现象:

从其他应用主机tnsping发现延迟很大

查看监听状态报如下错:

 

20160628114928574.jpg

listener.log有如下报错:

 

20160628114935781.jpg

故障分析:

 

Too many open files意味着Maximum Number Of Open Files Per Process 达到了上限。因此listener hang住的原因是该limit设置过小。

 

处理方法:

 

将oracle用户的soft limit提升为至少1024,然后重新oracle用户登录,检验ulimit合格后,重新启动数据库和监听。

 

具体解决办法如下:

  1. 在/etc/system增加以下行

    set rlim_fd_max=65536

    set rlim_fd_cur=4096

  2. 重新登录ORACLE并检验oracle用户的限制

    su – oracle

    ulimit -Ha

    ulimit –Sa

  3. 重新启动数据库和监听

 

 

6TNS-12535 TNS-00505处理

 

 

故障环境:

任意环境

 

故障现象:

Db alert日志报如下错误:

20160628114942600.jpg
 

 

故障分析:

 

一个客户端连接整个步骤:

  1. 客户端发起一个connection连接监听

  2. 监听启动一个专属进程(服务器进程,也就是我们通常说的LOCA=NO进程)用于接收这个connection

  3. 在专属进程启动之后,监听会将这个connection传递给这个专属进程

  4. 专属进程通过这个connection来跟客户端握手

  5. 专属进程跟客户端信息交换需要建立一个session

  6. session打开

 

当在以上的第3步到第4步时客户端关闭,所以当专属进程尝试跟客户端联系时发现连接已关闭时,就会报出我们看到的错误!!

 

错误一般是由于程序异常断开导致超时,11g R1如果出现如上的错误信息会写入到sqlnet.log,11g R2会写入到alert.log,

 

其实出现此错误是正常的现象。

 

 

处理方法:

 

如果不想这样的信息打印在alert日志中,

在sqlnet.ora设置

DIAG_ADR_ENABLED = OFF

在listener.ora设置

DIAG_ADR_ENABLED_ = OFF

 

重启监听

 

 

7应用测试连接不上数据库,连接直接报TNS-12547: TNS:lost contact处理

 

 

故障环境:

环境:HP-UX 11.31 ia64

数据库版本:11.2.0.4

 

 

故障现象:

 

应用测试连接不上数据库,连接直接报TNS-12547: TNS:lost contact。

 

但查看监听状态,CRS状态,数据库状态均正常。CRS日志、CSS日志及AGENT日志均无报错。

 

 

故障分析:

 

  1. 应用连接数据库直接报TNS-12547: TNS:lost contact

  2. 监听日志发现一直在报连接失败:

     

20160628114951897.jpg

 

问题导致的原因有在32位平台中当listener.log超过2G会报这个错。

 

ORACLE_HOME下的一些执行文件权限不对也会导致相同的错误,但我们这个是64位的,排除第一种,

 

所以去查询执行文件的权限是否正常。

 

 

处理方法:

 

1、 通过对比发现部分执行文件少了S权限,做了relink all,重新同步执行文件

2、 由于数据库使用的是ASM,磁盘属组为asmadmin,故对比问题节点及正常节点DB ORACLE_HOME下属组为asmadmin的文件,将问题节点文件权限修正即可解决问题。


本文来自云栖社区合作伙伴"DBAplus",原文发布时间:2015-12-23

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
4479 0
[84题]Linux运维常见笔试题(填空题)
[84题]Linux运维常见笔试题(填空题) 1. 在Linux 系统 中,以文件方式访问设备 。 2. Linux 内核引导时,从文件/etc/fstab中读取要加载的文件系统 。 3. Linux 文件系统中每个文件用indoe节点来标识。
3260 0
夯实Java基础系列17:一文搞懂Java多线程使用方式、实现原理以及常见面试题
本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下Star哈 文章首发于我的个人博客: www.how2playlife.com Java中的线程 Java之父对线程的定义是: 线程是一个独立执行的调用序列,同一个进程的线程在同一时刻共享一些系统资源(比如文件句柄等)也能访问同一个进程所创建的对象资源(内存资源)。
3501 0
如何使用Oracle SQLDeveloper 中连接MS SQLServer和MySQL数据库
一、连接至MySQL数据库 1.下载mysql的jdbc驱动, http://dev.mysql.com/downloads/ 免费,嘿嘿。 2.解压zip文件(我下载的版本是mysql-connector-java-5.1.5),我们要用的是mysql-connector-java-5.1.5-bin.jar文件。
1029 0
Oracle中常见的33个等待事件小结
一. 等待事件的相关知识 1.1 等待事件主要可以分为两类,即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件。1). 空闲等待事件指ORACLE正等待某种工作,在诊断和优化数据库的时候,不用过多注意这部分事件。
849 0
数据库管理工具神器-DataGrip,可同时管理多个主流数据库[SQL Server,MySQL,Oracle等]连接
前言 DataGrip:Jet Brains出品的一款数据库管理工具(没错,是Jet Brains出品,必属精品)。DataGrip整合集成了当前主流数据库(如:SQL Server, MySQL, Oracle, PostgreSQL, Sybase, Sqlite, DB2, Azure等)的连接,管理等。
3299 0
+关注
287
文章
3
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载