生产环境中,oracle系统包损坏如何修复
1、修复介绍
** 在生产环境中,往往会遇到各种类型的系统包损坏,导致各种功能无法使用,遇到了之后很多人都是百度,google,甚至是mos等方式去查询,有些能找到解决办法,有些不能,那么有没有一种办法能够解决呢?
答案肯定是有的。
**在oracle安装目录下有对应的一个路径($ORACLE_HOME/rdbms/admin/),里面存放了所有的系统包的原始创建语句,我们可以通过它来进行重建,如常见的包对应的名称:
DBMS_JOB :dbmsjob.sql prvtjob.plb
DBMS_DDL : dbmsutil.sql prvtutil.plb
DBMS_ROWID : dbmsutil.sql prvtutil.plb
DBMS_TRACE : dbmspbt.sql prvtpbt.plb
...
**重建之前可以删除当前系统下损坏的包或者包体以及相关同义词,重建完成后编译无效对象就行了。根据损坏的包体不同,可选择是否停机也是不一样的,需要自己评估。就我之前恢复的几个案例来看,不需要进行任何的停机。
2、修复案例
2.1 报错现象



--通过上面查看包体缺失,这种情况我们直接重建即可。
2.2 服务器上在线重建dbms_job;
drop package DBMS_JOB;
@?/rdbms/admin/dbmsjob.sql
@?/rdbms/admin/prvtjob.plb
@?/rdbms/admin/utlrp.sql
grant execute on dbms_job to public;


2.3 编译无效对象

2.4 测试恢复效果

3、如果是其它包怎么修复呢?
同理也是在$ORACLE_HOME/rdbms/admin/下找到对应的sql和plb文件,进行处理即可。如果太多了,可以find+xargs+grep关键字即可。
公众号:数据库技术加油站、itpub 、墨天伦同步更新,有需要的关注。
