您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页Oracle并发连接数的设置

Oracle并发连接数的设置

来源:华佗小知识
Oracle并发连接数的设置

不能连接Oracle数据库了,提⽰相关的错误

OERR: ORA-12519 TNS:no appropriate service handler found客户端连接间歇性失败,报错ORA-12519

Cause: the listener could not find any available service handlers that are appropriate for the client connection.

Action: run \"lsnrctl services\" to ensure that the instance(s) have registered

with the listener, and are accepting connections. 检查lsnrctl service ,instance已经注册, 状态显⽰ready时,可以连接。

When the listener believes the current number of connections has reached maximum load,it may set the state of the service handler for an instance to \"blocked\" and begin refusingincoming client connections with either of the following errors: ora-12519 or ora-12516

采⽤服务动态注册的⽅式,由PMON 通过SERVICE_UPDATE 来得到⽬前连接情况,但SERVICE_UPDATE 有时间间隔,所以,listener显⽰的连接数和当前实际的连接数可能不同。 查询解决⽅法:

查看⼀下数据库现有的进程数,是否已经达到参数processes的⼤⼩。 1.select count(*) from v$process; 取得数据库⽬前的进程数。2.select value from v$parameter where name = 'processes'; 取得进程数的上限。3.如已达到上限,修改initSID.ora中的processes的⼤⼩。

4.重新启动数据库到nomount状态下,执⾏create spfile from pfile; 并startup open。 查询数据库⾃启动以来最⼤的并发数量

修改最⼤连接数:

alter system set processes = 300 scope = spfile;重启数据库:

shutdown immediate;startup;

--查看当前有哪些⽤户正在使⽤数据

SELECT osuser, a.username,cpu_time/executions/1000000||'s', sql_fulltext,machine from v$session a, v$sqlarea b

where a.sql_address =b.address order by cpu_time/executions desc; 2

有的时候我们需要调整oracle数据库的最⼤链接数,⽽这个链接数的调整是在oacle下的dbs⽬录下init.ora⽂件中调整的。 ORACLE的连接数(sessions)与其参数⽂件中的进程数(process)有关,它们的关系如下: sessions=(1.1*process+5)

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

但是,Processes的修改不仅应该调整init.ora⽂件中的参数,⽽且应该调整OS的内核参数,象AIX,HPUX,Solaris,SCO,UNIXWare都

是这样,OS的调整是需要重新启动的,⽽且这个参数的设置不能简单按照多少个终端要连到这个服务器上⽽定,最关键是考虑会有多少同时连上的session(在使⽤⼀些共享连接的中间件时,⼀般就不需要太⼤),当然还要考虑⼀些Oracle的后台进程,还有⼀些系统维护⼯作需要多⼀些连接等。

我的atmp⼤前置机器上对oracle调整的时候,其使⽤的是unixware操作系统,在做链接数调整的时候,要先对核⼼参数进⾏调整。 核⼼主要相关的参数的调整如下: SHMMAX 1000000000SHMMIN 1SHMMNI 200 SHMSEG 15 SEMMNI 1000 SEMMSL 300 SEMMNS 230SEMOPM 20

其中semmni,semmns,semmsl要加⼤,⾄少要⽐processes⼤18 ;

SEMMNI(10,10000;150):指定在核⼼中信号识别的数量。这是可以在任意给定时间被激活的唯⼀信号设置数量。缺省值是150。最⼤值由系统⾃动调整产⽣。

SEMMSL(25,300;150):指定每个信号识别中信号量的最⼤值。缺省值是25。SEMMNS 除最⼤db外的所有db 的PROCESSES之和+2*最⼤db的PROCESSES+10* 实例数。如3个实例进程数分别为100、100、200,则=(100+100)+2*200+10*3=630

tyle=\"LINE-HEIGHT: 150%; FONT-FAMILY: 宋体\">SEMOPM(10,20;10):指定在每个系统调⽤semop中能够被执⾏的信号操作量的最⼤值。缺省值是10。

SHMMAX(131072,1073741824;524288):指定了共享内存部分⼤⼩的最⼤值。等于0.5 × 物理内存字节数

SHMMNI(10,1000;100):指定了系统范围内共享内存标识的最⼤值。

SHMSEG(6,15;6):指定了与每个进程相关连的共享内存块(或标识)的数量。缺省值是6。与每个进程相关连的共享内存块的最⼤值与进程拥有的未使⽤空间有关。因此,尽管⼀个进程拥有少于SHMSEG数值的共享内存块,它也有可能因为其有限的空间⽽不能与其它进程相联系。 init.ora中调整为:

processes = 50 # SMALL #processes = 100 # MEDIUM # processes = 200 # LARGE 修改oracle 150 的最⼤连接数使⽤sys,以sysdba权限登录:c:\"sqlplus /nologSQL>conn / as sysdba

SQL> show parameter processes; NAME TYPE VALUE

------------------------------------ ----------- ------------------------------aq_tm_processes integer 1db_writer_processes integer 1job_queue_processes integer 10

log_archive_max_processes integer 1processes integer 150

SQL> alter system set processes=300 scope = spfile; 系统已更改。

SQL> show parameter processes; NAME TYPE VALUE

------------------------------------ ----------- ------------------------------aq_tm_processes integer 1db_writer_processes integer 1job_queue_processes integer 10log_archive_max_processes integer 1processes integer 150 SQL> create pfile from spfile; ⽂件已创建。 重启数据库,OK!

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务