Oracle裡有形形色色的限制(limit),清楚的了解這些限制可以幫助我們更好的使用Oracle和理解Oracle.
本文是Oracle的限制系列的第一篇文章,最主要介紹了一些由Oracle初始化參數設定的一些基本限制(sessions , processes )
Key Word: ORA-00018 , ORA-00020
1。sessions
在初始化參數所設定的限制中,最為人所知的估計就是sessions和processes
Sessions 參數指定了一個 Instance中能夠同時存在的sessions數量,或者說,就是能同時登陸到數據庫的並發用戶數。通常,我們設定這個數字時需要考慮我們可能會有多少個同時連接到數據庫的並發用戶,並加上後台進程的進程數,最後乘與1.1.
比如說,估計系統中可能會同時有100個用戶連接到數據庫,那麼,你的session最少應該為
(100 + 10 ) * 1.1 = 121
當數據庫連接的並發用戶已經達到這個值時,又有新session連進來,就會報錯
00018, 00000, "maximum number of sessions exceeded"
// *Cause: All session state objects are in use.
// *Action: Increase the value of the SESSIONS initialization parameter.
2. Processes
和Sessions是類似的是processes這個參數。
Processes參數指定了Instance在OS層面所能同時運行的進程數。基於和sessions設定同樣的考慮,我們在設定processes時,也應考慮我們可能會有多少個同時連接到數據庫的並發用戶,並加上後台進程的進程數。
當然,在MTS(shared server)的配置下,這個值的確定會有所不同。應該是普通後台進程+最大共享服務器的進程數(max_shared_servers) + 最大Dispatcher進程數(max_dispatchers).
另外,由於在window平台中,Oracle是以單一一個進程的形式存在,Processes 參數變成了限制Oracle進程裡的線程數了。
當Oracle需要啟動新的process而又已經達到processes參數時,就會報錯:
00020, 00000, "maximum number of processes (%s) exceeded"
// *Cause: All process state objects are in use.
// *Action: Increase the value of the PROCESSES initialization parameter.