您的位置:首页 > 其它

ORA-12516错误 解决方案

2008-09-11 14:23 197 查看
这个问题有很多种原因,比如pfile文件、tnsnames.ora的配置,如果都正确,下面是一种常见的原因

解决过程:

查看一下数据库现有的进程数,是否已经达到参数processes的大小。

a.select count(*) from v$process; 取得数据库目前的进程数。
b.select value from v$parameter where name = 'processes'; 取得进程数的上限。
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


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_soft_sessionspace_limit integer 0l


icense_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=335 scope=spfile;


系统已更改。

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


SQL> show parameter processes


NAME TYPE VALUE


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


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


SQL> startup


SQL> show parameter processes


NAME TYPE VALUE


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_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

其它:

ORACLE的连接数(sessions)与其参数文件中的进程数(process)有关,它们的关系如下:

sessions=(1.1*process+5)

但是我们增加process数时,往往数据库不能启动了。这因为我们还漏调了一个unix系统参数:它是/etc/proc/kernel 中semmns,这是unix系统的信号量参数。每个process会占用一个信号量。semmns调整后,需要重新启动unix操作系统,参数才能生效。不过它的大小会受制于硬件的内存或ORACLE SGA。范围可从200——2000不等。

semmns的计算公式为: SEMMNS>processes+instance_processes+system

processes=数据库参数processes的值 instance_processes=5(smon,pmon,dbwr,lgwr,arch)

system=系统所占用信号量。系统所占用信号量可用下列命令查出:
#ipcs -s
其中列NSEMS显示系统已占用信号量。

其它一些跟连接有关的参数,如 licence_max_sessions, licence_sessions_warning 等默认设置都为零,也就是没有限制。我们可以放心大胆地使用数据库了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: