日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

自动编译失效的Oracle数据库对象

發布時間:2023/12/10 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自动编译失效的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数据库对象的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。