问题描述:客户端连接数据库报错
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
|
|