当前位置:首页 > 技术知识 > 正文内容

Oracle数据库无法连接问题排查(oracle数据库连接不成功)

maynowei8个月前 (08-03)技术知识173

数据库告警日志 如下图 。发现 问题时间段,没有 数据库服务故障 报错,但是存在较多 TNS-12535 12560 12170 00505 错误:

通过检查问题时间段应用日志, 也记录了 Caused by:
java.sql.SQLRecoverableException: IO 错误: Connection reset
Caused by: java.net.SocketException: Connection reset 等 连接 重置 的相关报错:

问题分析:

1 数据库层面分析:

参考官网关于这类数据库错误的文章:A Demonstration of the Alert Log Timeouts Occur:
TNS-12170/TNS-12535/TNS-12560/TNS-00505 (Doc ID 2461900.1)

ORACLE官方针对这类错误明确:错误堆栈依次为
TNS-12170/TNS-12535/TNS-12560/TNS-00505,这表明由于网络问题,已建立的连接超时。例如,网络电缆被拔出,防火墙断开连接,或者客户端崩溃而没有通知服务器等等。

在这种情况下,oracle服务器进程无法确定客户端状态,它必须等到tcp保活超时(可能是几个小时),则该过程将被终止,并且上述消息将被打印在警报日志中。这是一个网络/应用程序问题,而不是oracle错误。

所以原因需要从数据库以外方向去查。

2 应用报错层面分析

参考官网关于 SQLRecoverableException 这类应用报错误的文章 1 JDBC 11.2.0.3 Application Fails With
java.sql.SQLRecoverableException: IO Error: Connection reset (Doc ID 1575238.1)

可以看到该应用程序日志的版本与上面官网JDBC 11.2.0.3 ojdbc6.jar connection with JDK 1.6 匹配。


主要原因为:该问题是由位于客户端和服务器之间的TCP/IP网络设备(防火墙、路由器等)引起的,该设备设置为在超过任何MTU(最大传输单元)或数据包大小时限制或限制通过它的通信。

What Causes the "java.net.SocketException: Connection Reset" Error? (Doc ID 786219.1)

ORACLE官方认为,导致connection reset被重置的常见原因为:

1)客户端浏览器已刷新或关闭。如果由于这种情况而报告错误消息,通常是因为系统中可能存在性能问题。要解决此问题,请找到性能不佳的瓶颈并消除它。

2)客户端和WebLogic服务器之间有防火墙,防火墙已断开连接。对于这种情况,请正确设置防火墙。

3)网络拥塞导致操作超时。缓解网络拥塞,问题应该得到解决

所以该问题主要是由于 应用端与 数据库 服务器端的网络通信异常 导致本次问题。建议做如下调整:

网络层面:检查应用端、服务器端、防火墙的MTU值是否一致,更改应用端、服务端的MTU值与防火墙一致,MTU默认值为1500,参考可调至9000(oracle原厂建议oracle服务器是 9000,同时参考了其他银行的MTU值),建议网络工程师可以用ping包的方式 测试出符合当前环境的最佳MTU 。

数据库层面:

在sqlnet.ora增加参数:

SQLNET.INBOUND_CONNECT_TIMEOUT = 0

在 listener.ora 增加:

INBOUND_CONNECT_TIMEOUT_LISTENER = 0



相关文章

Axure原型:化妆镜商城Web高保真原型+线框图

之前给大家分享了化妆镜商城APP高保真原型,继续给大家补充该原型的Web版。也顺便分享一个化妆镜商城web版的线框图。关于线框图的绘制几乎都是经验的总结,开始时建议大家用铅笔白纸绘制,初版概念确定后再...

产品经理的术与器:从想法到产品原型

工欲善其事,必先利其器。从idea,到product,中间的可谓要经历几番曲折, 产品定位确定决定产品的生死,产品功能需求的确定决定着开发的周期和试错的成本,互联网拼的就是快,所以要做 MVP(最小化...

Linux系统编程—互斥量mutex(linux 互斥量)

##互斥量mutex前文提到,系统中如果存在资源共享,线程间存在竞争,并且没有合理的同步机制的话,会出现数据混乱的现象。为了实现同步机制,Linux中提供了多种方式,其中一种方式为互斥锁mutex(也...

掌握C语言多线程:高效并发编程指南

一、多线程基础概念介绍多线程编程是现代软件开发中提高程序性能和响应性的重要技术。在C语言中,pthread(POSIX Threads)库是实现多线程编程的标准工具。本节将通俗易懂地介绍多线程的核心概...

go语言并发原语RWMutex实现原理及闭坑指南

1.RWMutex常用方法Lock/UnlockRLock/RUnlockRLocker 为读操作返回一个Locker接 口的对象2. RWMutex使用方法 func main() { var c...

什么?Java 中的锁还有状态?(java中的锁都有哪些类型)

线程如果锁住了某个资源,致使其他线程无法访问的这种锁被称为悲观锁,相反,线程不锁住资源的锁被称为乐观锁,而自旋锁是基于 CAS 机制实现的,CAS又是乐观锁的一种实现,那么对于锁来说,多个线程同步访问...