一般说来,出现这个错误是由于连接数据库的进程数过大引起的。
select count(*) from v$process; 取得数据库目前的进程数。
select value from v$parameter where name = 'processes'; 取得进程数的上限。
通常,由于初始化参数文件中processes参数值设置太小导致的,所有可以修改ini***.ora中的processes的大小。
altere system set processes = *** scope = both;
修改完成重新启动数据库到nomount状态下,执行create spfile from pfile; 并startup open。
------------------------------------------------------------------------------------------------------------------------------------
以下两个视图v$resource_limit,v$license,可以查询到数据库中session使用情况。
SQL> select * from v$resource_limit where resource_name = 'sessions';
RESOURCE_NAME CURRENT_UTILIZATION MAX_UTILIZATION INITIAL_AL LIMIT_VALU
------------------------------ ------------------- --------------- ---------- ----------
sessions 286 380 555 555
CURRENT_UTILIZATION得到当前被用的session总数。MAX_UTILIZATION是各项资源没有达到的最大值。
SQL> select * from v$license;
SESSIONS_MAX SESSIONS_WARNING SESSIONS_CURRENT SESSIONS_HIGHWATER USERS_MAX
------------ ---------------- ---------------- ------------------ ----------
0 0 276 363 0
可以得到实例启动以来,连接数据库的用户session的曾经达到的最大值(SESSIONS_HIGHWATER)和当前值。