oracle 大量連接導致數據庫不能登錄


系統遇到過幾次這種問題,一個系統申請的session數過大,導致數據庫進程數滿,無法連接的問題。

pl sql develope 報的錯誤是:ORA-12170:TNS:鏈接超時

 

oracle用戶登錄服務器,使用dba身份進入sqlplus:

sqlplus / as sysdba

報錯信息如下:

SQL*Plus: Release 11.2.0.1.0 Production on Thu Feb 1 18:34:46 2018

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

ERROR:
ORA-00020: maximum number of processes (1000) exceeded

線程數超過最大值1000了。

由於oracle 線程數超過最大,所以不能登錄了。(當然,sqlplus / nolog 是可以登的,但是不能用)

1、這個時候,就只有關閉oracle 的監聽:  

lsnrctl stop   # start 啟動  status 查看狀態

關閉了監聽,就不會有新的用戶登錄進來,也不會生成新的session,占用process了

稍等一下,就可以使用sqlplus / as sysdba 登錄了(oracle 會保存一些已經關閉的session,這些session會被標記為“kill”狀態,2小時候清除,所以關閉監聽后,一會就會,process 使用就會掉一點下來)

2、這個時候,執行SQL:

select count(1) from v$session;

查看session使用情況。

3、執行SQL:

select machine,count(1)coun from v$session group by machine order by 2 desc

查看session數最多的機器(也可以換成user/program)

4、這樣,就找到占用session多的機器、用戶、程序。然后執行如下SQL:

select spid, osuser, s.program
     from v$session s,v$process p
     where s.paddr=p.addr and s.machine = 'venn01';

注意最后一個條件,換為上一步查出來的數據,字段也要改下

spid即為占用session最多的機器、用戶、程序的線程號(同系統進程號)

5、執行:  

kill -9 spid

可殺掉session(見效快),參見我的博客:關於oracle的鎖表解決session marked for kill

 6、這個時候,就可以使用pl sql developer登錄了,執行SQL

select 'kill -9 '||spid, osuser, s.program
     from v$session s,v$process p
     where s.paddr=p.addr and s.machine = 'venn01';

7、可以打印出kill 命令,直接copy 一列,粘貼到服務器上執行,就搞定了。

 

 

 

科普一下oracle的session和process

session : 指用戶連接的session

process : 指session執行的線程

session 可以從 v$session 表查看,process 可以從v$process 表查看

session和process 表的關系為:

select s.sid,p.PID,s.*,p.*
     from v$session s,v$process p
     where s.paddr=p.addr

session表中保存了process的地址。

select * from v$parameter 
where name like 'sessions' or name like 'processes'

v$parameter 表可以查看session和process的配置,建議配置session 略大於process,可以修改(重啟生效):

SQL> alter system set processes=500 scope=spfile;
SQL> alter system set sessions=555 scope=spfile;

 

也可以這樣 查看:

SQL>show parameter processes;    
SQL>show parameter sessions;    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM