云淡风清's blog

首页 新随笔 管理

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

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(*)
----------
??????? 45

SQL> show parameter processes

NAME???????????????????????????????? TYPE??????? VALUE
------------------------------------ ----------- ----------------------
aq_tm_processes????????????????????? integer???? 0
db_writer_processes????????????????? integer???? 1
gcs_server_processes???????????????? integer???? 0
job_queue_processes????????????????? integer???? 10
log_archive_max_processes??????????? integer???? 2
processes??????????????????????????? integer???? 50
SQL> show parameter sessions

NAME???????????????????????????????? TYPE??????? VALUE
------------------------------------ ----------- ----------------------
java_max_sessionspace_size?????????? integer???? 0
java_soft_sessionspace_limit???????? integer???? 0
license_max_sessions???????????????? integer???? 0
license_sessions_warning???????????? integer???? 0
logmnr_max_persistent_sessions?????? integer???? 1
sessions???????????????????????????? integer???? 60
shared_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 processes

NAME???????????????????????????????? TYPE??????? VALUE
------------------------------------ ----------- ----------------------
aq_tm_processes????????????????????? integer???? 0
db_writer_processes????????????????? integer???? 1
gcs_server_processes???????????????? integer???? 0
job_queue_processes????????????????? integer???? 10
log_archive_max_processes??????????? integer???? 2
processes??????????????????????????? integer???? 50
SQL> show parameter sessions

NAME???????????????????????????????? TYPE??????? VALUE
------------------------------------ ----------- ----------------------
java_max_sessionspace_size?????????? integer???? 0
java_soft_sessionspace_limit???????? integer???? 0
license_max_sessions???????????????? integer???? 0
license_sessions_warning???????????? integer???? 0
logmnr_max_persistent_sessions?????? integer???? 1
sessions???????????????????????????? integer???? 60
shared_server_sessions?????????????? integer

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

SQL> shutdown immediate

SQL> startup

SQL> show parameter processes
NAME???????????????????????????????? TYPE??????? VALUE
------------------------------------ ----------- ----------------------
aq_tm_processes????????????????????? integer???? 0
db_writer_processes????????????????? integer???? 1
gcs_server_processes???????????????? integer???? 0
job_queue_processes????????????????? integer???? 10
log_archive_max_processes??????????? integer???? 2
processes??????????????????????????? integer???? 300
SQL> show parameter sessions

NAME???????????????????????????????? TYPE??????? VALUE
------------------------------------ ----------- ----------------------
java_max_sessionspace_size?????????? integer???? 0
java_soft_sessionspace_limit???????? integer???? 0
license_max_sessions???????????????? integer???? 0
license_sessions_warning???????????? integer???? 0
logmnr_max_persistent_sessions?????? integer???? 1
sessions???????????????????????????? integer???? 335
shared_server_sessions?????????????? integer

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

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
?

posted on 2008-02-03 16:02  云淡风清(ydfqing)  阅读(5956)  评论(0)    收藏  举报