昨天看有个帖子说到的失效对象重新编译的问题,然后发现自己公司里也出现莫名其妙的失效对象。

--创建自动编译失效过程事务记录表
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数据库对象相关推荐

  1. Oracle数据库对象,同义词、序列、视图、索引

    数据库对象简介 Oracle 数据库对象又称模式对象 数据库对象是逻辑结构的集合,最基本的数据库对象是表 其他数据库对象包括: 同义词是现有对象的一个别名. 简化SQL语句 隐藏对象的名称和所有者 提 ...

  2. oracle 伪列访问序列,Oracle数据库对象,同义词、序列、视图、索引

    数据库对象简介 Oracle 数据库对象又称模式对象 数据库对象是逻辑结构的集合,最基本的数据库对象是表 其他数据库对象包括: 同义词是现有对象的一个别名. 简化SQL语句 隐藏对象的名称和所有者 提 ...

  3. Oracle数据库对象 序列

    2019独角兽企业重金招聘Python工程师标准>>> Oracle数据库对象_序列 序列是一种数据库对象,用来自动产生一组唯一的序号. 序列是一种共享式的对象,多个用户可以共同使用 ...

  4. Oracle 数据库对象

    目录 数据库对象 案例 1.序列 2.视图 3.索引 数据库对象 1.能够使用数据定义语言中的create关键来创建的都可以成为数据库对象. 2.Oracle中最基础的数据库对象:表,视图 3.其他: ...

  5. Oracle数据库对象题库

    一.    填空题 在用 create 语句创建基本表时,最初只是一个空的框架,用户可以使用insert命令把数据插入表中. 在基本表不需要时,可以使用 drop table 语句撤消.在一个基本表撤 ...

  6. Oracle数据库对象

    目录 一,数据库对象介绍 1.1 数据库对象 又称模式对象,是逻辑结构的集合.最基本的数据库对象就是表. 1.2  数据库对象包括 同义词.序列.视图.索引.表.函数.包.过程.触发器等. 二, 同义 ...

  7. oracle怎么找出失效索引,Oracle数据库索引失效

    Oracle数据库中有一个表,用PL/SQL查看该表的索引没有被DROP掉, 但是表上的数据查询起来很慢(查询时间大概是原来的3倍),后 Oracle数据库中有一个表,用PL/SQL查看该表的索引没有 ...

  8. Oracle数据库用户失效对象,Oracle数据库对象失效解决

    项目中开发使用了VPD,数据库用户B的对象的创建依赖于数据用户A,由于用户A的对象进行DDL.迁移或dump等操作,造成了用户B的对象INVALID.应用系统的数据源使用了用户B,因此造成应用系统出错 ...

  9. 数据库 Oracle数据库对象二

    视图 --视图是对表逻辑抽象 --视图的好处:简化查询 --视图是一种虚表 --视图建立在已有表的基础上,视图赖以建立的这些吧称为基表. --向视图提供数据内容的语句为select语句,可以将视图理解 ...

最新文章

  1. 嵌入式linux 用虚拟机,如何制作嵌入式Linux虚拟机
  2. java实现aop的几种方式_SpringAOP 的三种实现方式
  3. Centos设置静态IP及修改Centos配置文件
  4. sdut 2134 数据结构实验之栈与队列四:括号匹配
  5. 12月16日文章排行点评及编辑部训练
  6. 华谊兄弟:拟向阿里影业、腾讯等发行不超8.2亿股股票
  7. python识别图片上的文字_python如何一行代码实现图片文字识别
  8. spring security 2.x HttpSessionEventPublisher 以及listener配置
  9. 天梯—奇偶分家(C语言)
  10. python 生孩子朋友圈_生娃报喜朋友圈文案 孩子出生发朋友圈的话
  11. 第六章 第一个Linux驱动程序:统计单词个数
  12. 在线文档转word文档
  13. 2019年大学计算机二级考试报名,南通职业大学2019年秋季计算机二级考试报名通知...
  14. 练习题 斐波那契数列
  15. 家谱管理系统php,家谱管理系统(含源代码).docx
  16. 噩梦射手(SurvivalShooter)教程(六)
  17. 学生信息表(本地存储)
  18. gan 总结 数据增强_深度学习中的数据增强(下)
  19. 某金融机构身份国产化LDAP创新实践——国产自主可控 LDAP目录服务建设经验分享
  20. gitee配置流水线实现自动打包vue

热门文章

  1. mysql df_MySQL主从复制实战
  2. 用Java实现图片验证码功能
  3. nginx将ip+端口号映射为域名
  4. 【iCore3应用开发平台】发布 iCore3 应用开发平台出厂代码rev0.0.2
  5. CozyRSS开发记录8-解析一份RSS
  6. Git Push 避免输入用户名和密码方法
  7. ASP.NET学习笔记之操作过滤器
  8. [codility]Min-abs-sum
  9. C#下如何实现服务器 + 客户端的聊天程序
  10. mac 查看指定端口情况 并杀死该进程