ORA-04031错误,没法连接数据库

上午接到用户的邮件说 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等信息,则寻求
技术服务上或软件硬件供应商技术支持

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23155850/viewspace-683062/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/23155850/viewspace-683062/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值