项目经理:快快,嘉儿,应用连不上了报ORA-12560:TNS:协议适配器错误,按照百度上的我都查过了,没有问题
我:准备用sqlplus as sysdba连接数据库,发现问题了——
ORA-00020: maximum number of processes (300) exceeded
超出最大连接数,sqlplus也连不上去,针对这种情况,我们只能杀掉一些无用的数据连接进程(若要杀掉应用的相关进程,最好让他们先把应用停掉,然后再kill掉相关进程,oracle的后台进程一定不能随便kill),让sqlplus可以正常登录,然后再去改相关的参数
【windows】
C:\Users\Administrator>netstat -bo
活动连接
协议 本地地址 外部地址 状态 PID
TCP [fe80::942a:8432:c23f:69ff%19]:1521 SS-LiangWei:50248 ESTABLISHED 2528 [TNSLSNR.exe]
TCP [fe80::942a:8432:c23f:69ff%19]:1521 SS-LiangWei:50350 ESTABLISHED 2528 [TNSLSNR.exe]
TCP [fe80::942a:8432:c23f:69ff%19]:50248 SS-LiangWei:1521 ESTABLISHED 2604 [ORACLE.EXE]
TCP [fe80::942a:8432:c23f:69ff%19]:50350 SS-LiangWei:1521 ESTABLISHED 3920 [plsqldev.exe]
C:\Users\Administrator>taskkill pid 3920
成功: 给进程发送了终止信号,进程的 PID 为 3920。
然后sqlplus可以正常登录
【linux】
1)查看数据库后台进程信息ora11g@db /home/oracle$ps -ef | grep ora11g(实例名)oracle 22882 1 0 21:24 ? 00:00:00 ora_pmon_ora11goracle 22884 1 0 21:24 ? 00:00:00 ora_vktm_ora11goracle 22888 1 0 21:24 ? 00:00:00 ora_gen0_ora11goracle 22890 1 0 21:24 ? 00:00:00 ora_diag_ora11goracle 22892 1 0 21:24 ? 00:00:00 ora_dbrm_ora11goracle 22894 1 0 21:24 ? 00:00:00 ora_psp0_ora11goracle 22896 1 0 21:24 ? 00:00:00 ora_dia0_ora11goracle 22898 1 0 21:24 ? 00:00:00 ora_mman_ora11goracle 22900 1 0 21:24 ? 00:00:00 ora_dbw0_ora11goracle 22902 1 0 21:24 ? 00:00:00 ora_lgwr_ora11goracle 22904 1 0 21:24 ? 00:00:00 ora_ckpt_ora11goracle 22906 1 0 21:24 ? 00:00:00 ora_smon_ora11goracle 22908 1 0 21:24 ? 00:00:00 ora_reco_ora11goracle 22910 1 0 21:24 ? 00:00:00 ora_mmon_ora11goracle 22912 1 0 21:24 ? 00:00:00 ora_mmnl_ora11goracle 22914 1 0 21:24 ? 00:00:00 ora_d000_ora11goracle 22916 1 0 21:24 ? 00:00:00 ora_s000_ora11goracle 22945 22103 0 21:24 ? 00:00:00 oracleora11g (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))oracle 22947 1 0 21:24 ? 00:00:00 ora_qmnc_ora11goracle 22961 1 0 21:24 ? 00:00:00 ora_cjq0_ora11goracle 22972 1 0 21:25 ? 00:00:00 ora_q000_ora11goracle 22974 1 0 21:25 ? 00:00:00 ora_q001_ora11goracle 22993 22992 0 21:25 ? 00:00:00 oracleora11g (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))oracle 23106 23066 0 21:27 pts/6 00:00:00 grep --color ora11g这里显示出两类进程,一类是Oracle数据库的后台进程,另外一类是用户连接进程。谨记,Oracle数据库后台进程不可轻易手工杀掉
ora11g@db /home/oracle$kill -9 22945
【最终解决】
当sqlplus可以连接数据库后,根据业务需求增大进程数
alter system set processes=1000 scope=spfile;
关库起库
确认调整结果
show parameter processes;
show parameter sessions;
对于生产环境最有效的避免发生ORA-00020错误的方法便是,创建数据库时充分评估系统需要的最大进程数,一次性设置充分。