系统上线一下子有几百人用数据库出现异常
ORA: TNS: 监听程序找不到符合协议堆栈要求的可用处理程
一开始以为数据库出了问题呢
使用sqlplus连接以后查看当前会话数processes和sessions值发现session数和个参数的值已经非常逼近
Sql代码
SQL> select count(*) from v$session;
COUNT(*)
SQL> show parameter processes
NAME TYPE VALUE
db_writer_processes integer
gcs_server_processes integer
job_queue_processes integer
log_archive_max_processes integer
processes integer
SQL> show parameter sessions
NAME TYPE VALUE
java_soft_sessionspace_limit integer l
icense_max_sessions integer
license_sessions_warning integer
logmnr_max_persistent_sessions integer
sessions integer
shared_server_sessions integer
修改processes和sessions值
Sql代码
SQL> alter system set processes= scope=spfile;
系统已更改
SQL> alter system set sessions= scope=spfile;
系统已更改
查看processes和sessions参数但更改并未生效
Sql代码
SQL> show parameter processes
NAME TYPE VALUE
db_writer_processes integer
gcs_server_processes integer
job_queue_processes integer
log_archive_max_processes integer
processes integer
SQL> show parameter sessions
NAME TYPE VALUE
license_max_sessions integer
license_sessions_warning integer
logmnr_max_persistent_sessions integer
sessions integer
shared_server_sessions integer
重启数据库使更改生效
Sql代码
SQL> shutdown
SQL> startup
SQL> show parameter processes
NAME TYPE VALUE
db_writer_processes integer
gcs_server_processes integer
job_queue_processes integer
log_archive_max_processes integer
processes integer
SQL> show parameter sessions
NAME TYPE VALUE
java_soft_sessionspace_limit integer
license_max_sessions integer
license_sessions_warning integer
logmnr_max_persistent_sessions integer
sessions integer
shared_server_sessions integer
其他
ORACLE的连接数(sessions)与其参数文件中的进程数(process)有关它们的关系如下
sessions=(*process+)
但是我们增加process数时往往数据库不能启动了这因为我们还漏调了一个unix系统参数它是/etc/proc/kernel 中semmns这是unix系统的信号量参数每个process会占用一个信号量semmns调整后需要重新启动unix操作系统参数才能生效不过它的大小会受制于硬件的内存或ORACLE SGA范围可从——不等
semmns的计算公式为 SEMMNS>processes+instance_processes+system
processes=数据库参数processes的值 instance_processes=(smonpmondbwrlgwrarch)
system=系统所占用信号量系统所占用信号量可用下列命令查出
#ipcs s
其中列NSEMS显示系统已占用信号量
其它一些跟连接有关的参数如 licence_max_sessions licence_sessions_warning 等默认设置都为零也就是没有限制我们可以放心大胆地使用数据库了