zoukankan      html  css  js  c++  java
  • 将oracle从数据库32位平台迁移到64位置

    客户32位置oracle数据库系统的磁盘损坏,幸运的是,oracle数据库完美无损。客户数据库迁移到新购设备。新设备的内存64G,制REDHAT 6.2 64位置,直接拷贝数据文件肯定是不。由于oracle 的存储过程在32位和64位平台下的wordsize不同。尽管用户的存储过程能够在使用时自行完毕又一次编译,但oracle的系统存储过程确须要我们来手工转换。

    总结,迁移步骤例如以下:

    1:备份oracle数据库

    2:备份控制文件到trace(以备须要新建控制文件)

    SQL> alter database backup controlfile to trace;
    
    Database altered.
    
    SQL> oradebug setmypid
    Statement processed.
    SQL> oradebug tracefile_name
    /u01/app/admin/easy/udump/easy_ora_18830.trc
    SQL> host cat /u01/app/admin/easy/udump/easy_ora_18830.trc
    ......
    --
    --     Set #1. NORESETLOGS case
    --
    -- The following commands will create a new control file and use it
    -- to open the database.
    -- Data used by Recovery Manager will be lost.
    -- Additional logs may be required for media recovery of offline
    -- Use this only if the current versions of all online logs are
    -- available.
    -- After mounting the created controlfile, the following SQL
    -- statement will place the database in the appropriate
    -- protection mode:
    --  ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE
    STARTUP NOMOUNT
    CREATE CONTROLFILE REUSE DATABASE "EASY" NORESETLOGS  NOARCHIVELOG
        MAXLOGFILES 16
        MAXLOGMEMBERS 3
        MAXDATAFILES 100
        MAXINSTANCES 8
        MAXLOGHISTORY 292
    LOGFILE
      GROUP 1 '/oradata/easy/redo01.log'  SIZE 11200K,
      GROUP 2 '/oradata/easy/redo02.log'  SIZE 11200K
    -- STANDBY LOGFILE
    DATAFILE
      '/oradata/easy/system01.dbf',
      '/oradata/easy/undotbs01.dbf',
      '/oradata/easy/sysaux01.dbf',
      '/oradata/easy/users01.dbf'
    CHARACTER SET ZHS16GBK
    ;
    -- Commands to re-create incarnation table
    -- Below log names MUST be changed to existing filenames on
    -- disk. Any one log file from each branch can be used to
    -- re-create incarnation records.
    -- ALTER DATABASE REGISTER LOGFILE '/u01/app/flash_recovery_area/EASY/archivelog/2014_11_05/o1_mf_1_1_%u_.arc';
    -- ALTER DATABASE REGISTER LOGFILE '/u01/app/flash_recovery_area/EASY/archivelog/2014_11_05/o1_mf_1_1_%u_.arc';
    -- Recovery is required if any of the datafiles are restored backups,
    -- or if the last shutdown was not normal or immediate.
    RECOVER DATABASE
    -- Database can now be opened normally.
    ALTER DATABASE OPEN;
    -- Commands to add tempfiles to temporary tablespaces.
    -- Online tempfiles have complete space information.
    -- Other tempfiles may require adjustment.
    ALTER TABLESPACE TEMP ADD TEMPFILE '/oradata/easy/temp01.dbf'
         SIZE 20971520  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
    -- End of tempfile additions.
    --
    --     Set #2. RESETLOGS case
    --
    -- The following commands will create a new control file and use it
    -- to open the database.
    -- Data used by Recovery Manager will be lost.
    -- The contents of online logs will be lost and all backups will
    -- be invalidated. Use this only if online logs are damaged.
    -- After mounting the created controlfile, the following SQL
    -- statement will place the database in the appropriate
    -- protection mode:
    --  ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE
    STARTUP NOMOUNT
    CREATE CONTROLFILE REUSE DATABASE "EASY" RESETLOGS  NOARCHIVELOG
        MAXLOGFILES 16
        MAXLOGMEMBERS 3
        MAXDATAFILES 100
        MAXINSTANCES 8
        MAXLOGHISTORY 292
    LOGFILE
      GROUP 1 '/oradata/easy/redo01.log'  SIZE 11200K,
      GROUP 2 '/oradata/easy/redo02.log'  SIZE 11200K
    -- STANDBY LOGFILE
    DATAFILE
      '/oradata/easy/system01.dbf',
      '/oradata/easy/undotbs01.dbf',
      '/oradata/easy/sysaux01.dbf',
      '/oradata/easy/users01.dbf'
    CHARACTER SET ZHS16GBK
    ;
    -- Commands to re-create incarnation table
    -- Below log names MUST be changed to existing filenames on
    -- disk. Any one log file from each branch can be used to
    -- re-create incarnation records.
    -- ALTER DATABASE REGISTER LOGFILE '/u01/app/flash_recovery_area/EASY/archivelog/2014_11_05/o1_mf_1_1_%u_.arc';
    -- ALTER DATABASE REGISTER LOGFILE '/u01/app/flash_recovery_area/EASY/archivelog/2014_11_05/o1_mf_1_1_%u_.arc';
    -- Recovery is required if any of the datafiles are restored backups,
    -- or if the last shutdown was not normal or immediate.
    RECOVER DATABASE USING BACKUP CONTROLFILE
    -- Database can now be opened zeroing the online logs.
    ALTER DATABASE OPEN RESETLOGS;
    -- Commands to add tempfiles to temporary tablespaces.
    -- Online tempfiles have complete space information.
    -- Other tempfiles may require adjustment.
    ALTER TABLESPACE TEMP ADD TEMPFILE '/oradata/easy/temp01.dbf'
         SIZE 20971520  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
    -- End of tempfile additions.
    --
    

    3: 查看当前的数据库状态

    SQL> select count(*) from dba_objects where status ='INVALID';
    
      COUNT(*)
    ----------
    	 0
    
    SQL> select comp_name,status from dba_registry;
    
    COMP_NAME				 STATUS
    ---------------------------------------- ----------------------
    Oracle Database Catalog Views		 VALID
    Oracle Database Packages and Types	 VALID
    Oracle Workspace Manager		 VALID
    JServer JAVA Virtual Machine		 VALID
    Oracle XDK				 VALID
    Oracle Database Java Packages		 VALID
    Oracle Expression Filter		 VALID
    Oracle Data Mining			 VALID
    Oracle Text				 VALID
    Oracle XML Database			 VALID
    Oracle Rules Manager			 VALID
    
    COMP_NAME				 STATUS
    ---------------------------------------- ----------------------
    Oracle interMedia			 VALID
    OLAP Analytic Workspace 		 VALID
    Oracle OLAP API 			 VALID
    OLAP Catalog				 VALID
    Spatial 				 VALID
    Oracle Enterprise Manager		 VALID
    
    17 rows selected.

            4:拷贝參数文件。控制文件,数据文件。日志文件到64位数据库

            5:在64位系统上创建对应文件夹,如udmp  adump等,要和32位系统一致

            6:假设数据库的数据文件文件夹发生变化。则须要新建控制文件,(最好保持源库和目标库的一致。降低工作量和发生错误率)

            7:将数据库中的存储过程等置为失效,UTLIRP脚本会将存储过程等置为失效

    <span style="white-space:pre">	</span>--假设迁移的是oracle9i的数据库。运行例如以下命令:
    	SQL> STARTUP MIGRATE 
     
    	--假设是Oracle10g或11g,运行例如以下命令:
    	SQL> STARTUP UPGRADE 
    	
    	SQL> SPOOL EASY.log;
    	SQL> @$ORACLE_HOME/rdbms/admin/utlirp.sql 
    	SQL> SPOOL OFF;   

    8: 又一次启动数据库,

    9: 假设数据库有OLAP组件,则删除OLAP,以sys用户运行例如以下脚本

    SQL> conn / as sysdba
    
    ----> Remove OLAP Catalog
    SQL> @?/olap/admin/catnoamd.sql
    
    ----> Remove OLAP API
    SQL> @?/olap/admin/olapidrp.plb
    SQL> @?/olap/admin/catnoxoq.sql
    
    ----> Deinstall APS - OLAP AW component
    SQL> @?/olap/admin/catnoaps.sql
    SQL> @?

    /olap/admin/cwm2drop.sql ---仅仅须要在11g中运行。在10g中。catnoamd.sql 脚本中已经包括了该脚本,所以不用运行 You could getsome invalid objects under SYS and PUBLIC owner, and they are the old duplicate OLAPSYS objects copied under these schemas when Olap has been installedpreviously. Generally, theOlap objects are named with context like %OLAP%, %AWM%, or other Olap word keys intheir "object_name" field, however, if it needs a help to recognizethem, then please contact Oracle Support and create a Service Request toget assistance for this question. Note that catnoadm.sql could fail from 10.1.0.5 to 11.1.0.7release. Due to the factthat it refers to three scripts which don't get shipped until 11.2 this scriptwill fail. Besides that itwill error on 7 non-existing synonyms to drop. Prior 11.2, execute these three dropsynonym statements: SQL> drop public synonym OlapFactView; SQL> drop public synonym OlapDimView; SQL> drop public synonym DBMS_ODM;


    10:编译失效对象

    SQL> @?/rdbms/admin/utlrp.sql

    此时会有错误,这是由于olap没有安装,以下安装olap,然后又一次编译

    11:加入OLAP

    SQL> @?/olap/admin/olap.sql SYSAUX TEMP;
    <pre name="code" class="sql">SQL> @?/rdbms/admin/utlrp.sql    --这次会很快

    
    

    12.  验证无效对象和组件状态

    SQL> l
      1* select count(*) from dba_objects where status<>'VALID'
    SQL> col comp_name for a40
    SQL> select comp_name,status from dba_registry;
    
    COMP_NAME				 STATUS
    ---------------------------------------- ----------------------
    Oracle Database Catalog Views		 VALID
    Oracle Database Packages and Types	 VALID
    Oracle Workspace Manager		 VALID
    JServer JAVA Virtual Machine		 VALID
    Oracle XDK				 VALID
    Oracle Database Java Packages		 VALID
    Oracle Expression Filter		 VALID
    Oracle Data Mining			 VALID
    Oracle Text				 VALID
    Oracle XML Database			 VALID
    Oracle Rules Manager			 VALID
    
    COMP_NAME				 STATUS
    ---------------------------------------- ----------------------
    Oracle interMedia			 VALID
    OLAP Analytic Workspace 		 VALID
    Oracle OLAP API 			 VALID
    OLAP Catalog				 VALID
    Spatial 				 VALID
    Oracle Enterprise Manager		 VALID
    

    11:又一次编译java对象

    <pre name="code" class="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
          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
                 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
    /

    It may be necessary to recompilethe Java objects with ncomp:i.e.   % ncomp-user scott/tiger Hello.class


    迁移过程中。最好不要有ddl操作。以免造成死锁


    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    python 之字符编码
    python文件处理
    迭代器和生成器
    内置函数和匿名函数
    函数之递归
    函数 之装饰器
    python 函数进阶与闭包
    python 之 函数
    python之运算符
    python字符串内置方法
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4917426.html
Copyright © 2011-2022 走看看