zoukankan      html  css  js  c++  java
  • oracle compile 编译无效对象

    原博主:http://blog.csdn.net/tianlesoftware/article/details/4843600 

     Applies to: 
    Oracle Server - Enterprise Edition - Version: 10.1.0.5.0 
    This problem can occur on any platform. 
    Symptoms: 
    The issue is that the following error was raised : 
    ORA-00600: internal error code, arguments: [kesutlGetBindValue-2], [], [], [], [], [], [], [] 
    The recent changes was the : 
    Migration from 10.1.0.5.0 database control to Grid Control Agent v10.2.0.3.0 
    What was runing at this moment of the error occurance was : 
    The attempt to run SQL Tuning Advisor from Grid Control 


    Cause: 
    Possibly invalid objects in the database. 
    As the issue here was to try to use these packages and then failed: 
    SYS.DBMS_SQLTUNE_INTERNAL 
    body SYS.PRVT_ADVISOR 
    body SYS.DBMS_ADVISOR 
    body SYS.DBMS_SQLTUNE 
    And as mentioned with the recent changes was the migration. 

    Solution: 
    1. fixup 
    1). connect to the database as sysdba: 
    sqlplus "/ as sysdba" 
    2). shutdown immediate 
    3). startup migrate 
    4). @?/rdbms/admin/catalog.sql 
    5). @?/rdbms/admin/catproc.sql 
    6). @?/rdbms/admin/utlrp.sql 
    7). shutdown immediate 
    8). startup 

    SELECT UNIQUE OBJECT_TYPE FROM ALL_objects where status = 'INVALID'; 
    select 'ALTER ' || OBJECT_TYPE || ' '||owner||'.' || OBJECT_NAME || ' COMPILE;' 
    from  all_objects where  status = 'INVALID' 
    and  object_type in ('PACKAGE','FUNCTION','PROCEDURE', 'TABLE', 'VIEW', 'SEQUENCE', 'TRIGGER'); 
       
         
       SELECT * from dba_users; 
       select 'ALTER PACKAGE ' || OWNER||'.'|| OBJECT_NAME || ' COMPILE body;' 
    from ALL_objects where status = 'INVALID' and object_type in ('PACKAGE BODY'); 
    SELECT UNIQUE OBJECT_TYPE FROM ALL_OBJECTS; 


    2. Verify that the status of the CATPROC : 
    SQL> col comp_id format a10 
    SQL> col comp_name format a30 
    SQL> col version format a10 
    SQL> select comp_id, comp_name, status, version from dba_registry; 

    and the status of the other objects: 
    SQL> col object_name format a30 
    SQL> col owner format a15 
    SQL> select object_name, owner, object_type, status from dba_objects 
    where status = 'INVALID'; 

    2-If they are invalid please do the following: 
    To validate the invalid objects 
    1)-Please run the utlrp.sql script to try and validate the invalid packages, then check if they are valid or still invalid. 
    2 )-If the objects are still invalid after running the utlrp.sql script then run catalog.sql and catproc.sql and then run utlrp.sql 
        a) Startup restrict or startup migrate. 
        b) run catalog.sql 
        c) run catproc.sql 
        d) run utlrp.sql 
    3 )-Requery for the invalid objects again. 
    select owner,object_type,object_name from dba_objects where status='INVALID' ; 
    4 )-If they are still invalid please try to validate them manually using the below: 
    Try Manual method of validation: 
    Alter procedure <owner>.<procedure_name> compile; 
    Alter function <owner>.<function_name> compile; 
    Alter view <owner>.<view_name> compile; 
    Alter package <owner>.<package_name> compile; 
    Alter package <owner>.<package_name> compile body; 
    Alter materialized view <owner>.<Package_name> Compile; 
    In case you have lots of invalid objects,you can generate scripts that will generate the sqls for compiling the invalid objects : 
    In sqlplus connect as sys: 
    set heading off 
    spool compileinvalid.sql 
    select 'alter '||object_type|| ' ' || owner ||'.'||object_name || ' compile;' from dba_objects 
    where status='INVALID'; 
    spool off 
    ORA-06512: at "PS_SYSTEM.ROW_VALIDATOR_T", line 912 
    ORA-06512: at "PS_SYSTEM.ROW_VALIDATOR_T", line 924 
    ORA-06512: at "WORKORDER.INVENTORY_UTL", line 1260 
    select owner,object_name,object_type,status from all_objects where object_name='ROW_VALIDATOR_T' and owner='PS_SYSTEM'; 
    OWNER                          OBJECT_NAME                        OBJECT_TYPE       STATUS 
    ------------------------------ ------------------------------ ------------------- ------- 
    PS_SYSTEM                      ROW_VALIDATOR_T           TYPE                      VALID 
    PS_SYSTEM                      ROW_VALIDATOR_T          TYPE BODY           VALID 



    SQL> select owner,object_name,object_type,status from all_objects where object_name='INVENTORY_UTL' and owner='WORKORDER' 
      2  ; 
    OWNER                             OBJECT_NAME                     OBJECT_TYPE          STATUS 
    ------------------------------ ------------------------------ -------------------      ------- 
    WORKORDER                      INVENTORY_UTL           PACKAGE                  VALID 
    WORKORDER                      INVENTORY_UTL           PACKAGE BODY       VALID 


    Then run compileinvalid.sql in sqlplus prompt as sys user.. 
    To compile invalid package body use: 
    alter package <package_name> compile body; 

    5 )-Also you could do the following  Note 100419.1  SCRIPT: VALIDATE.SQL to ANALYZE VALIDATE 
    STRUCTURE objects in a Tablespace 
    Please Go through the above action plan and i will be waiting for your update. 
    6 )-Please make sure that these packages are valid: 
    SYS.DBMS_SQLTUNE_INTERNAL 
    body SYS.PRVT_ADVISOR 
    body SYS.DBMS_ADVISOR 
    body SYS.DBMS_SQLTUNE 

    References 
    Note 100419.1 - SCRIPT: VALIDATE.SQL to ANALYZE .. VALIDATE STRUCTURE objects in a Tablespace 

    alter PACKAGE BODY SYS.DBMS_XPLAN body compile; 
    alter PACKAGE BODY SYS.DBMS_SQLTUNE_INTERNAL body compile; 
    alter SYNONYM PUBLIC.HHLINEOR compile; 
    alter SYNONYM PUBLIC.HHNEIGHBOUR compile; 
    alter SYNONYM PUBLIC.HHLINEPS compile; 
    alter SYNONYM PUBLIC.HHIDROWS compile; 
    alter SYNONYM PUBLIC.HHIDLROWS compile; 
    alter SYNONYM PUBLIC.HHBITS compile; 


    ---------无效索引查询 'INVALID INDEXES' 

    select s2.owner, s2.tablespace_name, s2.segment_name, 
            i2.table_name, s2.extents, s2.bytes, s2.blocks, i2.status 
    from dba_segments s2, 
            dba_indexes i2 
    where s2.owner not in ('SYS','SYSTEM') 
    and s2.segment_type = 'INDEX' 
    and i2.status != 'VALID' 
    and s2.segment_name = i2.index_name 
    and s2.owner = i2.owner 
    order by 1,5,4 

    Oracle常用脚本
    -- use sys to run this one
    select    'ALTER ' || OBJECT_TYPE || ' '||owner||'.' || OBJECT_NAME || ' COMPILE;' 
    from    all_objects 
    where    status = 'INVALID' 
    and object_type in ('PACKAGE','FUNCTION','PROCEDURE', 'TABLE', 'VIEW', 'SEQUENCE', 'TRIGGER'); 

    --   select 
       'ANALYZE ' || OBJECT_TYPE || ' ' || OBJECT_NAME || ' COMPUTE STATISTICS;' 
    from 
       user_objects 
    where 
       object_type = 'TABLE';

     
     
  • 相关阅读:
    前端工程师如何打发闲余时光?(转)
    比较好的前端开发工具
    蓝桥历年套题 约数倍数选卡片 博弈
    单调栈求全1(或全0)子矩阵的个数 洛谷P5300与或和 P3400仓鼠窝
    5-15
    2018CCPC桂林站G Greatest Common Divisor
    STL中的BITSET运用
    2018CCPC桂林站JStone Game
    牛客2019湘潭大学程序竞赛
    Combine String HDU
  • 原文地址:https://www.cnblogs.com/ninicwang/p/6518680.html
Copyright © 2011-2022 走看看