Oracle失效对象自动重新编译_proceture 自动编译-程序员宅基地

技术标签: 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;
/
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xiegh2014/article/details/43985015

智能推荐

css选择器总结_加瓦class-程序员宅基地

文章浏览阅读287次。css选择器汇总,以及css选择器权重的讲解_加瓦class

MATLAB摄像头可以运行但是打不开视频_matlab使用摄像头成功但没图像-程序员宅基地

文章浏览阅读510次。今天在学习一个MATLAB关于摄像头操作的代码,运行之后摄像头会一闪一闪,但是就是打不开视频的画面,查看了半天代码发现代码也没有错,最后尝试着将代码中的下面这句中的320x240改为640x480就可以打开视频了vid = videoinput('winvideo', 1, 'YUY2_320x240'); 或者直接去掉第三个参数也可以,例如:vid = videoinput('w..._matlab使用摄像头成功但没图像

Zookeeper 命令和查看节点数据_zk集群如何查看znode大小-程序员宅基地

文章浏览阅读10w+次,点赞7次,收藏33次。1、ZooKeeper命令行在安装目录bin下,执行zkcli.cmd 或zkcli.sh。然后输入命令。常用命令:(1)查看数据:ls, ls2(2)获取数据:get2、四字命令一些数据使用zkCli命令查看不到,使用四字命令则可以获取到。(1)方式1,使用telnet命令可通过telnet或nc命令向ZooKeeper端口发送4个字符的命令。windows下..._zk集群如何查看znode大小

python爬虫网页解析之parsel模块_import parsel-程序员宅基地

文章浏览阅读1.7k次,点赞2次,收藏6次。python爬虫网页解析之parsel模块一.parsel模块安装官网链接https://pypi.org/project/parsel/1.0.2/pip install parsel==1.0.2二.模块作用改模块主要用来将请求后的字符串格式解析成re,xpath,css进行内容的匹配推荐Python大牛在线分享技术 扣qun:855408893领域:web开发,爬虫,数据分..._import parsel

安卓国际化之strings.xml导入Excel表格及从excel恢复到Strings.xml中_安卓国际化 .string文件怎么打开-程序员宅基地

文章浏览阅读2k次,点赞5次,收藏12次。 APP国际化已经是一个比较常用的需求了,当然中文部分身为开发人员自己就能三两下搞定,如果是其他语种。。。emm,我们身为开发人员的是不会越俎代庖的(关键是懒其实是不会),还是交给专业人士好了,哈哈哈。如果你把整个strings.xml文件发给翻译人员,估计他们会一脸懵逼,叫他们直接把文件里面的中文翻译成英文,但是不能破坏xml里的尖括号的格式,让男翻译火冒三丈,让女翻译的男朋友偷偷发..._安卓国际化 .string文件怎么打开

Visual Studio 快捷键更改和设置_visual studio中提示内容的选中键怎么设置-程序员宅基地

文章浏览阅读9.1w次,点赞35次,收藏55次。Visual Studio 快捷键更改和设置Visual Studio是程序员最为经常利用的利器,一把利器没有快捷键的支持将会少了很多乐趣和便捷。Qt的快捷键也是非常灵活多变。一般来说Visual Studio中的有些快捷键将会让你大开眼界。举个简单例子,大家都知道Ctrl+C是复制功能,操作便是选中按键复制粘贴。但是你却忽略了:当光标在某一行代码上,你按ctrl+C键,将会复制一行,无需..._visual studio中提示内容的选中键怎么设置

随便推点

计算机进制幼儿入门,少儿编程中,你该如何给孩子讲解进制问题-程序员宅基地

文章浏览阅读251次。今天继续来聊少儿编程,在聊这个话题之前,先来说一说昨天在上一篇文章中看到的评论,评论这样说,“你这么喜欢编程,有女朋友吗?”看到这条评论,我觉得非常有必要回复一下,这也是很多人对于编程人员的一个误会,总是认为编程人员那么忙碌,性格可能会有点古怪,甚至来说,是一个宅男,是一个不会讨女生欢迎的男生。但就我所知,就我的周边来是说,和我接触的一些做程序员的朋友,他们的收入都还算好,至少来说,在北上广深这些..._二进制怎么跟孩子将

Unity发布的WebGL页面应用实现全屏/非全屏切换_unity中web切换全屏-程序员宅基地

文章浏览阅读1.1k次。转载之https://blog.51cto.com/shuxiayeshou/2386140_unity中web切换全屏

自学JAVA第三天-巩固练习-java基础篇_从控制台接收2个考试的整数分数-程序员宅基地

文章浏览阅读1k次,点赞4次,收藏4次。业精于勤,荒于嬉;行成于思,毁于随。1. 第一题:考试平均分​ 请编程,从控制台接收2个考试的整数分数:数学分数、英语分数。然后程序要计算并打印两科的平均分是多少?(结果取整数即可)import java.util.Scanner;public class average{ public static void main(Strang[] args){ //创建键盘接收对象 Scanner sc = new (System.in); System.out.print("请输入._从控制台接收2个考试的整数分数

C#中string型字段的区别 (char、varchar、nchar、nvarchar)_string和nvarchar-程序员宅基地

文章浏览阅读7.5k次。源地址:http://www.cnblogs.com/mekong/archive/2009/04/17/1437996.html对于程序中的string型字段,SQLServer中有char、varchar、nchar、nvarchar四种类型来对应(暂时不考虑text和ntext),开建立数据库中,对这四种类型往往比较模糊,这里做一下对比。定长或变长所谓定长就是长度固定_string和nvarchar

BehaviorTree.CPP 教程一:创建树_behaviortree createtreefromfile-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏9次。(翻译)BehaviorTree.CPP教程一:创建树 :https://www.behaviortree.dev/tutorial_01_first_tree/如何创建一个行为树行为树与状态机类似,只不过行为树是在正确的时间和条件下调用回调的一种机制。此外,我们将交替使用“回调”和“标记”这两个词。在这些回调中发生什么由你决定。在本系列教程中,大多数情况下Action只会在控制台打印一些信息,但请记住,真正的“production”代码可能会做一些更复杂的事情。如何创建自己的.._behaviortree createtreefromfile

texlive与texstudio的安装与配置_怎么更改texstudio的保存路径-程序员宅基地

文章浏览阅读2.2k次,点赞2次,收藏3次。今日学习:texlive与texstudio的安装与配置1 打开安装包,点击install-tl-advanced,然后点击continue:2 可更改安装路径,并且一定要把修改注册表中的path值更改为是。3 然后安装texlive,等待安装完成的提示。4 安装texstudio,在百度搜下“Texstudio下载”。可以更改界面为中文界面,操作步骤:先点击Options,然后点击..._怎么更改texstudio的保存路径