问题描述:在正式生产环境中,有的库建的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(*)---------- 39sql> v$session; COUNT(*36
3.删除无效session
<一> plsql删除会话
选中要删除的会话,删除完后在后台不会直接释放,在连接窗口执行命令会发现会话和已经被killed掉,然后这边后台释放完成
<二> sqlplus删除会话
查询会话
sql> select username,status,wait_time,last_call_et v$session;USERname STATUS WAIT_TIME LAST_CALL_ET------------------------------ -------- ---------- ------------ ACTIVE 0 18741873186918681858SYS INACTIVE 1805SYS ACTIVE -1 0USERname STATUS WAIT_TIME LAST_CALL_ET------------------------------ -------- ---------- ------------SYstem INACTIVE 182617110 826180917051633141718131757SCott INACTIVE 0 24156736 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,2128,2929,751,352,953,1)">64,1)">69,1773,3174,575,1312 rows selected.
执行sql语句
sql> alter system kill session ;sql> alter system kill session ';
在后台其中一个连接会话执行命令,已经语法执行
sql> archive log List;
ORA-00028: your session has been killed
<三> *** 作系统kill会话
查询不活跃会话的sID,转换为 *** 作系统的pID,通过 *** 作系统进行kill掉进程
sql> where status=;USERname SID SERIAL# STATUS LAST_CALL_ET------------------------------ ---------- ---------- -------- ------------SYS 11 3 INACTIVE 34028 31 INACTIVE 25851 5 INACTIVE 26752 11 INACTIVE 25553 25369 19 INACTIVE 261SCott 74 7 INACTIVE 7SYstem 75 13 INACTIVE 3429
sID转换为spID
select spID from v$process where addr in (select paddr where sID=11); 28515253697475);
*** 作系统进程kill掉
[oracle@orcl ~]$ kill -9 5294[oracle@orcl ~]$ kill -53915384-bash: kill: (5384) - No such process[oracle@orcl ~]$ kill -53935395538954134996
查看现有连接,已经被释放
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 processesshow parameter sessionsfrom v$session ; --当前的session连接数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;
总结
以上是内存溢出为你收集整理的ORA-00020: maximum number of processes (40) exceeded模拟会话连接数满全部内容,希望文章能够帮你解决ORA-00020: maximum number of processes (40) exceeded模拟会话连接数满所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)