• 转://oracle 重新编译用户无效对象


    select owner,object_name, replace(object_type,' ','') object_type,to_char(created,'yyyy-mm-dd') as created,to_char(last_ddl_time,'yyyy-mm-dd') as last_ddl_time,status from dba_objects where status='INVALID' and owner='SYS';
    OWNER OBJECT_NAME OBJECT_TYPE CREATED LAST_DDL_TIME STATUS
    ------ --------------------- ------------- ----------- -------------- ----------
    SYS ALL_TAB_STATISTICS VIEW 2011-09-17 2012-05-16 INVALID
    SYS USER_TAB_STATISTICS VIEW 2011-09-17 2012-05-16 INVALID
    SYS ALL_IND_STATISTICS VIEW 2011-09-17 2012-05-16 INVALID
    SYS USER_IND_STATISTICS VIEW 2011-09-17 2012-05-16 INVALID
    SYS VALIDATE_ORDIM PROCEDURE 2011-09-17 2012-05-16 INVALID
    SYS DBMS_CUBE_ADVISE PACKAGEBODY 2011-09-17 2012-05-16 INVALID
    SYS DBMS_CUBE PACKAGEBODY 2011-09-17 2012-05-16 INVALID

    方法1:手动重新rebuild
    SQL>alter view sys.ALL_TAB_STATISTICS compile;
    SQL>alter view sys.USER_TAB_STATISTICS compile;
    SQL>alter view ALL_IND_STATISTICS compile;
    SQL>alter view sys.USER_IND_STATISTICS compile;
    SQL>alter procedure sys.VALIDATE_ORDIM compile;
    SQL>alter package DBMS_CUBE_ADVISE compile body;
    SQL>alter package DBMS_CUBE compile body;

    方法2:
    oracle用户下执行
    $cd $ORACLE_HOME/rdbms/admin
    $sqlplus / as sysdba
    SQL>@utlprp.sql


    编译完成后,再次查看

    SQL> select owner,object_name
    2 , replace(object_type,' ','') object_type
    3 ,to_char(created,'yyyy-mm-dd') as created
    4 ,to_char(last_ddl_time,'yyyy-mm-dd') as last_ddl_time,
    5 status
    6 from dba_objects where status='INVALID' and owner='SYS';

    no rows selected
    方法3:
    [javascript] view plain copy
    以下是一个转帖的方法
    [javascript] view plain copy

    --创建自动编译失效过程事务记录表
    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;
    /

  • 相关阅读:
    改变多行文本字符串的缩进
    多线程
    python基本语法2.5--字符串的相关操作
    python基本语法2.4---汉诺塔的递归
    python基本语法2.3--函数及参数传递
    python基本语法2.2--函数名当作变量传递
    python基本语法2.1--if判断和while,for循环
    AlexNet源码
    python基本语法1.4--初识爬虫
    python基本语法1.5--调用numpy库的性能影响
  • 原文地址:https://www.cnblogs.com/zfox2017/p/6674758.html
Copyright © 2020-2023  润新知