zoukankan      html  css  js  c++  java
  • Oracle-APEX组件失效问题分析过程

    Oracle-APEX组件失效问题

    1. 问题现象

    在Oracle11.2.0.4版本中发现APEX组件失效

    set lines 168 pages 99
    col comp_name for a32
    select comp_name, version, status, schema from dba_registry where status='INVALID';
    COMP_NAME			 VERSION			STATUS		       SCHEMA
    -------------------------------- ------------------------------ ---------------------- ------------------------------
    Oracle Application Express	 3.2.1.00.12			INVALID		       APEX_030200
    
    
    col object_name for a32
    select owner, object_name, object_type from dba_objects where status = 'INVALID';
    OWNER			       OBJECT_NAME			OBJECT_TYPE
    ------------------------------ -------------------------------- -------------------
    APEX_030200		       WWV_FLOW_HELP			PACKAGE BODY
    
    

    2. 分析

    重新编译失效包体

    alter package APEX_XXXXXX.WWV_FLOW_HELP compile body;
    show err;
    
    
    col text for a64
    select text from dba_errors where name = 'WWV_FLOW_HELP' and owner ='APEX_030200';
    

    输出结果,发现表或视图或包不存在。如下:

    SQL> show err
    Errors for PACKAGE BODY APEX_030200.WWV_FLOW_HELP:
    
    LINE/COL ERROR
    -------- -----------------------------------------------------------------
    188/20   PL/SQL: SQL Statement ignored
    189/27   PL/SQL: ORA-00942: table or view does not exist
    191/13   PL/SQL: Statement ignored
    191/13   PLS-00201: identifier 'CTX_DDL.DROP_PREFERENCE' must be declared
    196/16   PL/SQL: SQL Statement ignored
    197/23   PL/SQL: ORA-00942: table or view does not exist
    199/9    PL/SQL: Statement ignored
    199/9    PLS-00201: identifier 'CTX_DDL.DROP_PREFERENCE' must be declared
    261/5    PL/SQL: Statement ignored
    261/5    PLS-00201: identifier 'CTX_DDL.CREATE_PREFERENCE' must be
             declared
    
    262/5    PL/SQL: Statement ignored
    262/5    PLS-00201: identifier 'CTX_DDL.SET_ATTRIBUTE' must be declared
    265/9    PL/SQL: Statement ignored
    265/9    PLS-00201: identifier 'CTX_DDL.SET_ATTRIBUTE' must be declared
    280/9    PL/SQL: Statement ignored
    280/9    PLS-00201: identifier 'CTX_DDL.CREATE_PREFERENCE' must be
             declared
    
    292/13   PL/SQL: Statement ignored
    292/13   PLS-00201: identifier 'CTX_DOC.FILTER' must be declared
    312/13   PL/SQL: Statement ignored
    312/13   PLS-00201: identifier 'CTX_DOC.FILTER' must be declared
    SQL>
    

    通过Oracle内部包都wrapped加密,不能直接查看包体代码,需要解码

    set long 9999
    select dbms_metadata.get_ddl('PACKAGE_BODY','WWV_FLOW_HELP','APEX_030200') from dual;
    

    检查相关对象是否存在

    set lines 168 pages 99
    col object_name for a32
    select owner,object_name, object_type, status from dba_objects where object_name in ('CTX_DDL','CTX_DOC','CTX_USER_PREFERENCES');
    no rows selected
    

    从上面输出结果,发现对象都不存在。到其它数据库检查知道这3个对象都属于CTXSYS 模式

    image-20200727105551116

    检查故障库用户及其所有组件信息

    select username, account_status from dba_users where username='CTXSYS';
    select comp_id, comp_name,VERSION,MODIFIED,PROCEDURE, status from dba_registry where schema='CTXSYS';
    

    发现该故障库未安装相关对象组件。

    总结

    至此,问题原因已经浮出水面。由于CTXSYS模式未安装引起APEX组件缺失相关表、视图和包,导致APEX组件中一个包体失效。

    3. 解决措施

    前期准备

    配置环境变量

    Platform:             Requires path set:    ENV variable:
    --------------------- --------------------- -------------------
    Linux x86-64          YES                   LD_LIBRARY_PATH
    Solaris SPARC64       YES                   LD_LIBRARY_PATH
    IBM AIX               YES                   LIBPATH
    HP PA-RISC            YES                   SHLIB_PATH
    HP Itanium            YES                   LD_LIBRARY_PATH
    
    - If you have the C Shell (csh or tcsh), enter the following:
       $ setenv LD_LIBRARY_PATH $ORACLE_HOME/ctx/lib:$LD_LIBRARY_PATH
    
    - If you have the Bourne shell (sh), Bash shell (bash), or Korn shell (ksh), enter the following:
       $ export LD_LIBRARY_PATH=$ORACLE_HOME/ctx/lib:$LD_LIBRARY_PATH
    
    Run the following command to check if the LD_LIBRARY_PATH environmental variable is set correctly:
    $ echo $LD_LIBRARY_PATH
    
    

    CTXSYS用户所需权限

    需要执行DBMS_LOB and DBMS_SCHEDULER的权限(默认授权给PUBLIC)

    grant execute on DBMS_SCHEDULER to PUBLIC;
    grant execute on DBMS_JOB to PUBLIC;
    grant execute on UTL_FILE to PUBLIC;
    grant execute on UTL_HTTP to PUBLIC;
    
    -- 确认
    select owner, object_name, object_type,status from dba_objects where owner='PUBLIC' and object_name in ('DBMS_SCHEDULER', 'DBMS_JOB', 'UTL_FILE', 'UTL_HTTP') ;
    

    安装Oracle Text组件

    创建CTXSYS用户和组件

    sqlplus / as sysdba
    spool text_install.txt
    @?/ctx/admin/catctx.sql change_on_install SYSAUX TEMP NOLOCK
    
    • change_on_install 是ctxsys 用户密码
    • SYSAUX 是ctxsys默认表空间

    设置默认语言

    connect "CTXSYS"/"change_on_install"
    @?/ctx/admin/defaults/dr0defin.sql "AMERICAN";
    conn / as sysdba
    alter user ctxsys account lock password expire;
    spool off
    

    结果检查

    connect / as SYSDBA
    
    set pages 1000
    col object_name format a40
    col object_type format a20
    col comp_name format a30
    column library_name format a8
    column file_spec format a60 wrap
    spool text_install_verification.log
    
    -- check on setup
    select comp_name, status, substr(version,1,10) as version from dba_registry where comp_id = 'CONTEXT';
    select * from ctxsys.ctx_version;
    select substr(ctxsys.dri_version,1,10) VER_CODE from dual;
    
    select count(*) from dba_objects where owner='CTXSYS';
    
    -- Get a summary count
    select object_type, count(*) from dba_objects where owner='CTXSYS' group by object_type;
    
    -- Any invalid objects
    select object_name, object_type, status from dba_objects where owner='CTXSYS' and status != 'VALID' order by object_name;
    
    spool off
    
  • 相关阅读:
    教研室课题卫星通信系统
    html5学习笔记03. Canvas简介,Canvas的使用方法
    ARCGIS RUNTIME FOR IOS总结(一)
    ARCGIS RUNTIME FOR IOS总结(三)
    html5学习笔记05.JavaScript 中的面向对象,继承和封装
    JAVA排序算法之 选择排序
    ARCGIS RUNTIME FOR IOS总结(六)
    ASP upload
    问题一百三十:字符矩阵排序
    美妙的微机原理2013/5/1
  • 原文地址:https://www.cnblogs.com/binliubiao/p/13384777.html
Copyright © 2011-2022 走看看