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

三、從新編譯應該會解決掉一部分的失效對象,可是仍然會有部分對象沒法經過從新編譯解決。對於這部分對象,須要進行人工的逐個分析,現場能夠確認的進行確認處理(有用則修改,無用則刪除),現場不能確認的能夠和研發確認,最終完成對失效對象處理的目的。

若是最終仍有部分無人能夠確認,建議先暫時保留便可。

相關文章
相關標籤/搜索