oracle 有大量LOCAL=NO进程连接数据库

系统的session数过大,导致数据库进程数满,无法连接的问题。

oracle用户登录服务器,使用dba身份进入sqlplus:

命令:sqlplus / as sysdba

报错:ERROR: ORA-00020: maximum number of processes (1000) exceeded(线程数超过最大值1000了)

管理员也无法登陆数据库 只有关闭oracle 的监听:  

命令:lsnrctl stop

关闭了监听,就不会有新的用户登录进来,也不会生成新的会话,占用进程了

这个时候可以使用管理员登录了(sqlplus / as sysdba)

2、登陆数据库之后,查看会话session的使用情况

命令:select count(1) from v$session;

3、查看session数最多的机器

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

4、下面命令可以查询到:占用session最多的机器、用户、程序的线程号(同系统进程号)这样,就找到占用session多的机器、用户、程序。

命令:

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

5、结束相关占用比较多的进程(spid 进程号)  

命令:kill -9 spid

 6、为了方便可以通过sql 语句获取spid号,打印出kill 命令,直接copy ,粘贴到服务器上执行

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

 

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

session : 指用户连接的session

process : 指session执行的线程

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

session和process 表的关系为:session表中保存了process的地址。

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

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

在v$parameter 表可以查看session和process的配置,建议配置session 略大于process,可以修改(但重启后生效)

相关修改的命令:alter system set processes=500 scope=spfile;

        alter system set sessions=555 scope=spfile;

或者:show parameter processes;

show parameter sessions;

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值