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 refusing

incoming 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<sid>.ora文件中的參數,而且應該調整OS的內核參數,象AIX,HPUX,Solaris,SCO,UNIXWare都是這樣,OS的調整是需要重新啓動的,而且這個參數的設置不能簡單按照多少個終端要連到這個服務器上而定,最關鍵是考慮會有多少同時連上的session(在使用一些共享連接的中間件時,一般就不需要太大),當然還要考慮一些Oracle的後臺進程,還有一些系統維護工作需要多一些連接等。

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

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

SHMMAX 1000000000

SHMMIN 1

SHMMNI 200

SHMSEG 15

SEMMNI 1000

SEMMSL 300

SEMMNS 230

SEMOPM 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: 宋體"&gt;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

From:http://gerrywxy.spaces.live.com/blog/cns!10FE174F8521A5F!206.entry

修改oracle 150 的最大連接數

使用sys,以sysdba權限登錄:

c:"sqlplus /nolog

SQL&gt;conn / as sysdba

SQL&gt; show parameter processes;

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

aq_tm_processes integer 1

db_writer_processes integer 1

job_queue_processes integer 10

log_archive_max_processes integer 1

processes integer 150

SQL&gt; alter system set processes=300 scope = spfile;

系統已更改。

SQL&gt; show parameter processes;

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

aq_tm_processes integer 1

db_writer_processes integer 1

job_queue_processes integer 10

log_archive_max_processes integer 1

processes integer 150

SQL&gt; create pfile from spfile;

文件已創建。

重啓數據庫,OK!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章