编译数据库失效对象脚本

set heading off
set pages 9999
set linesize 500
set verify off
set echo off
SET FEED OFF
spool compile_invalid_object.sql
select 'alter '||object_type||' '||object_name||' compile;'
  from user_objects
 where status = 'INVALID'
   and object_type in ('VIEW','FUNCTION','JAVA SOURCE','JAVA CLASS','PROCEDURE','PACKAGE','TRIGGER');
select 'alter package '||object_name||' compile body;'
  from user_objects
 where status = 'INVALID'
   and object_type = 'PACKAGE BODY';
spool off
SET FEED ON
spool compile_invalid_object.log
@compile_invalid_object.sql
spool off[@more@]set heading off
set pages 9999
set linesize 500
set verify off
set echo off
SET FEED OFF
spool compile_invalid_object.sql
select 'alter '||object_type||' '||object_name||' compile;'
  from user_objects
 where status = 'INVALID'
   and object_type in ('VIEW','FUNCTION','JAVA SOURCE','JAVA CLASS','PROCEDURE','PACKAGE','TRIGGER');
select 'alter package '||object_name||' compile body;'
  from user_objects
 where status = 'INVALID'
   and object_type = 'PACKAGE BODY';
spool off
SET FEED ON
spool compile_invalid_object.log
@compile_invalid_object.sql
spool off

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/76065/viewspace-788504/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/76065/viewspace-788504/

  • 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、付费专栏及课程。

余额充值