a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 117|回复: 1

[考试辅导] Oracle技术:Oracle并发连接数的设置

[复制链接]
发表于 2012-8-4 14:06:19 | 显示全部楼层 |阅读模式
 不能连接Oracle数据库了,提示相关的错误7 m3 }: p/ p1 a4 I. ]
  OERR: ORA-12519 TNS:no appropriate service handler found) C0 Q8 D5 c% a* H% f
  客户端连接间歇性失败,报错ORA-12519: e% p7 B6 }# k8 H, D7 d! b
  Cause: the listener could not find any available service handlers that are
  \$ M/ r" f" u- O, ?  appropriate for the client connection.
: ?2 f& Y0 j3 {5 F$ {7 X+ k2 V  Action: run "lsnrctl services" to ensure that the instance(s) have registered
5 W% {& G! L) B# C9 p, ]  with the listener, and are accepting connections. 检查lsnrctl service ,instance已经注册,状态显示ready时,可以连接。
4 @5 f: F: @" ?/ N4 t  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 refusing
( D% [4 B/ c2 G+ V$ r6 b  incoming client connections with either of the following errors: ora-12519 or ora-12516
) t. z. l7 l" D$ w, w# B, S0 j  采用服务动态注册的方式,由PMON 通过SERVICE_UPDATE 来得到目前连接情况,但SERVICE_UPDATE 有时间间隔,$ s. L- k, d  C* p5 P
  所以,listener显示的连接数和当前实际的连接数可能不同。2 F% I5 g8 s8 U( ^
  查询解决方法:
8 b# Z; F! W3 }- i  查看一下数据库现有的进程数,是否已经达到参数processes的大小。; S5 Q& E- U/ D# `' i! d$ |
  1.select count(*) from v$process; 取得数据库目前的进程数。
+ p) j! y/ q" K2 U4 q; t  2.select value from v$parameter where name = 'processes'; 取得进程数的上限。+ v, h& h: L4 p0 A( j  ~7 e
  3.如已达到上限,修改initSID.ora中的processes的大小。
& S5 f, q$ c3 ^  4.重新启动数据库到nomount状态下,执行create spfile from pfile; 并startup open。5 i' e6 i& @* D- {
  查询数据库自启动以来最大的并发数量
1 N% o7 ]+ V( p' Y. O4 a, a  修改最大连接数:# u, |/ b. w' I, T+ E3 u2 d9 b
  alter system set processes = 300 scope = spfile;+ G8 h1 R# e) ]& t" z/ |6 t
  重启数据库:
8 ^. N+ r% W4 h$ V  shutdown immediate;% S7 h$ @7 {  g: J6 H1 i! c
  startup;
' n; M3 o: F  w4 i# K2 p, C  --查看当前有哪些用户正在使用数据
8 p! c3 p2 }2 \" O. }! z  SELECT osuser, a.username,cpu_time/executions/1000000||'s', sql_fulltext,machine- c% ~, {, X% B: g) u1 t8 D3 t6 G2 ~
  from v$session a, v$sqlarea b
; d2 x) Z' ~4 w7 m# Q  where a.sql_address =b.address order by cpu_time/executions desc;" j4 q& ?9 e* {& l- s, v4 v
  2/ r: }  Q5 K' n3 f
  有的时候我们需要调整oracle数据库的最大链接数,而这个链接数的调整是在oacle下的dbs目录下init.ora文件中调整的。
. Y# d4 v4 p7 ?  g$ W( f  v+ k8 Z; s  ORACLE的连接数(sessions)与其参数文件中的进程数(process)有关,它们的关系如下:8 s; u& n# ^2 [' d& S+ A  k3 Y
  sessions=(1.1*process+5)
0 u& t; Y- z( Z' K& i  但是我们增加process数时,往往数据库不能启动了。这因为我们还漏调了一个unix系统参数:它是核心参数中的semmns,这是unix系统的信号量参数。每个process会占用一个信号量。semmns调整后,需要重新启动unix操作系统,参数才能生效。不过它的大小会受制于硬件的内存或 ORACLE SGA。范围可从200——2000不等。0 c6 M5 p* ]" T4 @8 I4 d
  但是,Processes的修改不仅应该调整init.ora文件中的参数,而且应该调整OS的内核参数,象 AIX,HPUX,Solaris,SCO,UNIXWare都是这样,OS的调整是需要重新启动的,而且这个参数的设置不能简单按照多少个终端要连到这个服务器上而定,最关键是考虑会有多少同时连上的session(在使用一些共享连接的中间件时,一般就不需要太大),当然还要考虑一些Oracle的后台进程,还有一些系统维护工作需要多一些连接等。
/ J* e$ c% u% O6 g  我的atmp大前置机器上对oracle调整的时候,其使用的是unixware操作系统,在做链接数调整的时候,要先对核心参数进行调整。' c+ \1 Y* O1 J
  核心主要相关的参数的调整如下:0 K1 {  P7 l/ Q5 W9 X
  SHMMAX 1000000000" N8 }) h1 f5 j6 u. ?- S9 m1 e2 w
  SHMMIN 1
6 v+ [$ b, @) s& B  ~7 M4 A  SHMMNI 200/ I) e2 m( N; T7 ~6 f
  SHMSEG 15
1 i- H" K$ |5 F* p5 Y  SEMMNI 1000
( o9 \& V& [& E. P. L- I" W$ T  SEMMSL 300" U5 H7 E; f( y6 g
  SEMMNS 230
. t6 K! y* w2 H# ?  SEMOPM 20+ @1 _0 [" O; ?5 r/ {
  其中semmni,semmns,semmsl要加大,至少要比processes大18 ;
回复

使用道具 举报

 楼主| 发表于 2012-8-4 14:06:20 | 显示全部楼层

Oracle技术:Oracle并发连接数的设置

  SEMMNI(10,10000;150):指定在核心中信号识别的数量。这是可以在任意给定时间被激活的唯一信号设置数量。缺省值是150。最大值由系统自动调整产生。' |( ^, h0 q( |9 j3 w5 }
  SEMMSL(25,300;150):指定每个信号识别中信号量的最大值。缺省值是25。8 \& S2 x& T* v1 H# p
  SEMMNS 除最大db外的所有db 的PROCESSES之和+2*最大db的PROCESSES+10*# Z! d) o- \5 n% X7 P" @4 d
  实例数。如3个实例进程数分别为100、100、200,则=(100+100)+2*200+10*3=630
1 E( b" p" {( L# v% l  tyle="LINE-HEIGHT: 150%;">SEMOPM(10,20;10):指定在每个系统调用semop中能够被执行的信号操作量的最大值。缺省值是10。1 e/ R1 c8 z7 ]7 u0 g7 @9 g; g: \# F
  SHMMAX(131072,1073741824;524288):指定了共享内存部分大小的最大值。等于0.58 Z$ y, J, k1 Y  o/ ]" C+ f( Y' R# K
  × 物理内存字节数
* j$ a& w- e5 a! e8 U5 U" x* {5 A  SHMMNI(10,1000;100):指定了系统范围内共享内存标识的最大值。
( i  k- W" E8 U/ e  SHMSEG(6,15;6):指定了与每个进程相关连的共享内存块(或标识)的数量。缺省值是6。与每个进程相关连的共享内存块的最大值与进程拥有的未使用空间有关。因此,尽管一个进程拥有少于SHMSEG数值的共享内存块,它也有可能因为其有限的空间而不能与其它进程相联系。: q* {+ }1 U, p" Q8 O, e
  init.ora中调整为:# x( }$ {" F4 B- ]
  processes = 50 # SMALL" x6 Q& v& y! z' |. P! g- N, ]
  #processes = 100 # MEDIUM
: }; `/ `/ P  K  # processes = 200 # LARGE( N# z8 ~: _+ v/ N1 i
  From:http://gerrywxy.spaces.live.com/blog/cns!10FE174F8521A5F!206.entry' V' x! _, V! v6 @& Y; \" s
  修改oracle 150 的最大连接数
5 t2 \# ^5 [4 ~+ l. V: ^  使用sys,以sysdba权限登录:
6 a1 h' d3 z& l  c:"sqlplus /nolog
4 G' l7 s2 e" q  SQL>conn / as sysdba
) n3 y8 _4 v. i/ ]3 B  SQL> show parameter processes;
+ |" R1 K( b1 d8 @  NAME TYPE VALUE* d" T) N( }2 W
  ------------------------------------ ----------- ------------------------------4 K" j5 S' o, `; A
  aq_tm_processes integer 1
( p6 v/ B; B  I% V  db_writer_processes integer 1' m' f* O4 m3 A
  job_queue_processes integer 10
6 }3 g0 {- k' l6 [1 M6 M  log_archive_max_processes integer 1( H$ y. h; b: _$ P
  processes integer 150- E7 \2 I( d' v
  SQL> alter system set processes=300 scope = spfile;
; C, D) @( I7 n  系统已更改。$ L" ^! P: I( v* h5 R' I& E/ r! p
  SQL> show parameter processes;# i4 p( z1 i" m9 y3 c
  NAME TYPE VALUE9 K2 V' |, N* R' [8 U# {
  ------------------------------------ ----------- ------------------------------& q3 a% ]7 }7 B8 R: q. o
  aq_tm_processes integer 1# W( r2 q4 ?/ R  O% |5 @
  db_writer_processes integer 1. O; g  Z5 {$ ~7 H3 R/ e& e
  job_queue_processes integer 107 \! s5 W$ i' h% f2 U0 `
  log_archive_max_processes integer 1- q$ l! K3 [' o2 L5 u. d
  processes integer 150* V5 E5 a8 L) F4 K0 ]
  SQL> create pfile from spfile;
% X* u/ Y. X" ~4 o, n  文件已创建。3 c, y7 |3 e. P- y% b3 }
  重启数据库,OK!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-6-18 09:01 , Processed in 0.266291 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表