数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

Oracle连接数太多报错-ORA-12516错误


发布日期:2022年06月27日
 
Oracle连接数太多报错-ORA-12516错误

系统上线一下子有几百人用数据库出现异常

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 等默认设置都为零也就是没有限制我们可以放心大胆地使用数据库了

上一篇:甲骨文宣布推出Oracle内存数据库11g

下一篇:oracle数据库中sql基础