问题
模拟报错
模拟会话数
for ((i=0;i<10;i++)); do sqlplus / as sysdba 2>/dev/null & done
sqlplus db_username/db_password@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=IP地址)(PORT=1521)))(CONNECT_DATA=(ORACLE_SID=baipx1)))
查看参数
查看连接数
解决方案
方案1 临时解决
查看连接数最多的
select b.machine, b.program, count(*)
from v$process a, v$session b where a.addr = b.paddr
and b.username is not null
group by b.machine, b.program
order by count(*) desc;
查看会话连接情况
SET LINESIZE 100
COLUMN spid FORMAT A10
COLUMN username FORMAT A10
COLUMN program FORMAT A45
SELECT s.inst_id,
s.sid,
s.serial#,
p.spid,
s.username,
s.program
FROM gv$session s
JOIN gv$process p ON p.addr = s.paddr AND p.inst_id = s.inst_id
WHERE s.type != 'BACKGROUND';
批量Kill 会话
SELECT 'alter system disconnect session ''' || sid || ',' || serial# ||
''' immediate;'
FROM (SELECT SID, SERIAL#, INST_ID, MODULE, STATUS
FROM gv$session S
WHERE S.USERNAME IS NOT NULL
AND S.LAST_CALL_ET >= 2 * 60 * 60
AND S.STATUS = 'INACTIVE'
ORDER BY INST_ID ASC);
SELECT SID, SERIAL#, INST_ID, MODULE, STATUS
FROM gv$session S
WHERE S.USERNAME IS NOT NULL
AND S.LAST_CALL_ET >= 2 * 60 * 60
AND S.STATUS = 'INACTIVE'
ORDER BY INST_ID ASC;
kill 会话
解决方案2 根本解决
show parameter processes
alter system set processes=2000 scope=spfile sid='*';
重启库
show parameter processes