zoukankan      html  css  js  c++  java
  • ORA-12537:TNS:connectionclosed错误处理过程

    1,同事说oracle测试换了连接不上了,报错如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <code class=" hljs ruby">[oracle@pldb236 admin]$ rlwrap sqlplus powerdesk/pd141118@PD236
     
    SQL*Plus: Release 11.2.0.1.0 Production on Mon Nov 23 14:16:31 2015
     
    Copyright (c) 1982, 2009, Oracle.  All rights reserved.
     
    ERROR:
    ORA-12537: TNS:connection closed
     
     
    Enter user-name: </code>

    检查监听正常,oracle服务也是正常启动的,但是登录不进去

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [oracle@pldb236 admin]$ tnsping PD236
     
    TNS Ping Utility for Linux: Version 11.2.0.1.0 - Production on 23-NOV-2015 14:17:22
     
    Copyright (c) 1997, 2009, Oracle.  All rights reserved.
     
    Used parameter files:
     
     
    Used TNSNAMES adapter to resolve the alias
    Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.180.236)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = powerdes)))
    OK (10 msec)
    [oracle@pldb236 admin]$

    PS:原blog地址:https://blog.csdn.net/mchdba/article/category/3254519,未经过原csdn的博主mchdba允许,谢绝转载


    2,解决方案

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    [oracle@pldb236 bin]$ cd $ORACLE_HOME/bin/
    [oracle@pldb236 bin]$
    [oracle@pldb236 bin]$
    [oracle@pldb236 bin]$ ll oracle
    -rwsr-s--x. 1 oracle oinstall 210823844 Jul 31 13:21 oracle
    [oracle@pldb236 bin]$
    [oracle@pldb236 bin]$ chmod 6571 oracle
    [oracle@pldb236 bin]$
    [oracle@pldb236 bin]$ ll oracle
    -r-srws--x. 1 oracle oinstall 210823844 Jul 31 13:21 oracle
    [oracle@pldb236 bin]$
     
     
     
    [oracle@pldb236 bin]$ rlwrap sqlplus / as sysdba
     
    SQL*Plus: Release 11.2.0.1.0 Production on Mon Nov 23 14:20:09 2015
     
    Copyright (c) 1982, 2009, Oracle.  All rights reserved.
     
     
    Connected to:
    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
     
    SQL>
    SQL>

    ok可以连接上了,问题初步解决


    3,不过3分钟后,又不行了,登录不上去。

    SQL*Plus: Release 11.2.0.1.0 Production on Mon Nov 23 14:29:17 2015

    Copyright (c) 1982, 2009, Oracle. All rights reserved.

    ERROR:
    ORA-12537: TNS:connection closed

    Enter user-name:

    去查看lsnrctl状态:
    [oracle@pldb236 bin]$ lsnrctl status

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 23-NOV-2015 14:30:33
     
    Copyright (c) 1991, 2009, Oracle.  All rights reserved.
     
    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.180.236)(PORT=1521)))
    STATUS of the LISTENER
    ------------------------
    Alias                     LISTENER
    Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production
    Start Date                23-NOV-2015 14:30:19
    Uptime                    0 days 0 hr. 0 min. 13 sec
    Trace Level               off
    Security                  ON: Local OS Authentication
    SNMP                      OFF
    Listener Parameter File   /oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
    Listener Log File         /oracle/app/oracle/diag/tnslsnr/pldb236/listener/alert/log.xml
    Listening Endpoints Summary...
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.180.236)(PORT=1521)))
      (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))
    Services Summary...
    Service "PLSExtProc" has 1 instance(s).
      Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
    Service "powerdes" has 1 instance(s).
      Instance "powerdes", status UNKNOWN, has 1 handler(s) for this service...
    The command completed successfully
    [oracle@pldb236 bin]$

    看到后台alert的日志报错如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <code class=" hljs livecodeserver">        Mon Nov 23 14:32:00 2015
            ORA-00020: maximum number of processes 150 exceeded
            ORA-20 errors will not be written to the alert log for
             the next minute. Please look at trace files to see all
             the ORA-20 errors.
            Mon Nov 23 14:32:47 2015
            Process m000 submission failed with error = 20
            Mon Nov 23 14:33:02 2015
            ORA-00020: maximum number of processes 150 exceeded
            ORA-20 errors will not be written to the alert log for
             the next minute. Please look at trace files to see all
             the ORA-20 errors.
            Mon Nov 23 14:34:03 2015
            ORA-00020: maximum number of processes 150 exceeded
            ORA-20 errors will not be written to the alert log for
             the next minute. Please look at trace files to see all
             the ORA-20 errors.</code>

    解决方案1:
    lsnrctl stop 5分钟后,再lsnrctl start起来,问题解决了,是应用程序一直不停的连接数据库,占满了连接池导致的。

    解决方案2:
    查看oracle的连接数,果然为150

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <code class=" hljs vhdl">SQL> show parameter processes;
     
    NAME                     TYPE    VALUE
    ------------------------------------ ----------- ------------------------------
    aq_tm_processes              integer     0
    db_writer_processes          integer     2
    gcs_server_processes             integer     0
    global_txn_processes             integer     1
    job_queue_processes          integer     1000
    log_archive_max_processes        integer     4
    processes                integer     150
    SQL>
    SQL>
    SQL> </code>

    分析原因:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <code class=" hljs asciidoc">SQL> select count(1) from v$session t where t.status='INACTIVE' and t.username='PLAS';
      COUNT(1)
    ----------
            88
     
    SQL>
    SQL>
    SQL> select count(1) from v$session t where t.status='INACTIVE' and t.username='PLAS';
      COUNT(1)
    ----------
             5
     
    SQL> </code>

    修改配置文件:

    1
    2
    3
    4
    5
    <code class=" hljs ruby">[oracle@pldb236 ~]$ find /oracle -name *init.ora*
    /oracle/app/oracle/product/11.2.0/dbhome_1/dbs/init.ora
    /oracle/app/oracle/product/11.2.0/dbhome_1/srvm/admin/init.ora
    /oracle/app/oracle/admin/powerdes/pfile/init.ora.7112015171232
    [oracle@pldb236 ~]$ </code>

    改动连接数,并且写入参数文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <code class=" hljs oxygene">alter system set processes=500 scope = spfile;
    SQL> alter system set processes=500 scope=spfile;
     
    System altered.
     
    SQL> create pfile from spfile;
     
    File created.
     
    SQL> </code>

    关闭重启oracle实例,启动就可以看到最大连接数已经变成了500,问题解决

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    <code class=" hljs vhdl">SQL> shutdown immediate;
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    SQL> exit
    Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
    [oracle@pldb236 ~]$ rlwrap sqlplus / as sysdba
     
    SQL*Plus: Release 11.2.0.1.0 Production on Mon Nov 23 23:09:00 2015
     
    Copyright (c) 1982, 2009, Oracle.  All rights reserved.
     
    Connected to an idle instance.
     
    SQL> startup;
    ORACLE instance started.
     
    Total System Global Area 6680915968 bytes
    Fixed Size          2213936 bytes
    Variable Size        4362078160 bytes
    Database Buffers     2281701376 bytes
    Redo Buffers           34922496 bytes
    Database mounted.
    Database opened.
    SQL>
    SQL>
    SQL> show parameter processes;
     
    NAME                     TYPE    VALUE
    ------------------------------------ ----------- ------------------------------
    aq_tm_processes              integer     0
    db_writer_processes          integer     2
    gcs_server_processes             integer     0
    global_txn_processes             integer     1
    job_queue_processes          integer     1000
    log_archive_max_processes        integer     4
    processes                integer     500
    SQL> </code>
  • 相关阅读:
    UNIX环境高级编程——System V 共享内存区
    UNIX环境高级编程——system V消息队列
    UNIX环境高级编程——进程间通讯方法整理
    UNIX环境高级编程——system V信号量
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
  • 原文地址:https://www.cnblogs.com/lcword/p/8242192.html
Copyright © 2011-2022 走看看