oracle忽然连不上!

大致是报这样的错:

ORA-12516: TNS: 监听程序找不到符合协议堆栈要求的可用处理程序
ORA-12520: TNS: 监听程序无法为请求的服务器类型找到可用的处理程序

但又不是全部时间都报错,有时候又正常,尤其是将数据库刚重启之后。

用oracle管理员sys进去看,直接原因是oracle的进程数process爆表了:

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 300

可知processes的限定值为300;而当前使用数量为

SQL> select count(*) from v$process;

  COUNT(*)
----------
299

所以连接不进去。那为啥process用了这么多?以前又没发现有这个问题。

查看会话数,发现与process严重不对等,只有区区30多个:

SQL> select count(*) from v$session where status='ACTIVE';

  COUNT(*)
----------
34

所谓的会话,就是已经连接到数据库了,我的oracle是DEDICATED(专用)模式,通常process与session是一对一关系。所以这里process比session多出来那么多,除去oracle本身的开销,说明引起oracle资源耗尽的原因,不是数据库里面的操作,而是在外面。

再看是啥占用process最多:

SQL> select count(*),program from v$process group by program having count(*) > 1
; COUNT(*) PROGRAM
---------- ----------------------------------------------------------------
255 ORACLE.EXE (SHAD)

这个ORACLE.EXE (SHAD)与oracle连接有关。所以,最有可能是有个东西在连接我们的oracle,但又连不上,于是不停地尝试,oracle不断创建process进行响应,最后导致资源耗尽,死翘翘了

那个鬼东西是啥?我逐一排查。停掉一些服务器上的程序,没啥效果,最后停掉arcgis,process一下子降下来了。罪魁祸首原来是arcgis!

为啥arcgis会不断连接oracle呢?查看它的错误日志,发现有提示密码过期!

The Layer:'****项目' in Map:'图层' is invalid. The base table definition string "SDE.****" is invalid. User password has expired.

奇怪啊,咋会过期呢?我好奇地用连接串中指定的账号登录oracle,结果真的提示密码过期!

SQL> conn sde/sde@pdbhnhy;
ERROR:
ORA-28001: the password has expired 更改 sde 的口令
新口令:

我靠。几天来的问题元凶终于找到了,我禁不住老泪纵横。

还没有结束。为啥密码会过期?原来,oracle11g和之后(我的oracle是12C),默认账号密码期限是180天。

SQL> select * from dba_profiles where profile='DEFAULT' and resource_name='PASSWORD_LIFE_TIME';

PROFILE              RESOURCE_NAME        RESOURCE LIMIT                COM
-------------------- -------------------- -------- -------------------- -
DEFAULT PASSWORD_LIFE_TIME PASSWORD 180 NO

为一劳永逸,将密码改为没有期限限制:

ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

修改之后不需要重启动数据库,会立即生效。

修改后,还没有被提示ORA-28002警告的帐户不会再碰到同样的提示; 已经被提示的帐户必须再改一次密码,举例如下:

$sqlplus / as sysdba
sql> alter user smsc identified by <原来的密码> ----不用换新密码

网上有文章说遇到这种错误,可以将process的限定值设大一点,我认为这是没有搞清错误根源的应对之道。像我这种情况,就算你将process设得再大,也经不起损耗。更何况,修改oracle的系统参数,风险太大了,搞不好整个数据库都起不来,到时哭都没有眼泪。我上次就是因为看了网上一篇文章的指引,想着调大一点内存设置,结果数据库再也没能启动过。要不是有备份,我都不知道怎么交代。

不过,oracle12C号称支持插件数据库,几个插件数据库(PDB)共用一个容器数据库(CDB),也就是实例了,但是这个process数量也是共用的。所以PDB数量一多,process也有可能出现不够的问题。这时的话,或许也可以将proess设大一点。不过,窃以为,新增一个实例会更合适。

另外,oracle为啥要不断新增process来响应这种无谓的连接请求呢?岂不是很容易被饱和攻击?也太逊了点吧,这就是号称数据库头把交椅的oracle?我估计,如果是账号密码不对的请求,oracle是不会有什么回应的;但对于密码过期,可能比较特殊:有反应,能连,但操作不了,造成客户端不断的去请求?

参考文章:

数据库连接进程过高的问题

11g oracle 用户密码过期问题

=================================

如果系统已经提示密码过期,或即将过期,则修改配置文件还是不够的。仍然要修改一次密码。

参考文章:

Oracle 11g中修改默认密码过期天数和锁定次数

密码过期导致Oracle process耗尽问题的更多相关文章

  1. 【转载】Sqlserver强制密码过期导致数据库登录失败

    Sqlserver在设置登录账户信息的时候,有个复选框信息会被默认勾上,即强制实施密码策略,默认勾选上的还有强制密码过期.如果勾上了这个强制密码过期后,则你的账户密码在一定时间登录后会提示Sqlser ...

  2. 避免因为Arcgis Server服务设置不当导致Oracle Process溢出的方法

    我之前写过一篇文章<arcsoc进程无限增长导致oracle processes溢出>(见链接:https://www.cnblogs.com/6yuhang/p/9379086.html ...

  3. linux用户密码过期导致命令执行失败

    背景介绍: 使用zabbix调用系统命令,检查时间同步,发现一直在报错,root 用户执行无异常,问题还是出现zabbix用户上面. [zabbix@test-10-12 ~]$ sudo ntpda ...

  4. Oracle密码过期处理

    问题:Oracle密码过期导致数据库无法访问 解决方案: 1.后台以数据库管理员身份登陆,服务器中打开cmd命令,然后输入 sqlplus / as sysdba 2.查看用户对应的proifle文件 ...

  5. Oracle用户密码过期和用户被锁解决方法

    [原因/触发因素] 确定是由于oracle11g中默认在default概要文件中设置了"PASSWORD_LIFE_TIME=180天"所导致. [影响和风险] 影响    密码过 ...

  6. Oracle 11g中修改默认密码过期天数和锁定次数

    Oracle 11g中修改默认密码过期天数和锁定次数 密码过期的原因一般有两种可能: 一.由于Oracle中默认在default概要文件中设置了"PASSWORD_LIFE_TIME=180 ...

  7. Oracle 11g密码过期问题解决方案

    [问题描述]近日,使用sqlplus登陆短消息Oracle(Oracle培训 )数据库时提示“ORA-28000: 帐号被锁定”.[原因/触发因素]确定是由于oracle11g中默认在default概 ...

  8. Linux账号密码过期会导致crontab作业不能执行

    今天一同事报告Linux服务器上的crontab作业没有运行,检查/var/log/cron日志后发现下面错误信息 Jan 19 16:30:01 xxxx crond[31399]: Authent ...

  9. Oracle用户密码过期问题解决

    一.用户密码即将过期,导致autotrace无法打开           如果用户密码即将过期,在登录数据库时会收到如下提示:           ERROR:            ORA-2800 ...

随机推荐

  1. 条款31:将文件间的编译依存关系降至最低(Minimize compilation dependencies between files)

    NOTE1: 1.支持“编译依存性最小化”的一般构想是:相依于声明式,不要相依于定义式.基于此构想的两个手段是Handle classes 和 Interface classes. 2.程序库头文件应 ...

  2. Mac 配置 php-fpm

    Mac 自带 php-fpm,在终端执行 php-fpm,会报如下错误: ERROR: failed to open configuration file '/private/etc/php-fpm. ...

  3. C语言学习11

    直接插入排序 //直接插入排序 #include <stdio.h> void main() { ], i; int insort(int a[], int n); printf(&quo ...

  4. 关于在Safari浏览器中将网页添加到主屏幕的相关设置(自定义图标,启动动画,自定义名称)

    在ios中我们可以使用Safari浏览自带的将网页添加到主屏幕上,让我们的web页面看起来像native那样 第一步: 第二步: 第三步: 到这里还没结束:我们还要进行相关设置才能使我们的应用更像原生 ...

  5. @setupmethod -- flask.setupmethod

    源码: def setupmethod(f): """Wraps a method so that it performs a check in debug mode i ...

  6. [luoguP1849] [USACO12MAR]拖拉机Tractor(spfa)

    传送门 神奇的spfa #include <queue> #include <cstdio> #include <cstring> #include <ios ...

  7. Uva10294 Arif in Dhaka (置换问题)

    扯回正题,此题需要知道的是置换群的概念,这点在刘汝佳的书中写的比较详细,此处不多做赘述.此处多说一句的是第二种手镯的情况.在下图中“左图顺时针转1个位置”和“右图顺时针旋转5个位置”是相同的,所以在最 ...

  8. The Grove(poj 3182)

    题意:一个n*m(n,m<=50)的矩阵有一片连着的树林,Bessie要从起始位置出发绕林子一圈再回来,每次只能向横着.竖着或斜着走一步.问最少需多少步才能完成. /* 如果我们用搜索来写的话, ...

  9. Partition List(链表的插入和删除操作,找前驱节点)

    Given a linked list and a value x, partition it such that all nodes less than x come before nodes gr ...

  10. POJ 3159 【朴素的差分约束】

    好吧终于知道什么是“高大上”的差分约束了.嗷嗷 题意: 小朋友们分糖果,某个小朋友不想另外一个小朋友分到的糖果数比自己多N块以上. 求编号为N的小朋友最多比编号为1的小朋友多分多少块糖果. 思路: 差 ...