杨建荣的学习笔记

每天坚持一点点,个人微信公众号: jianrong-notes, 个人邮箱:jeanrock@126.com

  • 博客访问: 12806355
  • 博文数量: 1365
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-14 23:24
  • 认证徽章:
个人简介

每日发文,或技术、或总结,偶有日间小事也以为记,谓之学习笔记,成年累月1300多天,中间几乎没有间断,要旨只有一个:学习交流,共同进步 。 学习笔记精华整理,个人新书《Oracle DBA工作笔记》已开售,在京东,当当,亚马逊,淘宝,天猫均有售,欢迎选购。

ITPUB论坛APP

ITPUB论坛APP



APP发帖 享双倍积分

文章分类

全部博文(1365)

文章存档

2017年(299)

2016年(358)

2015年(360)

2014年(278)

2013年(48)

2012年(21)

微信关注

IT168企业级官微



微信号:IT168qiye



系统架构师大会



微信号:SACC2013

订阅
热词专题
两个数据访问受限的问题 2017-07-21 23:57:13

分类: Oracle

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

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

  第一个错误是:

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来查看





阅读(132) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册