问题描述:
今天在跟踪dataX配置d额数据流程时,发现定时流程执行失败,日志显示的是数据库连接错误,然后我就去看数据源,发现本来已经通了的数据源,再次测试连接的时候,显示连接失败,TNS:listener could not find available handler with matching protocol stack的错误,经过反复找错,发现可能的原因是,每天晚上定时抽取任务时,开启的数据库连接数较大,超出了数据库配置的连接数目,导致部分流程显示数据库连接失败。
这时候我们想要去修改最大连接数,若想要修改最大连接数,需要一个dba账户才能操作,但是dba账户的密码忘了。。。。。。。。很无语!!
解决思路:
经过同事的点拨,发现可以先登录上数据库服务器对dba账号进行密码重置,然后再修改oracle的最大连接数
具体解决过程:
第一步:在忘记Oracle用户密码的情况下,可以在Oracle服务器端执行以下操作,对密码进行修改。
C:/Documents and Settings/Administrator>sqlplus /nolog
SQL*Plus: Release 10.1.0.2.0 - Production on 星期六 6月 26 11:08:34
Copyright (c) 1982, , Oracle. All rights reserved.
SQL> conn /as sysdba
Connected.
SQL> alter user sys identified by "123456";
User altered.
SQL> exit
第二步:
1、首先通过sqlplus登陆数据库,
su - oracle
sqlplus / as sysdba
2、查看当前数据库进程的连接数 select count(*) from v$process;
3、查询数据库当前会话的连接数select count(*) from v$session;
4、查看数据库设置的最大连接数和最大session数量,show parameter processes命令查看的是汇总的信息,也可以直接select value from v$parameter where name ='processes'; 语句查看,最大进程连接数为4000.
5、当数据库连接数需要调整时,可以用alter system set processes = 3000 scope = spfile;修改连接数。(修改3000只是示范,大多时候是连接数不够,数值修改的更大)
6、修改processes和sessions值必须重启oracle服务器才能生效
shutdown immediate;关闭实例
startup启动
7、步骤重启后再次查看,已经生效
8、可以用如下命令查看数据库连接的消耗情况:select b.MACHINE, b.PROGRAM, b.USERNAME, count(*) from v$process a, v$session b where a.ADDR = b.PADDR and b.USERNAME is not null group by b.MACHINE, b.PROGRAM, b.USERNAME order by count(*) desc