ITPub博客

两个数据访问受限的问题

原创 作者:jeanron100 时间:2017-07-21 23:57:13 0 删除 编辑

    最近几天实在忙得厉害,处理了各种数据需求,有种顾及不来,而其中有一部分问题是和数据访问相关的,问题的原因很简单,但是分析问题的过程就需要很多的经验,推导,比如下面的两个案例。

   第一个是开发同学反馈,连接数据库的时候报出了下面的错误。

  第一个错误是:

ORA-12154: TNS:could not resolve the connect identifier specified

  第二个错误是:
ORA-12170: TNS:Connect timeout occurred连接10.129.xx..51 

如果直接看这个错误,可能没有思路,第一个错误明显是网络配置的问题,但是我查看了网络的配置,本机的网络服务都是正常的,另外需要说明一下,这是一套迁移的环境。

第二个问题看起来是网络超时,可能是网络情况不好,或者访问网络的权限限制。

同时我查看了防火墙的配置,该有的IP信息都有了。

到底是哪里出了问题呢,和开发的同学聊,他的回答让我有些诧异,

    访问数据的时候就报这个
    这个连接串没问题
    查询请求可以执行
    但是insert 的时候就报错了

看到这里,我脑海里就有了大概的思路了,这很可能是DB link的问题,而上面的两个错误很可能就是访问的两个DB link,是访问失败的两个问题,一个是目标环境的监听服务有问题,另外一个是防火墙的权限问题。明白了问题修复起来分分钟就能搞定,但是分析排查还是花了些时间。

第二个是一个数据访问报错,业务同学反馈,一台搬迁的服务器修改了IP之后,他们连接应用的时候抛出了下面的错误,

[show] java.sql.SQLException: ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No such file or directory
 

看到这个错误,很明显是数据库实例出了问题,要么就是连接的数据库信息有误。

和业务同学反馈确认,他们的反馈是IP信息没有问题,我这边的权限信息也没有问题,经过了多方排查,还是没有进展,这时候我们就换一个角度来看,因为涉及到的系统是一个整体,可能包含很多子系统,所以不能完全依赖于已得到的信息,但是他们稍后反馈另一个业务出现了问题,带着疑问查看了他们的数据服务,发现这台数据库已经宕机了,错误日志如下:

PMON (ospid: 4354): terminating the instance due to error 471
System state dump requested by (instance=1, osid=4354 (PMON)), summary=[abnormal instance termination].
System State dumped to trace file /U01/app/oracle/diag/rdbms/csdb/csdb/trace/csdb_diag_4364.trc
Instance terminated by PMON, pid = 4354
可以看到是pmon终止了实例,而00471的错误是DBWR终止,

$ oerr ora 00471
00471, 00000, "DBWR process terminated with error"
// *Cause:  The database writer process died
到了这里,可以基本得到一个结论,这是一个异常宕机,而不是计划中的维护。我没有着急把数据库先启动,而是启动到了nomount状态,尝试看看有什么信息,错误的原因其实很简单,就是系统资源设置不足导致,比如memlock,可以通过启动的错误日志看出。

Starting ORACLE instance (normal)
Memlock limit too small: 65536 to accommodate segment size: 402653184

明白了问题之后,调整起来修很轻松了,这方面的信息也可以通过/proc/xxx/limits来查看





请登录后发表评论 登录
全部评论

注册时间:2012-05-14

  • 博文量
    1499
  • 访问量
    14155121