近期對資料庫進行巡檢,發現資料庫業務用戶(非 SYS/Public)下存在失效物件,對失效物件進行分析,主要包括失效的視圖、物化視圖、函式、包、觸發器等,
思考:
基于以下原因,建議對失效物件進行處理:
1、通過失效的物件,可能能夠反推發現業務軟體問題(業務系統功能太多,可能存在測驗不充分的問題);
2、如果失效物件太多,業務又頻繁呼叫的話,擔心影響資料庫性能(未進行測驗,個人想法,如有錯誤請大家指正);
處理方式:
1、先搜索發現失效物件(在sys用戶下執行)
select owner, object_name, object_type, status from dba_objects t where status='INVALID' order by t.owner,t.object_type;
2、對失效物件自動生成重編譯陳述句,進行重編譯
下面是為視圖、函式、物化視圖、包、觸發器的生成陳述句,
--自動生成視圖重新編譯陳述句 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;
生成陳述句后復制處理批量執行即可,
3、重新編譯應該會解決掉一部分的失效物件,但是仍然會有部分物件無法通過重新編譯解決,對于這部分物件,需要進行人工的逐個分析,現場可以確認的進行確認處理(有用則修改,無用則洗掉),現場不能確認的可以和研發確認,最終完成對失效物件處理的目的,
如果最終仍有部分無人可以確認,建議先暫時保留即可,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/286075.html
標籤:Oracle
上一篇:我10億級ES資料遷到MongoDB節省90%成本!--轉載
下一篇:初識Oracle資料庫基礎筆記
