ITPub博客

首页 > 数据库 > Oracle > ORA-07445 [kgldpo0()+1505] [Address not mapped to object]

ORA-07445 [kgldpo0()+1505] [Address not mapped to object]

原创 Oracle 作者:running_life 时间:2017-05-09 15:14:42 0 删除 编辑
os:linux 2.6.32
db:oracle 11.2.0.4 rac

开发人员发现财务系统的一个存储过程不能编译,一点击编译就报错ORA-03113:通信通道的文件结束。

看到这个错误,我第一反应是plsql developer跟数据库之间的连接存在问题,建议开发将plsql developer中的连接全部重新断开,重新连接一次数据库,但是开发说错误依旧,然后dba运维接手处理该错误。
1、用alter命令在plsql developer工具和sqlplus工具编译也报错
2、将存储过程源码在sqlplus上尝试执行,还是报错
3、换个名字继续编译,报错
4、这个7445错误让我想起了之前遇到的一个类似问题:数据库alert日志中报告了一个错误洪水ORA-03137: TTC 协议内部错误: [12333] [253] [1] [253] [] [] [] [],大量的进程都报这个错误,当时查找出来的问题是因为开发在后台编译了某些对象,导致连接池中跟这些对象有关联的连接报错。这个7445的也类似,再联想到昨天进行过数据库用户权限回收,猜测这个错误也是由sql解析编译引起的。
5、根据错误信息Address not mapped to object猜测是内存中缓存的对象出了问题,编译过程中引用了内存中一个不存在或者已经失效的对象,而这个对象还不能刷出内存,每次编译或者改名字编译都报错。
6、对比call stack发现报错时的调用函数是kgldpo,这个应该是kgl+dpo也就是dependence object
kgldpo0()+1505       signal   __sighandler()       00C0F7C00 ? 000000000 ?<<<<<<此处报错
                                                   76AAD4DD0 ? 647BF5F28 ?
                                                   000000000 ? 7FFF580AF7F0 ?
kgldpo()+93          call     kgldpo0()            00C0F7C00 ? 7FFF580AFB80 ?<<<<<<报错函数由kgldpo调用

7、解决方法:查询mos没找到类似的文章,后来一想不是引用的对象在内存中失效但是又因未知原因导致不刷出来么,手动刷是否可以呢?所以执行alter system flush shared_pool;成功解决该问题。

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

下一篇: 一例log file sync
请登录后发表评论 登录
全部评论

注册时间:2014-08-24

  • 博文量
    23
  • 访问量
    31252