Oracle数据库重启后密码失效的问题(r12笔记第91天)


  前几天,我和系统运维的同事处理一个看似诡异的问题,他找到我说应用服务器启动的时候报了DB的Error,但是错误信息有限,他也没法完全定位到错误的原因,所以就希望我来帮忙看看这个问题是怎么回事,怎么解决。

   从应用服务启动的日志来看,错误信息是连接池的地方有了问题。

Error: 2017-06-09 10:04:59 init connpool:one or more conn open error.
Error: 2017-06-09 10:12:50 init connpool:one or more conn open error.

带着疑问我根据他提供的基本信息定位到了数据库服务端的端口,查看监听器的日志,发现下面的一段内容:

09-JUN-2017 10:06:46 * <unknown connect data> * 12537
TNS-12537: TNS:connection closed
 TNS-12560: TNS:protocol adapter error
  TNS-00507: Connection closed
   Linux Error: 115: Operation now in progress
09-JUN-2017 10:06:54 * <unknown connect data> * 12537
TNS-12537: TNS:connection closed
 TNS-12560: TNS:protocol adapter error
  TNS-00507: Connection closed
   Linux Error: 115: Operation now in progress

这是一个12c的环境,这个CDB里面有大概8个PDB,所以我得定位到具体的PDB继续测试。

 如果说是CDB级别的数据库层面有问题,我可以看到有几个PDB的连接数大概有300多个。而出问题的PDB连接数确实为0,这一点也确实有些怪异。

 是这个PDB有问题吗,我看PDB的状态是READ WRITE,连接没有任何限制,而且我使用已有的一个用户名和密码做连接测试是没有问题的。况且在这位同事范酷IDE那个时间点,我们也没有做什么操作,这样想来就很奇怪了。

  而问题的分析一下子陷入了僵局,系统运维的同学找不到更多的信息,而我也得不到很多明确的信息。当然问题既然反馈,还是可能存在的,于是我开始逐个梳理这些信息,当查到这个关联用户的状态时,我感觉应该是哪里出了问题。SQL> SELECT USERNAME,ACCOUNT_STATUS FROM CDB_USERS WHERE USERNAME LIKE 'SH_USER';
USERNAME                       ACCOUNT_STATUS      
SH_USER                        EXPIRED(GRACE)    

     这个用户的状态竟然是expired(grace),这样一个状态该怎么理解呢。这个用户为什么会失效呢,如果这样想来,这个问题就有了一个基本的思路。

  为什么会失效,默认11g的数据库中的profile为DEFAULT时,其中一个属性PASSWORD_LIFE_TIME 是 180,也就是半年的样子,密码就会失效。

 
那么问题来了,这个业务是个长连接的场景,哪怕失效了,在当前的会话里面还是能够保持连接的,这个问题我就可以回答了,因为前一天晚上碰到了一个PGA的报警,我做了重启,而应用层面有了重连机制,所以大部分的会话连接都没有问题,而这个PDB的profile设置保持了默认值,在断开连接之后重连就会碰到账户失效的问题。

   这样一来解决方法就相对简单,因为应用端是加密的密码,我也无从得知原来的明文密码,所以我们就可以重置密码,有个小技巧。

SQL>  select name,password from user$ where name='USER_SH';
NAME                           PASSWORD
------------------------------ ---------------------------
USER_SH                    E2E9010EA87D283F

然后直接重置即可。

alter user USER_SH identified by values 'E2E9010EA87D283F';

这样密码没有改变,账户的状态就为open了,这样一来问题就引刃而解了。

  

时间: 2024-09-06 06:24:32

Oracle数据库重启后密码失效的问题(r12笔记第91天)的相关文章

Oracle数据库端口突然无法访问的分析(r12笔记第46天)

 最近碰到一个蛮有启发意义的案例.是数据库监听相关的,但是实际的原因却又出乎意料.  问题的反馈受益于开发同学,一个开发同学在lync上找到我,说现在一个线上业务的数据库访问有些问题,想问问我是否有什么建议.大体了解了下,他们在使用一个非1521的端口,比如端口是1525,他们在业务端看到的错误信息类似下面的样子: java.sql.SQLException: Io exception: The Network Adapter could not establish the connection

oracle库存储问题导致数据库重启后无法正常启动恢复教程

某客户的核心数据库存储问题导致数据库重启后无法正常启动,根据客户反馈最开始在启动数据库时 报错控制文件IO错误,如下: Sun Mar 15 11:59:37 2015 Errors in file /oracle/app1/oracle/admin/xxxx/bdump/xxxx2_arc1_630876.trc: ORA-00204: error in reading (block 1, # blocks 1) of control file ORA-00202: control file:

servlet ajax-怎么用servlet获取oracle数据库信息后传递到jquery的ajax上进行验证

问题描述 怎么用servlet获取oracle数据库信息后传递到jquery的ajax上进行验证 package com.ibm.ajax.app1.entity; public class WebUser { private String uname; public WebUser(String uname){ this.uname=uname; } public String getUname() { return uname; } public void setUname(String u

修改oracle数据库用户名及密码的方法_oracle

改oracle数据库用户名称和密码(Linux为例),有需要的朋友可以参考下. 一.修改前准备工作: 使用ssh工具以root身份连接服务器, 然后切换到oracle用户:su - oracle(回车) 使用sqlplus连接数据库:sqlplus /nolog(回车) 以管理员身份登录sys用户:conn sys/sys as sysdba(回车) 数据库连接成功,至此准备工作完成. 二.修改用户名称. 数据库连接成功后,在SQL>提示后面继续输入: 首先查到到所需修改用户名称的用户需要:se

Oracle中的PGA监控报警分析二(r12笔记第87天)

今天又收到了一条报警的信息,看起来很常规,但是后面的故事如果你做了分析就会发现其实本身并不平常,我觉得我得出手了. ZABBIX-监控系统: ------------------------------------报警内容: PGA Alarm on alltest ------------------------------------报警级别: PROBLEM ------------------------------------监控项目: PGA:9723.2 -------------

oracle数据库重启之后无法open的恢复案例

这是某网友的维护的一套数据库,据说是正常重启之后就无法启动数据库了.那么我们先来看看日志是什么样的: Errors in file /u01/app/oracle/admin/orcl/bdump/orcl1_p012_18165.trc: ORA-27090: Message 27090 not found;  product=RDBMS; facility=ORA Linux-x86_64 Error: 4: Interrupted system call Additional inform

linux下oracle数据库重启的方法

网站的服务中断了,重启下发现是oralce服务不存在,又不想重启机器,就重新启动下oralce,再重启服务,搞定. 操作的为oracle9i:(其他应该也可以用吧记录如下)声明:坚挺器(应该理解的哦,信息发不出去,你懂的,就用这个了) (1) 以oracle身份登录数据库,命令:su – oracle (2) 进入Sqlplus控制台,命令:sqlplus /nolog (3) 以系统管理员登录,命令:connect / as sysdba (4) 启动数据库,命令:startup (5) 如果

Oracle闪回原理测试(三)(r12笔记第16天)

 对于Oracle的闪回,很多朋友也问过问,到底是怎么玩的?如果自己做过一些闪回数据库的操作,就会发现这个功能非常强悍.   Flashback DML的操作其实还蛮容易理解的,但是Flashback DDDL那可就是另外一个level了,我们大概了解一下MySQL里面的闪回就会发现,真要实现无缝的全闪回,确实有很多的细节和场景需要考虑.而Oracle作为一个成熟的商业软件,是不希望我们了解很多底层的细节的,用着好就行,所以如果你想得到一些闪回更细节的东西,这个渠道就非常的窄,我们之前也测试了两

oracle数据库01-连接&amp;amp;用户&amp;amp;权限

     Oracle数据库是Oracle(中文名称叫甲骨文)公司的核心产品,Oracle数据库是一个适合于大中型企业的数据库管理系统.      Oracle数据库涉及银行.电信.移动通信.航空.保险.金融.电子商务和跨国公司等,Oracle的市场占有率最高,显然Oracle的主要用户涉及面非常广.      Oracle产品是免费的,可以在Oracle官方网站上下载到安装包,但是Oracle服务是收费的.在Java开发中,Oracle数据库是非常理想的选择.           http:/