Oracle 数据库编译INVALID DB Object的方法

博客首页 » Oracle 数据库编译INVALID DB Object的方法

发布于 09 Jun 2014 00:25
标签
在做Oracle维护的时候,经常会遇到DB Object变成INVALID的状态。这次总结比较一下各种处理方法。

最简单的是

select owner, object_type, status from dba_objects where status != 'VALID';

这个方法的优点是简单,缺点是需要一个个地处理。

所以衍生的方法是使用以下sql生成重新编译的脚本。这主要解决了以下几个问题: package body的时候,需要编译的是package;schema是public的synonym,需要编译public synonym。

sqlplus "/ as sysdba"
 
set lin 1000
set pages 0
set echo off;
set feedback off;
 
spool recompile_invalid_objects.sql
 
select 'alter '|| case 
when object_type = 'PACKAGE BODY' then 'PACKAGE ' || owner || '.' 
when object_type = 'SYNONYM' and owner = 'PUBLIC' then 'PUBLIC SYNONYM ' 
else object_type || ' ' || owner||'.' end 
||object_name|| ' compile;' 
from dba_objects 
where status != 'VALID'
--如果需要这里还可以进一步加上schema名之类的条件
;
 
spool off
 
-- 执行下面的语句调用刚刚生成的脚本。建议直接用文本编辑器打开检查一遍。
-- @recompile_invalid_objects.sql
 
quit

例如声称代码如下

alter PUBLIC SYNONYM CTX_USER_INDEX_SUB_LEXERS compile;
alter PUBLIC SYNONYM CTX_USER_INDEX_SUB_LEXER_VALS compile;
alter PUBLIC SYNONYM CTX_TRACE_VALUES compile;
alter PUBLIC SYNONYM EXF$ATTRIBUTE compile;
alter PUBLIC SYNONYM EXF$ATTRIBUTE_LIST compile;
alter PUBLIC SYNONYM EXF$XPATH_TAGS compile;
alter PUBLIC SYNONYM EVALUATE compile;
alter PUBLIC SYNONYM DBMS_EXPFIL compile;
alter PUBLIC SYNONYM EQUALS_PATH compile;
alter PUBLIC SYNONYM PATH compile;
alter PUBLIC SYNONYM DEPTH compile;
alter PUBLIC SYNONYM ABSPATH compile;
alter PUBLIC SYNONYM ALL_PATH compile;
alter PUBLIC SYNONYM PATH_VIEW compile;

本页面的文字允许在知识共享 署名-相同方式共享 3.0协议和GNU自由文档许可证下修改和再使用,仅有一个特殊要求,请用链接方式注明文章引用出处及作者。请协助维护作者合法权益。


系列文章

文章列表

  • Oracle 数据库编译INVALID DB Object的方法

这篇文章对你有帮助吗,投个票吧?

rating: 0+x

留下你的评论

Add a New Comment
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License