ORA-00018: maximum number of sessions exceeded錯誤解決

djb1008發表於2012-03-28

一.錯誤描述

在indows客戶端使用sqlplus工具,連線遠端資料庫伺服器時,報了ORA-00018的錯誤,如下:

C:Documents and Settingsdujiabing>sqlplus aidu/*****@192.168.17.138:1521/aidu
SQL*Plus: Release 10.2.0.5.0 - Production on 星期三 3月 28 08:59:39 2012
Copyright (c) 1982, 2010, Oracle. All Rights Reserved.
ERROR:
ORA-00018: maximum number of sessions exceeded
請輸入使用者名稱:

[@more@]

二. 錯誤分析
[oracle@ocmdb ~]$ oerr ora 18
00018, 00000, "maximum number of sessions exceeded"
// *Cause: All session state objects are in use.
// *Action: Increase the value of the SESSIONS initialization parameter.

檢查伺服器端的sessions配置,如下:
SQL> show parameter sessions
NAME TYPE VALUE
------------------------------------ --------------------------------- ------------------------------
sessions integer 555

統計當前的session數量,
SQL> select count(1) from v$session;

COUNT(1)
----------
17

當前的session數量為17 ,遠小於最大session數量(555),不存在達到最大session數量的問題.

之前因為配置了shared server連線方式,設定相關引數,如下:
max_shared_servers
shared_server_sessions
shared_servers
dispatchers

可能是因為這些引數的配置,出了問題,導致了客戶端無法連線,檢查相關的引數值,如下:
SQL> show parameter shared_server

NAME TYPE VALUE
------------------------------------ --------------------------------- -----------
max_shared_servers integer 0 ##最多的shared server 程式
shared_server_sessions integer 0 ##分配給shared server的程式數
shared_servers integer 5 ##初始化的shared server程式數

SQL> show parameter dispatchers
NAME TYPE VALUE
------------------------------------ --------------------------------- ------------------------------
dispatchers string (PROTOCOL=TCP)(dispatcher=5)
max_dispatchers integer

發現dispatchers引數設定有點問題(PROTOCOL=TCP)(dispatcher=5),應該修改為(PROTOCOL=TCP)(dispatchers=5)

SQL> alter system set dispatchers='(PROTOCOL=TCP)(dispatchers=5)' scope=both;
System altered.

修改了dispatchers引數,發現客戶端還是無法正常登陸.
C:Documents and Settingsdujiabing>sqlplus aidu/soft@192.168.17.138:1521/aidu
ERROR:
ORA-00018: maximum number of sessions exceeded
請輸入使用者名稱:

SQL> alter system set max_shared_servers=20 scope=both;
System altered.

修改了max_shared_servers引數,發現客戶端還是無法正常登陸.
C:Documents and Settingsdujiabing>sqlplus aidu/soft@192.168.17.138:1521/aidu
ERROR:
ORA-00018: maximum number of sessions exceeded
請輸入使用者名稱:

SQL> alter system set shared_server_sessions=5 scope=both;
System altered.

修改了shared_server_sessions 引數為非0值,發現客戶端可以正常登陸了.

C:Documents and Settingsdujiabing>sqlplus aidu/******@192.168.17.138:1521/aidu
SQL*Plus: Release 10.2.0.5.0 - Production on 星期三 3月 28 11:12:31 2012
Copyright (c) 1982, 2010, Oracle. All Rights Reserved.

連線到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options


三.問題總結
因為設定了dispatchers和shared_servers引數,啟動了shared server模式,所以客戶端預設使用shared 方式進行資料庫連線.
上面的問題是,沒有設定分配給shared server的session數量,即引數shared_server_sessions=0,導致了客戶端不能夠連線.
修改shared_server_sessions引數為5(非0),客戶端可以連線,問題得到解決.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/32980/viewspace-1057752/,如需轉載,請註明出處,否則將追究法律責任。

相關文章