具体解决方案如下:
--首先检查process和session的使用情况,在sqlplus里面查看。
SQL> show parameter processes
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes integer 0
db_writer_processes integer 6
gcs_server_processes integer 0
job_queue_processes integer 0
log_archive_max_processes integer 2
processes integer 150
SQL> select count(*) from v$process;
COUNT(*)
----------
147
--明显process已经几乎达到了顶峰。
SQL> show parameter session
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
java_max_sessionspace_size integer 0
java_soft_sessionspace_limit integer 0
license_max_sessions integer 0
license_sessions_warning integer 0
logmnr_max_persistent_sessions integer 1
session_cached_cursors integer 20
session_max_open_files integer 10
sessions integer 160shared_server_sessions integer
SQL>
SQL> select count(*) from v$session;
COUNT(*)
----------
153--同样几乎达到顶峰。
--修改oracle的process和session值,加大他们最大连接数。
--oracle文档要求,SESSIONS和TRANSACTIONS的初始化参数应该源于PROCESSES参数,根据默认设置SESSIONS = PROCESSES * 1.1 + 5
SQL> alter system set processes=300 scope=spfile;
System altered.
SQL> alter system set sessions=335 scope=spfile;
System altered.
--重启数据库后参数修改完成
SQL> shutdown --如果长时间没反应可能是连接请求没又关闭,也可以使用 abort参数直接关闭
SQL> startup --可以用 force参数 关闭当前运行数据库后正常启动。
修改完毕之后,在进行压力测试的时候,问题解决。也可参考其他解决方法。
-------------------------------------------------------------------------------------------------------------
修改process的值的方法二(针对Linux系统):
先到ORACLE_BASE/admin/你的实例名/profile/目录下找到一个init.ora的文件,然后修改里面的process的值,然后将该文件拷贝到ORACLE_HOME/dbs目录下,并将文件重命名为initorcl.ora(其中的orcl为你的数据库实例名,我的数据库实例为orcl所以命名为 initorcl.ora)
用sys用户同时以sysoper身份登录sqlplus
即 sqlplus sys/sa as sysoper;
进入SQLPLUS后,先把数据库关闭,可以使用shutdown abort命令,也可以使用shutdown immediate命令,推荐使用shutdown abort命令。然后使用命令startup force即可,说白了就是重启数据库。