一位老DBA处理问题的方法

转载 2011年01月20日 13:47:00

 

在此转摘以为老DBA处理问题的方法,我感觉很有借鉴意义,便在此分享:
上午接到用户的邮件说Oracle 数据库报错,连接数据库后什么都执行不了,错误信息如下:

ORA-00604: error occurred at recursive SQL level 1
ORA-04031: unable to allocate 4248 bytes of shared memory ("shared
pool","select u.name, o.name, trigg...","sga heap(1,0)","library cache")
ORA-04031: unable to allocate 4248 bytes of shared memory ("shared
pool","select increment$,minvalue,m...","sga heap(1,0)","library cache")

看到错误代号,问题比较明显,ORA-04031,是比较常见的错误,共享池内存不够用了,办法很多,flush等,先不说 ,
还是想先连进去察看一下,于是

sqlplus / as sysdba
但是报错,没法连接进去,
ORA-01075: you are currently logged on

看样子问题比较严重了,共享池内存完全不够用了

于是想用srvctl重新启动
$ srvctl stop  instance -d pccdv -i pccdv1
同样也报错,还是无法连接的原因导致的,

由于是RAC数据库,于是先测试另外一个节点会不会有问题
$ srvctl stop  instance -d pccdv -i pccdv2
$ srvctl start   instance -d pccdv -i pccdv2
发现没有问题可以正常启动关闭,所以基本确实数据库没有问题,instance级的问题

于是在问题节点察看alert_$SID.log文件
还是很多同样ORA-4031的错误
Wed Sep 24 10:26:37 2008
Errors in file /u01/app/oracle/admin/pccdvv/bdump/pccdv1_smon_1499372.trc:
ORA-04031: unable to allocate 4248 bytes of shared memory ("shared pool","select o.name from obj$ o, t...","sga heap(1,0)","library 
cache")
Wed Sep 24 10:26:37 2008
Errors in file /u01/app/oracle/admin/pccdvv/bdump/pccdv1_smon_1499372.trc:
ORA-04031: unable to allocate 4248 bytes of shared memory ("shared pool","select o.name from obj$ o, t...","sga heap(1,0)","library 
cache")
Wed Sep 24 10:26:47 2008
Errors in file /u01/app/oracle/admin/pccdvv/bdump/pccdv1_smon_1499372.trc:
ORA-04031: unable to allocate 4248 bytes of shared memory ("shared pool","select o.name from obj$ o, t...","sga heap(1,0)","library 
cache")
Wed Sep 24 10:26:47 2008
Errors in file /u01/app/oracle/admin/pccdvv/bdump/pccdv1_smon_1499372.trc:
ORA-04031: unable to allocate 4248 bytes of shared memory ("shared pool","select o.name from obj$ o, t...","sga heap(1,0)","library 
cache")
Wed Sep 24 10:26:57 2008

由于连接不上出问题的Instance ,所以不能很好的解决问题,也不能安全的关闭/重起

于是从操作系统层面看看有没有办法,用topas,察看发现有一个进程比较异常,时常占用比较多的CPU
 1499267 13.7%

$  ps -ef |grep 1499267 
  oracle  1499267       1   0 10:49:57      -  0:00 ora_cjq0_pccdv1 
  
这个进程是oracle的job调度进程,也许是该进程出现异常了,不是核心的进程,于是kill掉了该进程

再用
sqlplus / as sysdba
可以连接,
于是使用关闭数据库
shutdown immediate
但是依然是错误,所以直接
shutdown abort
然后,先增加了shared pool size 
再重新启动,系统恢复正常.

这个问题虽然简单,但处理的过程中还是经常被卡住诊断路径, 有些动作不能继续下去,说明处理这个问题的时候没有一个规范的有序的过程,所以处理问题不论简单复杂,都需要有一个规范的处理过程.而不要简单的看到一个错误代号就断章取义,错误代号仅仅代表结果,不会告诉你原因,而且往往出现问题的时候很多错误代号一起出现的,有时甚至会误导我们的判断.
我认为一个规范基本的处理过程至少包括以下步骤:
1.检查 alert_$SID.log,如果是RAC则每个节点都要检查
2.鉴别问题是database级别,还是Instance 级别
3.结合ORACLE的错误代号和症状,在数据库层面寻找解决办法
4.如果数据库层面无法解决,再辅助利用操作系统命令分析定位问题根源
5.问题确定后,使用数据库dbms或者操作系统层面的,技术和手段,解决问题
6.如果问题仍然无法解决,则收集所有相关的log,error等信息,则寻求技术服务上或软件硬件供应商技术支持

相关文章推荐

交互设计师:讨论几种处理问题的方法

当一个项目开始时,交互设计师如何开始工作呢?需要使用什么工具和方法来解决问题呢?尽管很多交互设计师坚持以用户为中心(UCD)这一种设计方法,这根本是不正确的。   有几件事,是一个新的交互设计师...

海量数据处理问题 解决方法总结

一、分而治之/Hash映射 + Hash统计 + 堆/快速/归并排序 分而治之:通过hash将大文件分为小文件,大数据分为小数据等; hash统计:整合每个小文件,筛选重复数据,记录大小; (...

用简单的方法处理问题

1、建立友谊的方法      【故事】一次,一位大臣招待朋友。宴会中,朋友看到侍者端来的洗手盘里的水亮晶晶的,以为是喝的水,就端起来一饮而尽,作陪的人都目瞪口呆,不知所措。只见大臣也端起自己面前的...

海量数据处理问题与方法汇总

1、有1亿个浮点数,请找出其中对大的10000个。提示:假设每个浮点数占4个字节,1亿个浮点数就要站到相当大的空间,因此不能一次将全部读入内存进行排序。       可以发现如果一次读...

海量数据处理问题汇总及方法总结

面试题中总是有好多海量数据的处理问题,在这里列出一些常见问题,便于以后查阅:  类型1:hash映射+hash统计+堆排序 1、 给你A,B两个文件,各存放50亿条URL,每条URL占用6...

欧姆龙指令的时间处理问题

  • 2015年03月31日 16:29
  • 368KB
  • 下载

CXF-JAXB包的处理问题

  • 2014年11月06日 10:46
  • 76KB
  • 下载

unity地形高度图进行外部处理问题

开这个话题,因为最近在处理大地形问题 有的时候需要一个很大的地形,而在unity中大的地形消耗很大 所以我们需要优化地形,对于长条的或者不规则,地图可以使用多块地形进行拼接 这样加载的时候就能更...

C# 导入文件时字符集的处理问题

  • 2013年08月22日 11:08
  • 31KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一位老DBA处理问题的方法
举报原因:
原因补充:

(最多只允许输入30个字)