Oracle連接池信息的修改


最近項目中用到的Oracle數據庫在服務器上是建了多個表空間供不同系統使用,兩個系統同時在使用過程中,正在開發的一個項目在測試運行時,時不時就出現連接池滿了,連接不上的問題,為此查了下怎么修改Oracle連接池配置的修改方式,特記錄下來備查。

目前Oracle只支持一個連接池,pool name為“SYS_DEFAULT_CONNECTION_POOL”,管理連接池信息的也就一個包“DBMS_CONNECTION_POOL”。

先看看包的相關說明:

SQL> desc DBMS_CONNECTION_POOL
Element          Type      
---------------- --------- 
ALTER_PARAM      PROCEDURE 
CONFIGURE_POOL   PROCEDURE 
RESTORE_DEFAULTS PROCEDURE 
START_POOL       PROCEDURE 
STOP_POOL        PROCEDURE 

包里面有5個存儲過程。默認Oracle是包含一個缺省的連接池SYS_DEFAULT_CONNECTION_POOL,但是並沒有被打開,需要顯示的開啟連接池,第一步當然就是開啟連接池:

exec DBMS_CONNECTION_POOL.START_POOL('SYS_DEFAULT_CONNECTION_POOL');

這個操作只需要做一次,下次數據庫重啟了之后連接池會自動開啟的。

打開了連接池之后可以通過系統視圖dba_cpool_info進行查詢:

SQL> select connection_pool,status from dba_cpool_info;
 
CONNECTION_POOL                                                                  STATUS
-------------------------------------------------------------------------------- ----------------
SYS_DEFAULT_CONNECTION_POOL                                                      ACTIVE

當連接池啟動了之后,可以通過DBMS_CONNECTION_POOL.CONFIGURE_POOL來查看連接池的相關配置項。

SQL> desc DBMS_CONNECTION_POOL.CONFIGURE_POOL
Parameter              Type           Mode Default? 
---------------------- -------------- ---- -------- 
POOL_NAME              VARCHAR2       IN   Y        
MINSIZE                BINARY_INTEGER IN   Y        
MAXSIZE                BINARY_INTEGER IN   Y        
INCRSIZE               BINARY_INTEGER IN   Y        
SESSION_CACHED_CURSORS BINARY_INTEGER IN   Y        
INACTIVITY_TIMEOUT     BINARY_INTEGER IN   Y        
MAX_THINK_TIME         BINARY_INTEGER IN   Y        
MAX_USE_SESSION        BINARY_INTEGER IN   Y        
MAX_LIFETIME_SESSION   BINARY_INTEGER IN   Y        
 

參數說明:

參數 說明
MINSIZE 在pool中最小數量的pooled servers,缺省為4
MAXSIZE 在pool中最大數量的pooled servers,缺省為40
INCRSIZE 這個參數是在一個客戶端應用需要連接的時候,當pooled servers不可用的狀態時候,每次pool增加pooled servers的數目。
SESSION_CACHED_CURSORS 緩存在每個pooled servers上的會話游標的數目,缺省為20
INACTIVITY_TIMEOUT pooled server處於idle狀態的最大時間,單位秒,超過這個時間,the server將被停止。缺省為300.
MAX_THINK_TIME 在一個客戶端從pool中獲得一個pooled server之后,如果在MAX_THINK_TIME時間之內沒有提交數據庫調用的話,這個pooled server將被釋放,客戶端連接將被停止。缺省為30,單位秒
MAX_USE_SESSION pooled server能夠在pool上taken和釋放的次數,缺省為5000
MAX_LIFETIME_SESSION The time, in seconds, to live for a pooled server in the pool. The default value is 3600.
一個pooled server在pool中的生命值。

在pooled server數目不能低於MINSIZE
可以使用DBMS_CONNECTION_POOL.CONFIGURE_POOL或DBMS_CONNECTION_POOL.ALTER_PARAM對連接池的設置進行修改。

先來看看參數信息:

SQL>  desc DBMS_CONNECTION_POOL.ALTER_PARAM
Parameter   Type     Mode Default? 
----------- -------- ---- -------- 
POOL_NAME   VARCHAR2 IN   Y        
PARAM_NAME  VARCHAR2 IN            
PARAM_VALUE VARCHAR2 IN            
SQL> exec DBMS_CONNECTION_POOL.ALTER_PARAM ('','minsize','10');
 
PL/SQL procedure successfully completed
 
SQL> exec DBMS_CONNECTION_POOL.ALTER_PARAM ('','maxsize','100');
 
PL/SQL procedure successfully completed

由於只有一個連接池,第一個參數的值可以省略。

系統中有幾個系統視圖比較有用:
DBA_CPOOL_INFO          這個視圖包含着連接池的狀態
V$CPOOL_STATS             這個視圖包含着連接池的統計信息
V$CPOOL_CC_STATS       這個視圖包含着池的連接類型級別統計

修改成功了之后可以查詢下連接池信息:

SQL> select CONNECTION_POOL, STATUS,MINSIZE,MAXSIZE from DBA_CPOOL_INFO;
 
CONNECTION_POOL                                                                  STATUS              MINSIZE    MAXSIZE
-------------------------------------------------------------------------------- ---------------- ---------- ----------
SYS_DEFAULT_CONNECTION_POOL                                                      ACTIVE                   10        100
到此,連接池的設置和相關修改已經完成。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM