TNS-12535: TNS:operation timed out案例解析
一数据库突然连接不上,在自己电脑上使用SQL Developer也连接不上。立即使用SecureCRT连接上了这台服务器,从下面几个方面检查。
1:检查了数据库的状态是否正常
$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.5.0 - Production on Mon May 16 11:07:55 2016
Copyright (c) 1982, 2010, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Release 10.2.0.5.0 - 64bit Production
SQL> select status from v$instance;
STATUS
------------
OPEN
SQL>
2:检查监听日志是否出现错误和异常
$ more listener.log | grep TNS
TNS-12502: TNS:listener received no CONNECT_DATA from client
TNS-12502: TNS:listener received no CONNECT_DATA from client
TNS-12502: TNS:listener received no CONNECT_DATA from client
TNS-12502: TNS:listener received no CONNECT_DATA from client
TNS-12502: TNS:listener received no CONNECT_DATA from client
TNS-12502: TNS:listener received no CONNECT_DATA from client
如上所示,监听日志没有很特别的错误出现,使用tail -60f listener.log 也能看到监听进程一直处理用户请求,但是新的连接无法登录到数据库。事后检查(这种情况持续的实际较短,我还在检查时,数据库已经正常了,数据库又能正常连接),发现在12:59出现了TNS-12535错误,跟这个没有关系。
TNS-12525: TNS:listener has not received client's request in time allowed
TNS-12535: TNS:operation timed out
TNS-12606: TNS: Application timeout occurred
TNS-12502: TNS:listener received no CONNECT_DATA from client
TNS-12502: TNS:listener received no CONNECT_DATA from client
3:检查告警日志和跟踪日志
检查告警日志,没有发现任何错误信息,但是在这个时间点出现了几个trc文件
*** 2016-05-13 12:39:57.979
NS Primary Error: TNS-12535: TNS:operation timed out
NS Secondary Error: TNS-12606: TNS: Application timeout occurred
kmduicxd: 0x7f88cafc4620, kmduiflg: 1, circuit: 0x8507edda0
(circuit) dispatcher process id = (0x85c694738, 1)
parent process id = (18, 1)
serial # = 2
connection context = 0x7f88cafc4620
user session = ((nil)), flag = (100c0), queue = (9)
current buffer = (0), status = (4, 0)
Client Address = (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.xxx.xxx)(PORT=60049))
*** 2016-05-13 12:40:25.202
NS Primary Error: TNS-12535: TNS:operation timed out
NS Secondary Error: TNS-12606: TNS: Application timeout occurred
kmduicxd: 0x7f88cafc4dd0, kmduiflg: 1, circuit: 0x8507e8210
(circuit) dispatcher process id = (0x85c694738, 1)
parent process id = (18, 1)
serial # = 2
connection context = 0x7f88cafc4dd0
user session = ((nil)), flag = (100c0), queue = (9)
current buffer = (0), status = (4, 0)
Client Address = (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.xxx.xxx)(PORT=58630))
*** 2016-05-13 12:40:45.147
NS Primary Error: TNS-12535: TNS:operation timed out
NS Secondary Error: TNS-12606: TNS: Application timeout occurred
kmduicxd: 0x7f88cafc52f0, kmduiflg: 1, circuit: 0x8507e5448
(circuit) dispatcher process id = (0x85c694738, 1)
parent process id = (18, 1)
serial # = 2
connection context = 0x7f88cafc52f0
user session = ((nil)), flag = (100c0), queue = (9)
current buffer = (0), status = (4, 0)
查了一下metalink文档上关于TNS-12535的错误,如下所示
APPLIES TO:
Oracle Net Services - Version 10.1.0.3 to 11.2.0.4 [Release 10.1 to 11.2]
Information in this document applies to any platform.
This problem can occur on any platform.
SYMPTOMS
Error TNS-12535 when connecting to Oracle database via dispatchers (shared servers).
The dispatcher trace shows following error message -
NS Primary Error: TNS-12535: TNS:operation timed out
NS Secondary Error: TNS-12606: TNS: Application timeout occurred
kmduicxd: 0EEE01DC, kmduiflg: 1, circuit: 4D08C930
(circuit) dispatcher process id = (85917028, 1)
parent process id = (64, 1)
serial # = 44
connection context = 0EEE01DC
user session = (00000000), flag = (100c0), queue = (9)
current buffer = (0), status = (4, 0)
Client Address = (ADDRESS=(PROTOCOL=tcp)(HOST=<IP address>)(PORT=<port>))
CAUSE
The SHARED_SERVER parameter is set to an inadequate value and should be raised. A connection via shared server will fail if there are no free shared servers available to honor the request.
The 12535 error in the dispatcher trace indicates that the connection was timed out in the dispatchers queue.
SOLUTION
Increase value for following database parameters -
max_shared_servers
shared_servers
These parameters are modifiable using ALTER SYSTEM. For example -
SQL> alter system set max_shared_server=300;
其中有这么一段描述,在共享服务器连接模式当中,如果SHARED_SERVER参数设置过小或不足,如果没有空闲的shared server进程可用,那么通过共享服务器模式连接到数据库的连接请求就会失败, TNS-12535错误就会出现dispatcher trace文件中,表明dispatcher队列中的请求超时。
The SHARED_SERVER parameter is set to an inadequate value and should be raised. A connection via shared server will fail if there are no free shared servers available to honor the request.
The 12535 error in the dispatcher trace indicates that the connection was timed out in the dispatchers queue.
我们的shared_server和max_shared_server参数一直以来都较合理,突然出现这种情况是为什么额? 后面再DPA的监控里面看到,当时有个用户使用Toad更新了某个表,但是他后面意识到自己忘记在UPDATE语句里面添加WHERE条件了,就回滚了该SQL语句,这个时间段导致该表被锁,很多会话被阻塞。这就能解释为什么出现这种情况了。
接下来,我们通过下面例子来重现这个案例情况吧,我们先准备测试环境,如下所示,我们设置shared_servers、max_shared_servers、两个参数的值。由于是测试环境,我们尽量将这些设置小一点,方便我们测试。
SQL> alter system set shared_servers=4 scope=both;
System altered.
SQL> show parameter shared_server
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
max_shared_servers integer 30
shared_server_sessions integer
shared_servers integer 4
SQL> alter system set max_shared_servers=4 scope=both;
System altered.
SQL> show parameter shared_server
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
max_shared_servers integer 4
shared_server_sessions integer
shared_servers integer 4
SQL>
创建test用户,然后以test用户登录数据库,执行下面操作后,退出会话。
SQL> create table test(id number(10), name varchar(12));
Table created.
SQL> insert into test
2 select 1, 'kerry' from dual union all
3 select 2, 'jimmy' from dual union all
4 select 3, 'jerry' from dual;
3 rows created.
SQL> commit;
Commit complete.
SQL> exit;
然后开启四个cmd命令窗口分别执行这个sql语句,当我们开启第五个cmd命令窗口时,依然能连接执行SQL(因为第一个会话变成INACTIVE状态,SERVER变成NONE状态了)
C:\Users>sqlplus test/test@mytest
SQL*Plus: Release 11.2.0.1.0 Production on 星期一 5月 16 23:46:13 2016
Copyright (c) 1982, 2010, Oracle. All rights reserved.
连接到:
Oracle Database 10g Release 10.2.0.5.0 - 64bit Production
SQL> update test set name='kkk' where id=1;
已更新 1 行。
SQL>
会话窗口1
会话窗口2、3、4、5都如下所示
开启第六个窗口执行SQL命令时,报下面错误
使用sqlplus / as sysdba 登录数据库,执行下面命令,你会看到第一个会话的STATUS已经变成INACTIVE状态了, SERVER为NONE状态,所以开启第五个会话窗口时才会依然能连接数据库,当你开启第6个会话窗口才报上面错误。可以看到第一个会话961,阻塞了其它四个会话。
检查dispatcher的跟踪文件,你就能看到下面这样的错误信息。跟我们上面案例的几乎是一样的
当然,有时候你可能被ORA-00104这样的错误给干扰测试。
此时你需要设置参数的inbound_connect_timeout,不要给的过大。否则测试结果很容易被上面错误干扰。
其实V$SESSION中,状态为NONE的当前共享服务器进程没有任务处理,若果进程正在执行某些任务则会为SHARED状态。参考我这篇文章v$session中server为none与shared值解析
In MTS/Shared Server configuration when you see value 'NONE' (as shown below), it means there is no task being processed by shared server for that session. The server column will infact show status of 'SHARED' if there is some task being processed at that particular time by the shared server process for that session.
在共享服务器模式中,当并发工作的ACTIVE SESSION数大于max_shared_servers参数时,就不能在增加新的shared server processes,新的session请求就会得不到空闲的shared server processes的响应,dispatcher进程无法为会话分配一个服务器端进程(shared server perocesss)也就会出现数据库连接不上的现象,最后出现超时现象。如果这个有点难以理解,那么你想象一下,在一个餐厅里面,假设有40位客人在就餐,但是只有4个服务器员,如果同时四个服务员正在服务4个客户,那么第五个客户,就不能得到服务员的服务了。除非他等待其中一个客户已经服务完了,如果时间太长,他就会放弃这个服务了。
小结:
保证事务是短小的--这是用于MTS(共享服务器模式)的第一条规则。它们可以是频繁的,但它们应该是短小的(如OLTP 系统所表现的特点)。如果它们不是短小的,那么由于共享资源被一些进程独占,将导致系统速度整体下降。在极端的情况下,如果全部的共享服务都是忙的情况下,系统将被挂起。
所以对于事务具有时间短、频率高特点的OLTP 系统,MTS 是最合适的。在OLTP 系统中,事务是在几毫秒内执行完的。另一方面,MTS 非常不合适于数据仓库。
--------------------------------------------------------------------------------------------------------------------------------
上面这段小结来自于《ORACLE专家高级编程》,用在此处非常恰当、合适!!!
参考资料:
https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=170439072788756&id=823274.1&_afrWindowMode=0&_adf.ctrl-state=222ndlb4e_34
TNS-12535: TNS:operation timed out案例解析的更多相关文章
- TNS-12535: TNS:operation timed out
AWS数据库云服务器出现了连接超时的错误,于是查看相关时段的alert日志,发现了如下的错误: **************************************************** ...
- TNS-12535: TNS:operation timed out、TNS-00505: Operation timed out
在查看alert日志的时候发现: 1 *********************************************************************** 2 3 Fatal ...
- 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸
类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...
- Python安装pywinauto时遇到error: The read operation timed out解决方法
Python结合Pywinauto 进行 Windows UI 自动化,安装pywinauto时遇到的一些问题: 解决方法:很明显是链接超时国外网站你懂的V_P_N吧,直接通过报错信息的链接复制到浏览 ...
- SQL Server 连接问题案例解析(1)
SQL Server 连接问题案例解析(1) 转载自:http://blogs.msdn.com/b/apgcdsd/archive/2015/04/27/sql.aspx?CommentPosted ...
- “SSLError: The read operation timed out” when using pip
Downloading/unpacking Django>=1.5.1,<1.6 (from -r requirements.txt (line 1)) Downloading Djang ...
- 【java设计模式】(6)---迭代器模式(案例解析)
设计模式之迭代器模式 一.java迭代器介绍 1.迭代器接口 在jdk中,与迭代器相关的接口有两个:Iterator 与 Iterable. Iterator:迭代器,Iterator及其子类通常是迭 ...
- 案例解析|政府信息化的BI建设应用 .
一.行业背景 某建设厅综合监管信息化平台,是政企业务协同的平台之一,同时兼具协作.门户.办公应用集成.用户权限管理等多项功能.在此要求基础上,选择中间件基础技术平台,可以在最大程度满足平台功能需求的前 ...
- mac 配置 ssh 到git (Could not resolve hostname github.com, Failed to connect to github.com port 443 Operation timed out)
1.进入终端命令行 (1)输入:cd .ssh/ 进入到.ssh后,输入ls,会输出“known_hosts”,如果没有创建过rsa的话 (2)输入:man ssh-add (3)输入:ssh-key ...
随机推荐
- ABP(现代ASP.NET样板开发框架)系列之7、ABP Session管理
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之7.ABP Session管理 ABP是“ASP.NET Boilerplate Project (ASP.NET ...
- es6之let和const
在javascript中,我们都知道使用var来声明变量.javascript是函数级作用域,函数内可以访问函数外的变量,函数外不能访问函数内的变量. 函数级作用域会导致一些问题就是某些代码块内的变量 ...
- [转载]Google Guava官方教程(中文版)
原文链接 译文链接 译者: 沈义扬,罗立树,何一昕,武祖 校对:方腾飞 引言 Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [collections] ...
- Windows 10 部署Enterprise Solution 5.5
Windows 10正式版发布以后,新操作系统带来了许多的变化.现在新购买的电脑安装的系统应该是Windows 10.与当初用户不习惯Windows 7,购买新电脑后第一个想做的事情就是重装成XP,估 ...
- Entity Framework Code First学习系列目录
Entity Framework Code First学习系列说明:开发环境为Visual Studio 2010 + Entity Framework 5.0+MS SQL Server 2012, ...
- 计算机程序的思维逻辑 (51) - 剖析EnumSet
上节介绍了EnumMap,本节介绍同样针对枚举类型的Set接口的实现类EnumSet.与EnumMap类似,之所以会有一个专门的针对枚举类型的实现类,主要是因为它可以非常高效的实现Set接口. 之前介 ...
- 2015游戏蛮牛——蛮牛杯第四届开发者大赛 创见VR未来开启报名
蛮牛杯启动了,大家开始报名! http://cup.manew.com/ 这不是一篇普通的通稿,别着急忽略它.它是一篇可以让你梦想变现的通稿! 从某一天开始,游戏蛮牛就立志要为开发者服务,我们深知这一 ...
- CloudNotes之领域建模篇:领域模型简介
CloudNotes领域模型还是相对简单的,并不一定需要采用面向领域驱动的设计方法来解决CloudNotes的领域问题.但出于以下几个方面的原因,我还是采用了面向领域驱动的方式来开发CloudNote ...
- [未完成]scikit-learn一般实例之九:用于随机投影嵌入的Johnson–Lindenstrauss lemma边界
Johnson–Lindenstrauss 引理表明任何高维数据集均可以被随机投影到一个较低维度的欧氏空间,同时可以控制pairwise距离的失真. 理论边界 由一个随机投影P所引入的失真是确定的,这 ...
- asp.net结合uploadify实现多附件上传
1.说明 uploadify是一款优秀jQuery插件,主要功能是批量上传文件.大多数同学对多附件上传感到棘手,现将asp.net结合uploadfiy如何实现批量上传附件给大家讲解一下,有什么不对的 ...










