最近項目中用到的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. Thedefault 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
到此,串連池的設定和相關修改已經完成。