自動編譯失效的Oracle資料庫物件

來源:互聯網
上載者:User

標籤:

昨天看有個文章說到的失效對象重新編譯的問題,然後發現自己公司裡也出現莫名其妙的失效對象。

--建立自動編譯失效過程事務記錄表declare  tabcnt integer := 0;begin  select count(*) into tabcnt from dba_tables where table_name=‘RECOMPILE_LOG‘;  if tabcnt = 0 then    execute immediate ‘create table recompile_log(rdate date,errmsg varchar2(200))‘;  end if;end;/--建立編譯失效對象的預存程序create or replace procedure recompile_invalid_objects  as  str_sql varchar2(200);  --中間用到的sql語句  p_owner varchar2(20);   --所有者名稱,即SCHEMA  errm 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_objects    where status = ‘INVALID‘ and object_type = ‘PROCEDURE‘ and owner=upper(p_owner))  loop    str_sql := ‘alter procedure ‘ ||invalid_procedures.object_name || ‘ compile‘;    begin      execute immediate str_sql;    exception      When Others Then      begin        errm := ‘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_objects    where status = ‘INVALID‘ and object_type = ‘FUNCTION‘ and owner=upper(p_owner))  loop    str_sql := ‘alter function ‘ ||invalid_functions.object_name || ‘ compile‘;    begin      execute immediate str_sql;    exception      When Others Then      begin        errm := ‘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_objects    where status = ‘INVALID‘ and object_type = ‘PACKAGE‘ and owner=upper(p_owner))  loop    str_sql := ‘alter package ‘ ||invalid_packages.object_name || ‘ compile‘;    begin      execute immediate str_sql;    exception      When Others Then      begin        errm := ‘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_objects    where status = ‘INVALID‘ and object_type = ‘TYPE‘ and owner=upper(p_owner))  loop    str_sql := ‘alter type ‘ ||invalid_types.object_name || ‘ compile‘;    begin      execute immediate str_sql;    exception      When Others Then      begin        errm := ‘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_objects    where status = ‘INVALID‘ and object_type = ‘INDEX‘ and owner=upper(p_owner))  loop    str_sql := ‘alter index ‘ ||invalid_indexs.object_name || ‘ rebuild‘;    begin      execute immediate str_sql;    exception      When Others Then      begin        errm := ‘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_objects    where status = ‘INVALID‘ and object_type = ‘TRIGGER‘ and owner=upper(p_owner))  loop    str_sql := ‘alter trigger ‘ ||invalid_triggers.object_name || ‘ compile‘;    begin      execute immediate str_sql;    exception      When Others Then      begin        errm := ‘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 then    for jobs in (select job from all_jobs where what = ‘recompile_invalid_objects;‘ and broken = ‘N‘)    loop      str_sql := ‘begin dbms_job.remove(‘||jobs.job||‘); end;‘;      begin        execute immediate str_sql;      exception        When 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;/

  

自動編譯失效的Oracle資料庫物件

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.