oracle存储过程失效,Oracle自动编译失效对象Job_存储过程实现

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Helvetica}

p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Helvetica; min-height: 13.0px}

p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Tahoma; min-height: 11.0px}

--Oracle sys用户创建自动编译未编译成功的对象

create or replace procedure system_recomp is

sql1  user_objects%ROWTYPE;

sql2  user_objects%ROWTYPE;

sql3  user_objects%ROWTYPE;

v_sql1 varchar2(100);

v_sql2 varchar2(100);

v_sql3 varchar2(100);

begin

for sql1 in ( select * from user_objects where status='INVALID' and object_type='TRIGGER') loop

v_sql1 := 'alter trigger '||sql1.object_name||' compile';

execute immediate v_sql1;

end loop;

for sql2 in ( select * from user_objects where status='INVALID' and object_type='FUNCTION') loop

v_sql2 := 'alter FUNCTION '||sql2.object_name||' compile';

execute immediate v_sql2;

end loop;

for sql3 in ( select * from user_objects where status='INVALID' and object_type='PROCEDURE') loop

v_sql3 := 'alter PROCEDURE '||sql3.object_name||' compile';

execute immediate v_sql3;

end loop;

exception when others then

return;

end system_recomp;

/

--批量查询 失效的函数 并逐条执行:

select 'alter FUNCTION '||object_name||' compile;' from user_objects where status='INVALID' and object_type='FUNCTION';

--批量查询 失效的过程 并逐条执行:

select  'alter PROCEDURE '||object_name||' compile;' from user_objects where status='INVALID' and object_type='PROCEDURE';

--批量查询 失效的触发器 并逐条执行:

select 'alter trigger '||object_name||' compile;' from user_objects where status='INVALID' and object_type='TRIGGER';

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
日常管理维护一个oracle数据库服务器的时,经常会碰到修改view,table结构的情况,而且由于oracle view,函数,存储过程对象的相互关联的关系,经常会由于一个view,table,fun,proc的修改而导致相关的对象失效。而实施的时候,经常只会注意要修改的对象是否修改完成,往往忽略相关对象失效问题,所以做了一个自动重新编译的脚本程序,目的是定期(10分钟)完成一次对所有对象的检查,如果有失效对象,则对其进行重新编译。 机制是:基于linux的crontab,定期执行下述脚本,对失效对象,执行alter object_type object_name compile;语句,达到重新编译。 如果扩展该脚本,可以完成对失效对象进行告警等管理的需要。 该脚本运行于oracle9i,linux 环境下面 #!/bin/sh nowdir=`pwd` #配置文件的生成日期 nowtime=`date '+%Y%m%d'` nowtime_h=`date '+%Y%m%d%H%M'` #脚本执行的目录 dmpdir=/oracle_script/auto_recompile #初始化参数 cd #执行oracle 相关的环境变量, . .bash_profile cd $dmpdir #下面取出失效对象('TRIGGER','PROCEDURE','FUNCTION','VIEW), #并且去掉系统的对象,只针对用户自己部署的。 #如果有失效对象则完成alter sql语句。 rm -rf param.temp $ORACLE_HOME/bin/sqlplus -SILENT "/ as sysdba" <<eof set pagesize 1000 set linesize 100 set heading off set feedback off column table_name format a30 spool param.temp select 'alter '||a.object_type||' '||a.owner||'.'||a.object_name ||' compile;' from dba_objects a where a.object_type in('TRIGGER','PROCEDURE','FUNCTION','VIEW') and a.status='INVALID' and a.owner not in ('SYS' ,'SYSTEM','OUTLN','U_SYSTEM'); spool off exit; eof # Start to backup oracle database param echo "-------------- Complete obj compile Started on `date` -------------" >>$dmpdir/do.log dofilelog="obj_compile"$nowtime_h'.log' $ORACLE_HOME/bin/sqlplus -SILENT "/ as sysdba" <<eof SET serveroutput on long 999999 set pagesize 0 set linesize 300 spool $dofilelog @param.temp spool off exit; eof cat param.temp >> $dofilelog echo "-------------- Complete export End on `date` -------------" >>$dmpdir/do.log

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值