批改Oracle连接数

修改Oracle连接数

问题描述:客户端连接数据库报错

ORA-12516: TNS: 监听程序无法找到匹配协议栈的可用句柄

解决过程:
1。查看当前会话数、processes和sessions值,发现session数和2个参数的值已经非常逼近

SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 10月 9 15:50:21 2006Copyright (c) 1982, 2005, Oracle.? All rights reserved.SQL> conn?/ as sysdba已连接。SQL> select count(*) from v$session;? COUNT(*)----------??????? 45SQL> show parameter processesNAME???????????????????????????????? TYPE??????? VALUE------------------------------------ ----------- ----------------------aq_tm_processes????????????????????? integer???? 0db_writer_processes????????????????? integer???? 1gcs_server_processes???????????????? integer???? 0job_queue_processes????????????????? integer???? 10log_archive_max_processes??????????? integer???? 2processes??????????????????????????? integer???? 50SQL> show parameter sessionsNAME???????????????????????????????? TYPE??????? VALUE------------------------------------ ----------- ----------------------java_max_sessionspace_size?????????? integer???? 0java_soft_sessionspace_limit???????? integer???? 0license_max_sessions???????????????? integer???? 0license_sessions_warning???????????? integer???? 0logmnr_max_persistent_sessions?????? integer???? 1sessions???????????????????????????? integer???? 60shared_server_sessions?????????????? integer

2。修改processes和sessions值

SQL> alter system set processes=300 scope=spfile;系统已更改。SQL> alter system set sessions=300 scope=spfile;系统已更改。

3。查看processes和sessions参数,但更改并未生效

SQL> show parameter processesNAME???????????????????????????????? TYPE??????? VALUE------------------------------------ ----------- ----------------------aq_tm_processes????????????????????? integer???? 0db_writer_processes????????????????? integer???? 1gcs_server_processes???????????????? integer???? 0job_queue_processes????????????????? integer???? 10log_archive_max_processes??????????? integer???? 2processes??????????????????????????? integer???? 50SQL> show parameter sessionsNAME???????????????????????????????? TYPE??????? VALUE------------------------------------ ----------- ----------------------java_max_sessionspace_size?????????? integer???? 0java_soft_sessionspace_limit???????? integer???? 0license_max_sessions???????????????? integer???? 0license_sessions_warning???????????? integer???? 0logmnr_max_persistent_sessions?????? integer???? 1sessions???????????????????????????? integer???? 60shared_server_sessions?????????????? integer

4。重启数据库,使更改生效

SQL> shutdown immediateSQL> startupSQL> show parameter processesNAME???????????????????????????????? TYPE??????? VALUE------------------------------------ ----------- ----------------------aq_tm_processes????????????????????? integer???? 0db_writer_processes????????????????? integer???? 1gcs_server_processes???????????????? integer???? 0job_queue_processes????????????????? integer???? 10log_archive_max_processes??????????? integer???? 2processes??????????????????????????? integer???? 300SQL> show parameter sessionsNAME???????????????????????????????? TYPE??????? VALUE------------------------------------ ----------- ----------------------java_max_sessionspace_size?????????? integer???? 0java_soft_sessionspace_limit???????? integer???? 0license_max_sessions???????????????? integer???? 0license_sessions_warning???????????? integer???? 0logmnr_max_persistent_sessions?????? integer???? 1sessions???????????????????????????? integer???? 335shared_server_sessions?????????????? integer

最后测试加大连接数到50,100都没报ORA-12516错误。

oracle中系统process和session的关系
oracle中系统process和session的关系
 
在Shared Server中的Process 和Oracle 中的Session不是一一对应的,Shared Server中的Process 一个对应着Oracle 中的一个或者一个以上的Session。我在dedicated server机器上试验了
数据库的session和操作系统process是对应的

 

即表示一个session对应一个process,但是一个process未必对应一个session

可以通过SELECT spid
FROM v$process
WHERE NOT EXISTS ( SELECT 1
FROM v$session
WHERE paddr = addr); 查看

SQL> select count(*) from v$process;COUNT(*)
———-
53

SQL> select count(*) from v$session;

COUNT(*)
———-
50

ORA-00018: maximum number of sessions exceeded
用以下命令查看目前系统设置的最大SESSIONS数

show parameter processes
show parameter sessions

修改一下文件增加最大SESSIONS数:

/u01/oracle/proddb/8.1.7/dbs/init.ora

增加processes的数量

sessions=1.1 * processes + 5