这是我参与8月更文挑战的第14天,活动详情查看:8月更文挑战
1、问题:
数据库服务器或客户端连接数据库时有如下报错信息:
ORA-00020:maiximun number of process(xxxx) exceeded.
2、原因:
连入数据库的连接数(processes)超过了数据库设置的最大连接数,此参数默认为150,应根据业务情况合理调整。
3、解决方式
3.1 停止数据库监听,防止新连接的产生。
命令行停止监听,windows 环境也可直接停止监听服务。
[oracle@dj ~]$ lsnrctl stop
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 14-AUG-2021 23:08:26
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
The command completed successfully
3.2 停止暂时用不到的数据库客户端或应用程序,释放数据库连接。
急用,短时间内无法释放连接,可考虑重启数据库服务释放连接,生产环境评估影响,综合考虑。
3.3 进入数据库修改连接数。(连接数修改需重启数据库生效)
--查看目前数据库连接数
SQL> show parameter processes
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes integer 1
db_writer_processes integer 1
gcs_server_processes integer 0
global_txn_processes integer 1
job_queue_processes integer 1000
log_archive_max_processes integer 4
processes integer 150
--备份参数文件(修改连接数过大,数据库无法启动时,可根据此备份迅速恢复数据库)
SQL> create pfile='/home/oracle/pfile20210814.ora' from spfile;
File created.
--修改连接数
SQL> alter system set processes=500 scope=spfile;
System altered.
--重启数据库生效参数
SQL> startup force
ORACLE instance started.
Total System Global Area 1252663296 bytes
Fixed Size 2252824 bytes
Variable Size 469766120 bytes
Database Buffers 771751936 bytes
Redo Buffers 8892416 bytes
Database mounted.
Database opened.
--查看数据库最大连接数
SQL> show parameter processes;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes integer 1
db_writer_processes integer 1
gcs_server_processes integer 0
global_txn_processes integer 1
job_queue_processes integer 1000
log_archive_max_processes integer 4
processes integer 500
PS:11g R2后,session=1.5*processes+22,随着processes的改变而改变,无需手动修改。
连接数建议逐渐扩展,如150不够扩到500或800,再不够扩展到1000或2000,再不够就要考虑下应用程序连接池设置是否合理,是否及时回收释放连接了。