ORA-02516错误处理

179 篇文章 18 订阅

问题现象

使用plsql developer 登陆数据库,有如下报错:
在这里插入图片描述

原因定位

怀疑是数据库现有的进程数已经达到参数processes的值。

于是登陆服务器后台验证:

# su - oracle
Last login: Fri Jul  9 13:37:03 CST 2021 on pts/0
$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Tue Jul 13 09:51:57 2021

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

ERROR:
ORA-00020: maximum number of processes (300) exceeded


Enter user-name:

果然是连接数已达上限。

说明:只要会话连接数超过设定的process值或sessions值,再有新的会话进程,就会产生12516错误。

小补充
SQL>select count(*) from v$process; --查询数据库当前进程数
SQL>select value from v$parameter where name = ‘processes’; --查询processe的上限值
SQL> show parameter processes --查询processe的上限值
SQL>show parameter sessions --查询session的上限值

问题处理

一种处理方法是修改processes和sessions的值(首先需断开当前至少一个连接,保证管理员账号能够成功登陆)。

操作步骤如下:

$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Tue Jul 13 10:57:28 2021

Copyright (c) 1982, 2014, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL> show parameter processes     --查询参数processes当前值

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes                      integer     1
db_writer_processes                  integer     2
gcs_server_processes                 integer     0
global_txn_processes                 integer     1
job_queue_processes                  integer     1000
log_archive_max_processes            integer     4
processes                            integer     300
SQL> alter system set processes=1000 scope=spfile;     --修改参数processes值为1000

System altered.

SQL> show parameter sessions     --查询参数sessions当前值

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
sessions                             integer     480
shared_server_sessions               integer
SQL> alter system set sessions=1105 scope=spfile;     --修改参数sessions值为1105

System altered.

小补充
有一种建议标准是:
sessions=1.1processes+5; --sessions值和processes值的计算公式
因此如果要将processes数设置为1000,则sessions数应该为1.1
1000+5=1105

但若此时再次查看processes和sessions参数值,会发现更改并未生效,依然是之前的值。

需要重启数据库使其生效:

SQL> shutdown 
SQL> startup 

成功重启数据库后,再次查看,发现更改已生效。

SQL> show parameter processes 

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes                      integer     1
db_writer_processes                  integer     2
gcs_server_processes                 integer     0
global_txn_processes                 integer     1
job_queue_processes                  integer     1000
log_archive_max_processes            integer     4
processes                            integer     1000

SQL> show parameter sessions 

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
sessions                             integer     1105
shared_server_sessions               integer

本次问题处理完成。在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值