熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle並發連接數的設置

2013-11-13 22:19:41  來源: Oracle 

  不能連接Oracle數據庫了提示相關的錯誤

  OERR: ORA TNS:no appropriate service handler found

  客戶端連接間歇性失敗報錯ORA

  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 refusing

  incoming client connections with either of the following errors: ora or ora

  采用服務動態注冊的方式由PMON 通過SERVICE_UPDATE 來得到目前連接情況但SERVICE_UPDATE 有時間間隔

  所以listener顯示的連接數和當前實際的連接數可能不同

  查詢解決方法:

  查看一下數據庫現有的進程數是否已經達到參數processes的大小

  select count(*) from v$process;                         取得數據庫目前的進程數

  select value from v$parameter where name = processes; 取得進程數的上限

  如已達到上限修改initSIDora中的processes的大小

  重新啟動數據庫到nomount狀態下執行create spfile from pfile; 並startup open

  查詢數據庫自啟動以來最大的並發數量

  修改最大連接數:

  alter system set processes = scope = spfile;

  重啟數據庫:

  shutdown immediate;

  startup;

  查看當前有哪些用戶正在使用數據

  SELECT osuser ausernamecpu_time/executions/||s sql_fulltextmachine

  from v$session a v$sqlarea b

  where asql_address =baddress order by cpu_time/executions desc;

  

  有的時候我們需要調整oracle數據庫的最大鏈接數而這個鏈接數的調整是在oacle下的dbs目錄下initora文件中調整的

  ORACLE的連接數(sessions)與其參數文件中的進程數(process)有關它們的關系如下

  sessions=(*process+)

  但是我們增加process數時往往數據庫不能啟動了這因為我們還漏調了一個unix系統參數它是核心參數中的semmns這是unix系統的信號量參數每個process會占用一個信號量semmns調整後需要重新啟動unix操作系統參數才能生效不過它的大小會受制於硬件的內存或ORACLE SGA范圍可從——不等

  但是Processes的修改不僅應該調整init<sid>ora文件中的參數而且應該調整OS的內核參數象AIXHPUXSolarisSCOUNIXWare都是這樣OS的調整是需要重新啟動的而且這個參數的設置不能簡單按照多少個終端要連到這個服務器上而定最關鍵是考慮會有多少同時連上的session(在使用一些共享連接的中間件時一般就不需要太大)當然還要考慮一些Oracle的後台進程還有一些系統維護工作需要多一些連接等

  我的atmp大前置機器上對oracle調整的時候其使用的是unixware操作系統在做鏈接數調整的時候要先對核心參數進行調整

  核心主要相關的參數的調整如下

  SHMMAX   

  SHMMIN   

  SHMMNI   

  SHMSEG   

  SEMMNI   

  SEMMSL   

  SEMMNS   

  SEMOPM   

  其中semmnisemmnssemmsl要加大至少要比processes大

  SEMMNI(指定在核心中信號識別的數量這是可以在任意給定時間被激活的唯一信號設置數量缺省值是最大值由系統自動調整產生

  SEMMSL(指定每個信號識別中信號量的最大值缺省值是

  SEMMNS 除最大db外的所有db 的PROCESSES之和+*最大db的PROCESSES+*

  實例數個實例進程數分別為則=(+)+*+*=

  tyle=LINEHEIGHT: %; FONTFAMILY: 宋體>SEMOPM(指定在每個系統調用semop中能夠被執行的信號操作量的最大值缺省值是

  SHMMAX(指定了共享內存部分大小的最大值等於

  × 物理內存字節數

  SHMMNI(指定了系統范圍內共享內存標識的最大值

  SHMSEG(指定了與每個進程相關連的共享內存塊(或標識)的數量缺省值是與每個進程相關連的共享內存塊的最大值與進程擁有的未使用空間有關因此盡管一個進程擁有少於SHMSEG數值的共享內存塊它也有可能因為其有限的空間而不能與其它進程相聯系

  initora中調整為

  processes =                                            # SMALL

  #processes =                                             # MEDIUM

  # processes =                                             # LARGE

  From:!FEFAF!entry

  修改oracle 的最大連接數

  使用sys以sysdba權限登錄

  c:sqlplus /nolog

  SQL>conn / as sysdba

  SQL> show parameter processes;

  NAME TYPE VALUE

  

  aq_tm_processes integer

  db_writer_processes integer

  job_queue_processes integer

  log_archive_max_processes integer

  processes integer

  SQL> alter system set processes= scope = spfile;

  系統已更改

  SQL> show parameter processes;

  NAME TYPE VALUE

  

  aq_tm_processes integer

  db_writer_processes integer

  job_queue_processes integer

  log_archive_max_processes integer

  processes integer

  SQL> create pfile from spfile;

  文件已創建

  重啟數據庫OK!


From:http://tw.wingwit.com/Article/program/Oracle/201311/18790.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.