zoukankan      html  css  js  c++  java
  • oracle 10g数据库下的 XDB组件的重新安装

    emmmm,这是一个不做死就不会死的过程!!!

    今天在导出数据库时,遇到了报错信息,其实开发说这个报错没关系了,但作死如楼主,一定要把这个错给解决了,然后就有了下面的作死过程。

    错误关键字是:package body"XDB.DBMS_XDBZ0" has error 。如下截图:

    经历过一番百度后,查到了下面的sql语句,查询XDB组件的是否可用,即状态是 valid 还是invalid,sql和查询截图如下:

    select owner, object_name, object_type, status
    from dba_objects
    where status = 'INVALID' and object_name = 'DBMS_XDBZ0';

    网上百度了很多资料,操作如下:

    执行了 @$ORACLE_HOME/rdbms/admin/utlrp.sql ,没有任何用,不过我查询数据库里的 invalid 状态的数据变少了很多,但是报错的这个组件没有变化!

    alter package XDB.DBMS_XDBZ0  COMPILE BODY; 执行了这个,也没有用。

    最后最后,询问了实施,给楼主提供了一种解决办法的思路,给了我一个链接: 

     http://blog.sina.com.cn/s/blog_aa84cfe40101l4ye.html
     
    然后楼主按照这个思路开始百度XDB组件的重新安装,综合参考了很多文章,主要是下面三篇:

    http://blog.csdn.net/whb234174124/article/details/52980275

    http://blog.csdn.net/sszxhzd/article/details/78626715

    http://blog.csdn.net/fidelhl/article/details/2753384

    其中一篇是英文,我找的谷歌翻译,其他两篇讲的都不够详细。

    我安装了2次,第一次安装的时候没先创建XDB用户和表空间,安装的日志有报错,所以楼主又给卸载了,卸载的时候没先重启数据库,卸载了很久都没成功,(讲真到这里我真不想再搞了,这时候虽然这个组件不可用,但是数据库还是正常的)反正就是坑。

    下面我来梳理下我重新安装XDB组件的全部过程:

    创建XDB组件首先要先卸载XDB组件(没有的就不用了)

    卸载XDB组件:

    1.第一次卸载时没重启数据库,但也卸载成功了,没安装成功后再次卸载,但是没重启,卸载了n久,最后重启数据库后才卸载成功。

    所以卸载时无论怎么样还是先重启下数据库吧

    shutdown immediate

    sqlplus / as sysdba  

    startup

    2.运行脚本(脚本都是数据库自带的):

    @$ORACLE_HOME/rdbms/admin/catnoqm.sql

    drop trigger sys.xdb_installation_trigger;
    drop trigger sys.dropped_xdb_instll_trigger;
    drop table dropped_xdb_instll_tab;

    至此就卸载成功了!

    安装XDB组件:

    1.首先创建 XDB 表空间 和XDB 用户名,并赋予权限

    创建表空间 XDB

    CREATE TABLESPACE XDB DATAFILE
    '/data/app/oracle/oradata/hundsun/XDB.dbf' SIZE 200M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
    LOGGING
    ONLINE
    PERMANENT
    EXTENT MANAGEMENT LOCAL AUTOALLOCATE
    BLOCKSIZE 8K
    SEGMENT SPACE MANAGEMENT AUTO;

    ps :/data/app/oracle/oradata/hundsun/ 这段路径可以使用这段sql查询:select name from v$datafile;

    创建 XDB 用户

    create user XDB identified by XDB default tablespace XDB;

    给XDB用户赋权限

    GRANT SELECT ANY TABLE TO XDB;

    2.执行XDB创建的脚本

    @$ORACLE_HOME/rdbms/admin/catqm.sql XDB XDB XDB

    ps:后面 三个XDB 分别指 XDB用户密码,XDB默认表空间,XDB临时表空间,一定一定要在执行脚本时就带上,我第一次就没填入,回车后让输入一些不知道怎么填入的值。

    在这里执行脚本的时候可以查看执行的日志,顺序如下:

    set echo on

    spool  /home/oracle/xdb.log

    @$ORACLE_HOME/rdbms/admin/catqm.sql XDB XDB XDB

    spool off;

    alter system set dispatchers="(PROTOCOL=TCP)(SERVICE=hund【填入数据库的SID】)";

    最后就是检测是否安装成功,以及XDB下面的组件状态是否变为可用了,用下面几个sql:

    select count(*) from dba_objects
    where owner='XDB' and status='INVALID';

    select owner, object_name, object_type, status
    from dba_objects
    where status = 'INVALID'
    and owner in ('sys' ,'XDB');

    select comp_name, status, version
    from DBA_REGISTRY
    where comp_name= 'Oracle XML Database';

    ps:这段可以查看XDB组件有没有安装成功,安装成功的状态应该是valid,我第一次安装后查看的时候这个状态是 loading,

    卸载的时候 状态是removing。

    最后如果你查看这个组件下的package 还有一些状态是invalid,那就再执行一下下面这个脚本:

    @$ORACLE_HOME/rdbms/admin/utlrp.sql

    不过我执行了之后数据库还有一个PACKAGE BODY 是invalid的。

    再尝试导出的时候已经不报原来的错了。剩下的这个invalid 我已经不打算再继续深究了,毕竟公司的测试库,搞砸了我可能就要滚蛋了。

  • 相关阅读:
    [Go] 实现websocket服务端
    [PHP] php使用event扩展的io复用测试
    [MySQL] 使用force index强制使用索引
    [Go] 使用net包作为tcp客户端读取http
    [Go] golang中的包管理
    [Go] 解决golang.org模块无法下载的问题
    [日常] linux设置环境变量
    [Go] golang定时器与redis结合
    [Go] golang定时器的使用
    [Linux] linux路由表
  • 原文地址:https://www.cnblogs.com/huangaojiao/p/8612038.html
Copyright © 2011-2022 走看看