自动编译失效的Oracle数据库对象
生活随笔
收集整理的這篇文章主要介紹了
自动编译失效的Oracle数据库对象
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
昨天看有個帖子說到的失效對象重新編譯的問題,然后發現自己公司里也出現莫名其妙的失效對象。
--創建自動編譯失效過程事務記錄表 declaretabcnt integer := 0; beginselect count(*) into tabcnt from dba_tables where table_name='RECOMPILE_LOG';if tabcnt = 0 thenexecute immediate 'create table recompile_log(rdate date,errmsg varchar2(200))';end if; end; /--創建編譯失效對象的存儲過程 create or replace procedure recompile_invalid_objects asstr_sql varchar2(200); --中間用到的sql語句p_owner varchar2(20); --所有者名稱,即SCHEMAerrm varchar2(200); --中間錯誤信息 begin/*****************************************************/p_owner := 'owner';/***用戶名*************************//*****************************************************/ insert into recompile_log(rdate, errmsg) values(sysdate,'time to recompile invalid objects'); --編譯失效存儲過程for invalid_procedures in (select object_name from all_objectswhere status = 'INVALID' and object_type = 'PROCEDURE' and owner=upper(p_owner))loopstr_sql := 'alter procedure ' ||invalid_procedures.object_name || ' compile';beginexecute immediate str_sql;exceptionWhen Others Thenbeginerrm := 'error by obj:'||invalid_procedures.object_name||' '||sqlerrm;insert into recompile_log(rdate, errmsg) values(sysdate,errm);end;end;end loop;--編譯失效函數for invalid_functions in (select object_name from all_objectswhere status = 'INVALID' and object_type = 'FUNCTION' and owner=upper(p_owner))loopstr_sql := 'alter function ' ||invalid_functions.object_name || ' compile';beginexecute immediate str_sql;exceptionWhen Others Thenbeginerrm := 'error by obj:'||invalid_functions.object_name||' '||sqlerrm;insert into recompile_log(rdate, errmsg) values(sysdate,errm);end;end;end loop;--編譯失效包for invalid_packages in (select object_name from all_objectswhere status = 'INVALID' and object_type = 'PACKAGE' and owner=upper(p_owner))loopstr_sql := 'alter package ' ||invalid_packages.object_name || ' compile';beginexecute immediate str_sql;exceptionWhen Others Thenbeginerrm := 'error by obj:'||invalid_packages.object_name||' '||sqlerrm;insert into recompile_log(rdate, errmsg) values(sysdate,errm);end;end;end loop;--編譯失效類型for invalid_types in (select object_name from all_objectswhere status = 'INVALID' and object_type = 'TYPE' and owner=upper(p_owner))loopstr_sql := 'alter type ' ||invalid_types.object_name || ' compile';beginexecute immediate str_sql;exceptionWhen Others Thenbeginerrm := 'error by obj:'||invalid_types.object_name||' '||sqlerrm;insert into recompile_log(rdate, errmsg) values(sysdate,errm);end;end;end loop;--編譯失效索引for invalid_indexs in (select object_name from all_objectswhere status = 'INVALID' and object_type = 'INDEX' and owner=upper(p_owner))loopstr_sql := 'alter index ' ||invalid_indexs.object_name || ' rebuild';beginexecute immediate str_sql;exceptionWhen Others Thenbeginerrm := 'error by obj:'||invalid_indexs.object_name||' '||sqlerrm;insert into recompile_log(rdate, errmsg) values(sysdate,errm);end;end;end loop;--編譯失效觸發器for invalid_triggers in (select object_name from all_objectswhere status = 'INVALID' and object_type = 'TRIGGER' and owner=upper(p_owner))loopstr_sql := 'alter trigger ' ||invalid_triggers.object_name || ' compile';beginexecute immediate str_sql;exceptionWhen Others Thenbeginerrm := 'error by obj:'||invalid_triggers.object_name||' '||sqlerrm;insert into recompile_log(rdate, errmsg) values(sysdate,errm);end;end;end loop;end; /--創建任務計劃,每天早上8點整執行該任務,且保證此任務有且只有一個 declare jobcnt integer :=0;job_recompile number := 0;str_sql varchar2(200); begin select count(*) into jobcnt from all_jobs where what = 'recompile_invalid_objects;' and broken = 'N';if jobcnt > 0 thenfor jobs in (select job from all_jobs where what = 'recompile_invalid_objects;' and broken = 'N')loopstr_sql := 'begin dbms_job.remove('||jobs.job||'); end;';beginexecute immediate str_sql;exceptionWhen Others Then null;end;end loop; end if;--創建任務計劃dbms_job.submit(job_recompile,'recompile_invalid_objects;',sysdate,'TRUNC(SYSDATE + 1) + 8/24');--啟動任務計劃dbms_job.run(job_recompile); end; /
轉載于:https://www.cnblogs.com/lynnwang/p/4868034.html
總結
以上是生活随笔為你收集整理的自动编译失效的Oracle数据库对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 很难找齐的常识
- 下一篇: 提升面对电脑的工作效率