zoukankan      html  css  js  c++  java
  • ORA-00020: maximum number of processes (40) exceeded模拟会话连接数满

    问题描述:在正式生产环境中,有的库建的process和session连接数目设置的较小,导致后期满了无法连接。因为正式库无法进行停库修改,只能释放连接,做个测试模拟

    1. 修改现有最大会话与进程连接数

    SQL> alter system set processes = 35 scope = spfile;
    
    System altered.
    
    SQL> alter system set sessions = 40 scope = spfile;
    
    System altered.

    2.重启生效,加大连接数

    通过打开会话框以及连接plsql窗口制造连接数

     制造到一定数目时,会发现sqlplus已经登陆不上去

    后台日志:

    ORA-00020: maximum number of processes (40) 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.

     

    此时的连接数情况

    SQL> select count(*) from v$process;
    
      COUNT(*)
    ----------
        39
    
    SQL> select count(*) from v$session;
    
      COUNT(*)
    ----------
        36

    3.删除无效session

    <一> plsql删除会话

     

    选中要删除的会话,删除完后在后台不会直接释放,在连接窗口执行命令会发现会话和已经被killed掉,然后这边后台释放完成

     

    <二>  sqlplus删除会话

    查询会话

    SQL> select username,status,wait_time,last_call_et from v$session;
    
    USERNAME               STATUS     WAIT_TIME LAST_CALL_ET
    ------------------------------ -------- ---------- ------------
                       ACTIVE         0       1874
                       ACTIVE         0       1873
                       ACTIVE         0       1873
                       ACTIVE         0       1873
                       ACTIVE         0       1869
                       ACTIVE         0       1868
                       ACTIVE         0       1858
    SYS                   INACTIVE      0       1805
    SYS                   ACTIVE        -1          0
                       ACTIVE         0       1873
                       ACTIVE         0       1873
    
    USERNAME               STATUS     WAIT_TIME LAST_CALL_ET
    ------------------------------ -------- ---------- ------------
                       ACTIVE         0       1873
                       ACTIVE         0       1868
    SYSTEM                   INACTIVE      0       1826
                       ACTIVE         0       1858
    SYS                   INACTIVE      0       1711
    SYS                   INACTIVE      0        826
                       ACTIVE         0       1874
                       ACTIVE         0       1873
                       ACTIVE         0       1873
                       ACTIVE         0       1873
                       ACTIVE         0       1868
    
    USERNAME               STATUS     WAIT_TIME LAST_CALL_ET
    ------------------------------ -------- ---------- ------------
                       ACTIVE         0       1868
    SYS                   INACTIVE      0       1809
    SYS                   INACTIVE      0       1705
    SYS                   INACTIVE      0       1633
    SYS                   INACTIVE      0       1417
                       ACTIVE         0       1874
                       ACTIVE         0       1873
                       ACTIVE         0       1873
                       ACTIVE         0       1873
    SYS                   INACTIVE      0       1813
                       ACTIVE         0       1868
    
    USERNAME               STATUS     WAIT_TIME LAST_CALL_ET
    ------------------------------ -------- ---------- ------------
    SYS                   INACTIVE      0       1757
    SCOTT                   INACTIVE      0         24
    SYSTEM                   INACTIVE      0       1567
    
    36 rows selected.

    生成kill会话语句

     

    SQL> select 'alter system kill session  '''||sid||','||serial#||''';'from v$session where LAST_CALL_ET>500 AND status='INACTIVE';
    
    'ALTERSYSTEMKILLSESSION'''||SID||','||SERIAL#||''';'
    --------------------------------------------------------------------------------
    alter system kill session  '11,1';
    alter system kill session  '26,21';
    alter system kill session  '28,29';
    alter system kill session  '29,7';
    alter system kill session  '51,3';
    alter system kill session  '52,9';
    alter system kill session  '53,9';
    alter system kill session  '64,9';
    alter system kill session  '69,17';
    alter system kill session  '73,31';
    alter system kill session  '74,5';
    
    'ALTERSYSTEMKILLSESSION'''||SID||','||SERIAL#||''';'
    --------------------------------------------------------------------------------
    alter system kill session  '75,13';
    
    12 rows selected.

     

    执行sql语句

    SQL> alter system kill session  '11,1';
    SQL> alter system kill session  '26,21';
    SQL> alter system kill session  '28,29';
    SQL> alter system kill session  '29,7';
    SQL> alter system kill session  '51,3';
    SQL> alter system kill session  '52,9';
    SQL> alter system kill session  '53,9';
    SQL> alter system kill session  '64,9';
    SQL> alter system kill session  '69,17';
    SQL> alter system kill session  '73,31';
    SQL> alter system kill session  '74,5';

    在后台其中一个连接会话执行命令,已经语法执行

    SQL> archive log list;

    ORA-00028: your session has been killed

     

    <三> 操作系统kill会话

    查询不活跃会话的sid,转换为操作系统的pid,通过操作系统进行kill掉进程

     

    SQL> select username,sid,serial#,status,last_call_et from v$session where status='INACTIVE';
    
    USERNAME                  SID    SERIAL# STATUS   LAST_CALL_ET
    ------------------------------ ---------- ---------- -------- ------------
    SYS                       11       3 INACTIVE           340
    SYS                       28      31 INACTIVE           258
    SYS                       51       5 INACTIVE           267
    SYS                       52      11 INACTIVE           255
    SYS                       53      11 INACTIVE           253
    SYS                       69      19 INACTIVE           261
    SCOTT                       74       7 INACTIVE         7
    SYSTEM                       75      13 INACTIVE          3429

     

    sid转换spid

     

    select spid from v$process where addr in (select paddr from v$session where sid=11); 
    select spid from v$process where addr in (select paddr from v$session where sid=28); 
    select spid from v$process where addr in (select paddr from v$session where sid=51); 
    select spid from v$process where addr in (select paddr from v$session where sid=52); 
    select spid from v$process where addr in (select paddr from v$session where sid=53); 
    select spid from v$process where addr in (select paddr from v$session where sid=69); 
    select spid from v$process where addr in (select paddr from v$session where sid=74); 
    select spid from v$process where addr in (select paddr from v$session where sid=75);

     

    操作系统进程kill

    [oracle@orcl ~]$ kill -9 5294
    [oracle@orcl ~]$ kill -9 5391
    [oracle@orcl ~]$ kill -9 5384
    -bash: kill: (5384) - No such process
    [oracle@orcl ~]$ kill -9 5393
    [oracle@orcl ~]$ kill -9 5395
    [oracle@orcl ~]$ kill -9 5389
    [oracle@orcl ~]$ kill -9 5413
    [oracle@orcl ~]$ kill -9 4996

    查看现有连接,已经被释放

    SQL> archive log list;

    ORA-03135: connection lost contact

     

    查看连接数据库连接数

    SQL> select count(*) from v$session;

     

      COUNT(*)

    ----------

    29

    SQL> select count(*) from v$process;

     

      COUNT(*)

    ----------

    35

     

    <四> ALTER SYSTEM DISCONNECT SESSION

    POST_TRANSACTION表示等待事务完成后断开会话,IMMEDIATE表示中断会话,立即回滚事务。使用immediate可以立即释放会话
    SQL> ALTER SYSTEM DISCONNECT SESSION 'sid,serial#' POST_TRANSACTION;
    SQL> ALTER SYSTEM DISCONNECT SESSION 'sid,serial#' IMMEDIATE;

     

    <五> 增加进程和会话数,不过要停库

    1.查看processes和sessions参数
    
    show parameter processes
    show parameter sessions
    select count(*) from v$session ; --当前的session连接数
    select count(*) from v$process ; --当前的数据库连接数
    select value from v$parameter where name ='processes'; --数据库允许的最大连接数
    
    2.修改processes和sessions值
    
    alter system set processes=1000 scope=spfile;
    alter system set sessions=1105 scope=spfile;
    3.重启数据库 shutdown immediate; startup;

     

     

     

     

  • 相关阅读:
    第四次实验报告
    第三次实验报告
    第五章循环结构课后反思
    第二次实验报告
    第一次实验报告
    第一次作业
    第九章 结构体与共用体
    第八章实验报告
    第七章数组实验
    第六章函数与宏定义实验报告(2)
  • 原文地址:https://www.cnblogs.com/houzhiheng/p/13964522.html
Copyright © 2011-2022 走看看