`
tianshibaijia
  • 浏览: 1152873 次
文章分类
社区版块
存档分类
最新评论

Oracle失效对象自动重新编译

 
阅读更多
--创建自动编译失效过程事务记录表
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 视图,函数,过程,触发器自动编译脚本

    为了解决上述问题,本文介绍了一个自动重新编译Oracle对象的脚本。该脚本的目的在于定期(例如每10分钟)完成一次对所有对象的检查,如果发现有失效的对象,则对其进行重新编译。这样能够确保数据库中的各个对象都...

    重新编译PLSQL中的无效对象或者指定的对象 的方法

    Note: 在重新编译对象之前,请确保您拥有足够的权限,并且已经连接到正确的数据库实例。 重新编译 PLSQL 对象可以帮助恢复数据库的正常状态,提高数据库的性能和稳定性,并减少错误的出现。同时, Oracle 也提供了...

    Oracle无效的数据库对象

    Oracle 总是会尝试自动重编译无效的 PL/SQL 对象和视图,但是可能不会成功。下面将详细介绍如何标识和修正无效的数据库对象。 标识无效的对象 ----------------- 为了标识数据库中的所有无效的对象,我们可以作为...

    ORACLE用于编译无效脚本的过程.

    主要用于对数据库升级后无效脚本编译. 将这个脚本放在需要执行的SQL脚本最后面,可自动在执行完脚本后,编译无效对象, 适合用于一键升级

    【技术】检查该重新编译的索引

    然而,随着数据的增删改,原有的索引可能会变得效率低下,甚至失效,这就需要我们定期检查并可能重新编译索引。 在标题提及的“检查该重新编译的索引”过程中,我们主要关注以下几个方面: 1. **索引碎片**:当...

    数据库oracle触发器课件

    依赖性是Oracle数据库中重要的概念,数据字典跟踪了存储过程和函数所依赖的其他对象,如果依赖的对象发生变化,PL/SQL引擎会自动重编译。包的依赖性管理更复杂,包体的改变不会影响包头,但包头的改变会导致包体失效...

    一种PL_SQL程序包失效的解决方案.pdf

    对象依赖机制指的是Oracle数据库能够跟踪程序包与其他数据库对象之间的依赖关系,而自动重编机制则会在依赖的数据库对象发生变化时自动重新编译依赖它的程序包。因此,在处理程序包失效问题时,必须考虑到这些机制的...

    青云oracle工具

    7.oracle 有个特点,就是如果表结构发生变化,就会有很多视图,存储过程,触发器等跟着失效,这时候要把这些无效的对象重新编译一下。但是这个动作会经常遗忘, 所以我这里加了一个检索并修正无效对象的功能; 8....

    Oracle数据库维护手册

    2.7 失效数据库对象的检测和编译 通过查询DBA_OBJECTS视图可发现失效的对象,使用ALTER OBJECT ... COMPILE命令可重新编译,以恢复其有效性。 2.8 数据备份的技巧 备份是数据库管理的关键环节,包括物理备份(如...

    ORACLE DBMS STATS ERROR

    /rdbms/admin/utlrp.sql` 脚本来重新编译无效的对象,包括`DBMS_STATS`包。 5. **检查状态**:运行SQL查询以查看组件的状态,例如: ```sql SELECT substr(comp_name,1,30) comp_name, substr(comp_id,1,10) comp_...

    oracle 10201升级10205带图详细文档(linux)转

    升级完成后,可能需要对数据库中的失效对象进行重编译,以确保所有对象都能正常工作。 **5.1.3. 查看数据库安装的组件、版本、状态** 升级完毕后,应检查数据库中已安装的组件及其版本状态,确认是否成功升级。 **...

    Oracle数据库维护手册.docx

    * 失效数据库对象的编译方式:ALTER 命令、Oracle 企业管理器(Enterprise Manager) 八、数据备份的技巧 --------------------- 数据备份是 Oracle 数据库的重要任务之一,用于保护数据库中的重要数据。 * 数据...

    OracleDbTools.rar 青云oracle超人性化工具

    7.oracle 有个特点,就是如果表结构发生变化,就会有很多视图,存储过程,触发器等跟着失效,这时候要把这些无效的对象重新编译一下。但是这个动作会经常遗忘, 所以我这里加了一个检索并修正无效对象的功能;

    ORACLE SYS.DBMS_REGISTRY_SYS has errors

    `UTLRP`(Utility Load Run Profile)是Oracle用于重新编译所有无效对象的脚本,通常在补丁应用后执行以确保所有对象的正确性。 错误信息`ORA-04063`表明包体`SYS.DBMS_REGISTRY_SYS`存在错误,`ORA-06508`表示无法...

    Oracle数据泵简明使用手册

    - **编译失效对象**:在导入过程中可能会出现一些对象因为依赖关系而失效的情况,此时需要重新编译这些对象。 #### 六、无DMP文件的数据同步 - **建立DBLINK**:在源数据库和目标数据库之间建立数据库链接(DBLINK...

    Oracle绿色版免安装数据库客户端管理工具

    这个也是该软件最大亮点.7.oracle 有个特点,就是如果表结构发生变化,就会有很多视图,存储过程,触发器等跟着失效,这时候要把这些无效的对象重新编译一下.但是这个动作会经常遗忘,所以我这里加了一个检索并修正无效...

    Oracle 工具

    7.oracle 有个特点,就是如果表结构发生变化,就会有很多视图,存储过程,触发器等跟着失效,这时候要把这些无效的对象重新编译一下。但是这个动作会经常遗忘, 所以这里加了一个检索并修正无效对象的功能;...

    Oracle数据库日常维护手册.pdf

    - **注意事项**: 如果发现此类对象,考虑增加其最大扩展限制或重新组织对象。 #### 五、检查Oracle数据库备份结果 ##### 5.1 检查数据库备份日志信息 - **命令**: `$ cat /backup/logs/ckdb_backup.log` - **解释...

Global site tag (gtag.js) - Google Analytics