ORA-3136 WARNING Inbound Connection Timed Out解决思路

背景

在告警日志中出现了大量 ORA-3136 的报错。本文将详细介绍如何解决这一问题。

问题描述

告警日志

在告警日志中发现了如下错误信息:

ORA-3136: WARNING Inbound Connection Timed Out

MOS 文档

根据 MOS 文档 (Doc ID 465043.1)《Troubleshooting ORA-3136: WARNING Inbound Connection Timed Out》,这个报错指出客户端连接没有在规定的时间内通过认证,这个时间是由 SQLNET.INBOUND_CONNECT_TIMEOUT 参数决定的。

日志文件

$ORACLE_HOME/network/log/sqlnet.log 中可以看到有 ORA-12170TNS-12535 的报错信息,其中包含连接的客户端地址,这将有助于判断问题。

问题原因

  1. 服务器接收到来自于不支持连接此数据库的大量客户端恶意请求:这种情况下,需要抛出这种错误以及相应的行为。通过 sqlnet.log 中记录的客户端地址,找到错误根源。
  2. 服务器接收到一个合法的客户端连接请求,但客户端花费了比默认60秒更长的时间来完成验证
  3. 数据库服务器当前负载很重,以至于不能在规定的时间内完成客户端登录验证

检查步骤

  1. 检查数据库服务器的本地连接是否正常,速度是否合适
  2. 在网络管理员的帮助下检查网络延迟
  3. 检查数据库性能是否下降
  4. 检查告警日志中是否有其他严重的报错,例如 ORA-600ORA-7445,如果有,先解决这些严重的报错

解决方案

1. 修改 listener.orasqlnet.ora 文件

方法一:通过 lsnrctl 修改 listener.ora
  1. sh打开 lsnrctl 工具

    [/home/oracle]> lsnrctl
    LSNRCTL for Linux: Version 10.2.0.4.0 - Production on 01-SEP-2009 16:28:06
    Copyright (c) 1991, 2007, Oracle. All rights reserved.
    Welcome to LSNRCTL, type "help" for information.
    
  2. 查看当前 inbound_connect_timeout 参数

    LSNRCTL> show inbound_connect_timeout
    Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
    LISTENER parameter "inbound_connect_timeout" set to 60
    The command completed successfully
    
  3. 设置 inbound_connect_timeout 为 0

    LSNRCTL> set inbound_connect_timeout 0
    Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
    LISTENER parameter "inbound_connect_timeout" set to 0
    The command completed successfully
    
  4. 保存配置

    LSNRCTL> set save_config_on_stop on
    
  5. 退出 lsnrctl

    LSNRCTL> exit
    
方法二:编辑 listener.orasqlnet.ora 文件
  1. 编辑 listener.ora 文件

    INBOUND_CONNECT_TIMEOUT_<listenername> = 0
    
  2. 编辑 sqlnet.ora 文件

    SQLNET.INBOUND_CONNECT_TIMEOUT = 0
    

2. 重启监听器和数据库

  1. 停止监听器

    lsnrctl stop
    
  2. 启动监听器

    lsnrctl start
    
  3. 重启数据库

    SQL> shutdown immediate
    ORA-01507: database not mounted
    ORACLE instance shut down.
    
    SQL> startup
    ORACLE instance started.
    Total System Global Area  7532736512    bytes
    Fixed Size                 2267912    bytes
    Variable Size            2097153272    bytes
    Database Buffers        5419040768    bytes
    Redo Buffers              14274560    bytes  
    Database mounted.
    Database opened.
    

问题解决

1. 检查 trc 文件

如果数据库仍然无法启动,检查最新的 udump 目录下的 trc 文件,查找错误信息。

2. 杀死锁定进程

根据 trc 文件中的进程信息,杀死锁定的进程。

kill -9 422264

3. 重新登录并启动数据库

[oracle@localhost oracle]$ sqlplus "/as sysdba"
SQL> startup

总结

通过上述步骤,我们成功地排查并解决了 ORA-3136 错误,即客户端连接超时的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值