项目上使用的Oracle服务器经常出现无法登陆的情况,尝试查看数据库dump文件,没有发现在无法登陆时的报错信息,使用SecureCRT连接服务器登录sqlplus时出现错误"ORA-00020: maximum number of processes (150) exceeded",解决方法如下:开始时怀疑数据库死锁,通常这种情况下可以通过查询下列表/视图,杀死死锁的进程解决:
V$LOCK列出当前Oracle持有的锁和未解决的锁请求V$SESSION列出当前连接到数据库的Session信息DBA_BLOCKERS显示锁住对象的会话DBA_WAITERS显示等待被锁住对象的会话DBA_DDL_LOCKS列出所有DDL锁和未解决的DDL锁请求DBA_DML_LOCKS列出所有DML锁和未解决的DML锁请求DBA_LOCK列出所有锁和latch,以及所有未解决的锁请求DBA_LOCK_INTERNAL每个锁或latch显示一行,每个未解决的锁请求显示一行通过查询V$SESSION视图,发现连接总量已达到上限150,由于在做Oracle ADF开发,该OracleDB作为开发数据库,连接较多属于允许范围内,遂增大最大连接数,修改对应init.ora文件中"procdsses=150",重启DB。10g里面如此修改无效,可以通过sqlplus连接至数据库SQL> show parameter processes; //查看processes连接数设置SQL> show parameter sessions; //查看sessions连接数设置SQL> alter system set processes=300 scope=spfile; //设置processes连接数不需要设置sessions连接数,sessions连接数为processes * 1.1 + 5重启DB,问题解决。附:用于确定锁住数据库对象的锁的SQL
select c.owner,c.object_name,c.object_type,b.sid,b.serial#,b.status,b.osuser,b.machine from v$locked_object a,v$session b,dba_objects c where b.sid = a.session_id and a.object_id = c.object_id;转载于:https://www.cnblogs.com/woxing/p/3833436.html
相关资源:JAVA上百实例源码以及开源项目