因为32bit数据库内存的限制,导致其很难突破4G内存,迫使需要对数据库进行升级到64bit。


升级步骤:

    1、关闭数据库,并对数据库进行冷备(copy数据文件、控制文件、spfile等)、可直接备份ORACLE_BASE目录。

    2、卸载原有32bit数据库软件(删除/etc/oraInst.loc、/etc/oratab即可)。

    3、安装64bit同版本数据库,并建库,关闭数据库。

    4、将32bit版本的数据文件、控制文件、spfile、、listener.ora、tnsnames.ora考备到64bit下对应的目录。

    5、启动数据库(startup upgrade)。

    6、重新编译64位的PL/SQL模块。

    @$ORACLE_HOME/rdbms/admin/utlirp.sql

    这里执行完以后,会多出很多无效的对象,需要重新编译,同时如果安装了OLAP组件的话,需要重新安装OLAP组件,否者跳过下面这一步。

    7、重新安装OLAP组件

    7.1、删除OLAP组件

    cd $ORACLE_HOME/rdbms/lib
    make -f ins_rdbms.mk olap_off
    make -f ins_rdbms.mk ioracle

    7.2、安装OLAP

    sqlplus /as sysdba
    SQL> spool add_olap.log
    SQL> @?/olap/admin/olap.sql SYSAUX TEMP;
    SQL> spool off

    8、编译无效对象

    sqlplus /as sysdba
    SQL> spool utlrp.log
    SQL> @?/rdbms/admin/utlrp.sql
    SQL> spool off

    9、重建 javashared data objects (SRO)

    10、重复第8步,编译无效对象

    11、验证是否存在无效的对象和组件。

    SQL> select OWNER,OBJECT_NAME,OBJECT_TYPE from all_objects where status='INVALID';
    SQL> select comp_id,comp_name,version,status from dba_registry;



附:重建 javashared data objects  sql语句

begin

  update obj$ set status=5 where obj#=(select obj# from obj$,javasnm$ 

    where owner#=0 and type#=29 and short(+)=name and 

   nvl(longdbcs,name)='oracle/aurora/rdbms/Compiler');

  commit;

  declare

    cursor C1 is select

       'DROP JAVA DATA "' || u.name||'"."'|| o.name || '"'

       from obj$ o,user$ u where o.type#=56 and u.user#=o.owner#;

      ddl_statement varchar2(200);

    iterations number;

    previous_iterations number;

    loop_count number;

    my_err     number;

  begin

    previous_iterations := 10000000;

    loop

      -- To make sure we eventually stop,pick amaxnumber of iterations

      select count(*) into iterations from obj$ where type#=56;

      exit when iterations=0 or iterations>=previous_iterations;

      previous_iterations := iterations;

      loop_count := 0;

      open C1;

      loop

        begin

          fetch C1 into ddl_statement;

          exit when C1%NOTFOUND or loop_count > iterations;

        exception when others then

           my_err := sqlcode;

           if my_err =-1555 then --snapshot too old, re-execute fetch query

             exit;

           else

             raise;

           end if;

        end;

        initjvmaux.exec(ddl_statement);

        loop_count := loop_count + 1;

      end loop;

      close C1;

    end loop;

  end;

  commit;

  initjvmaux.drp('delete from java$policy$shared$table');

  update obj$ set status=1 where obj#=(select obj# from obj$,javasnm$ 

    where owner#=0 and type#=29 and short(+)=name and 

   nvl(longdbcs,name)='oracle/aurora/rdbms/Compiler');

  commit;

end;

/


create or replace java system

/