Oracle数据库失效对象处理

近期对数据库进行巡检,发现数据库业务用户(非 SYS/Public)下存在失效对象。对失效对象进行分析,主要包括失效的视图、物化视图、函数、包、触发器等。数据库

思考:函数

基于如下缘由,建议对失效对象进行处理:性能

一、经过失效的对象,可能可以反推发现业务软件问题(业务系统功能太多,可能存在测试不充分的问题);测试

二、若是失效对象太多,业务又频繁调用的话,担忧影响数据库性能(未进行测试,我的想法,若有错误请你们指正);spa

处理方式:code

一、先搜索发现失效对象(在sys用户下执行)对象

select owner, object_name, object_type, status  from dba_objects t  where status='INVALID'  order by t.owner,t.object_type;

二、对失效对象自动生成重编译语句,进行重编译blog

下面是为视图、函数、物化视图、包、触发器的生成语句。编译

--自动生成视图从新编译语句
select owner, object_name, object_type, status  ,'alter view ' || t.owner||'.' || object_name || ' compile'||';'
from dba_objects t  
where status='INVALID' and t.object_type='VIEW'  order by t.owner,t.object_type;
--自动生成函数从新编译语句
select owner, object_name, object_type, status  ,'alter FUNCTION ' || t.owner||'.' || object_name || ' compile'||';'
from dba_objects t  
where status='INVALID' and t.object_type='FUNCTION'  order by t.owner,t.object_type;
--自动生成视物化图从新编译语句
select owner, object_name, object_type, status  ,'alter MATERIALIZED VIEW ' || t.owner||'.' || object_name || ' compile'||';'
from dba_objects t  
where status='INVALID' and t.object_type='MATERIALIZED VIEW'  order by t.owner,t.object_type;
--自动生成包从新编译语句
select owner, object_name, object_type, status  ,'alter PACKAGE ' || t.owner||'.' || object_name || ' compile'||';'
from dba_objects t  
where status='INVALID' and t.object_type='PACKAGE BODY'  order by t.owner,t.object_type;
--自动生成触发器从新编译语句
select owner, object_name, object_type, status  ,'alter TRIGGER ' || t.owner||'.' || object_name || ' compile'||';'
from dba_objects t  
where status='INVALID' and t.object_type='TRIGGER'  order by t.owner,t.object_type;

生成语句后复制处理批量执行便可。class

三、从新编译应该会解决掉一部分的失效对象,可是仍然会有部分对象没法经过从新编译解决。对于这部分对象,须要进行人工的逐个分析,现场能够确认的进行确认处理(有用则修改,无用则删除),现场不能确认的能够和研发确认,最终完成对失效对象处理的目的。

若是最终仍有部分无人能够确认,建议先暂时保留便可。

相关文章
相关标签/搜索