ORA-12537错误的解决

环境和问题:OA-ORACLE  通过 DB-LINK 链接 SAP-ORACLE,突然有一天,OA 取SAP数据报错,不能连接到  sap-oracle 数据库。 经检查,SAP本身正常在用,监听服务也正常。一系列排查后锁定原因:processes  超限, sap-oracle 不能被连接。 外部oracle用 dblink 每次取sap-oracle数据时就会创建新的链接,sap-oracle会相应创建新的进程,如果没有及时释放,当进程超过上限了,就会拒绝新的连接请求。  解决办法要么调整上限,要么 对dblink的使用优化,及时释放,经检查是OA端系统的一个BUG, 链接不会及时释放,调整使用方法后解决。

ORACLE 端分析方法:

show parameter processes; --显示进程配置 sysdba权限
select count(*) from v$process; -- 查看目前进程数
select count(*) from v$session; -- 查看目前会话数 和进程 有一定的正比关系。

alter system set processes=400 scope = spfile; --修改 processes 上限 sysdba权限

--进一步可以分析会话链接,看哪个用户或客户端异常
select * from V$SESSION where username is not null --查看当前连接数
select username,count(username) from V$SESSION where username is not null group by username --按用户分组连接数
select program, count(*) from V$SESSION group by  program --按客户端程序分组

select  program,SID,SERIAL#  from v$session order by program

--强制结束session方法: kill session  参数是 'sid,serial#'

alter system kill session  '27,911'

--通过查客户端session并构造 kill session SQL

SQL> select    'alter system kill session  ' || ''''  ||sid||','||serial#||''''  as sql    from v$session where program like 'oracle@oa.hongshang.cn%'  ;

SQL
--------------------------------------------------------------------------------
alter system kill session  '27,911'
alter system kill session  '32,1520'
alter system kill session  '35,1014'