对于一个正在开发的数据库系统来说,修改数据模型,修改程序都是在所难免的,修改了以后,可能导致一些对象失效。ORACLE每次在巡检时都会提示我们有哪些失效对象需要编译。我设计了一个自动编译失效对象的存储过程来解决这个问题。
我将这个程序部署在unix上,使用crontab每日23:00运行。
PS:我写BLOG有个坏毛病,总是想起来了才写,没想起来可能好久都不来更新,哈哈,这样不太好。
CREATE OR REPLACE PROCEDURE BAM.GENE_RECOMPILE
IS
/***********************************************************************
/* Procedure : GENE_RECOMPILE
/* Description : 对失效对象进行编译
/* Schedule : 手工
/* MODIFIED (MM/DD/YYYY) - Recommend
/* Feng 02/01/2012 - Created
/***********************************************************************/
cursor curInvalidObjects IS
SELECT object_name, object_type FROM user_objects WHERE status = 'INVALID';
recColumns curInvalidObjects%ROWTYPE;
errStatus numeric;
BEGIN
dbms_output.enable(10000);
OPEN curInvalidObjects;
LOOP
--fetch data from db
fetch curInvalidObjects into recColumns;
exit when curInvalidObjects%notfound;
dbms_output.put_line('Recompiling '|| recColumns.Object_Type || ' ' || recColumns.Object_Name );
BEGIN
dbms_ddl.alter_compile(recColumns.Object_Type, null, recColumns.Object_Name);
EXCEPTION
WHEN others THEN
errStatus := sqlcode;
dbms_output.put_line('Recompilation failed : ' || sqlerrm(errStatus));
END;
END LOOP;
close curInvalidObjects;
END GENE_RECOMPILE;
/
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10356975/viewspace-739353/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/10356975/viewspace-739353/