ITPub博客

首页 > 数据库 > Oracle > RMAN之CONVERT整库迁移

RMAN之CONVERT整库迁移

原创 Oracle 作者:静以致远√团团 时间:2014-04-09 21:22:13 0 删除 编辑

RMANCONVERT整库迁移

 

rman中的convert命令同样可以迁移数据文件,表空间和整个数据库,此处演示整库迁移的过程:

 

查看一下支持convert有哪些平台:

 

SQL> select PLATFORM_NAME,ENDIAN_FORMAT from v$DB_TRANSPORTABLE_PLATFORM;

 

PLATFORM_NAME                            ENDIAN_FORMAT

---------------------------------------- ----------------------------------------

Microsoft Windows IA (32-bit)            Little

Linux IA (32-bit)                        Little

HP Tru64 UNIX                            Little

Linux IA (64-bit)                        Little

HP Open VMS                              Little

Microsoft Windows IA (64-bit)            Little

Linux 64-bit for AMD                     Little

Microsoft Windows 64-bit for AMD         Little

Solaris Operating System (x86)           Little

9 rows selected.

 

将源库置于READ ONLY

 

SQL> startup open read only;

ORACLE instance started.

 

Total System Global Area  167772160 bytes

Fixed Size                  1218316 bytes

Variable Size             100665588 bytes

Database Buffers           62914560 bytes

Redo Buffers                2973696 bytes

Database mounted.

Database opened.

 

检查是否支持跨平台传输:

SQL> ed

 1  declare

  2  db_ready boolean;

  3  begin

  4  db_ready := dbms_tdb.check_db('Linux IA (32-bit)', 2);

  5  if(db_ready) then

  6  dbms_output.put_line('true');

  7  else

  8  dbms_output.put_line('false');

  9  end if;

 10* end;

 

SQL> set serverout on;

SQL> /

true

PL/SQL procedure successfully completed.

返回true视为正确

 

检查是否存在外部对象:

SQL> declare

  2  external boolean;

  3  begin

  4  external := dbms_tdb.check_external;

  5  end;

  6  /

 

The following external tables exist in the database:

SH.SALES_TRANSACTIONS_EXT

The following directories exist in the database:

SYS.EXPDP_DIR2, SYS.EXPDP_DIR, SYS.DATA_PUMP_DIR, SYS.SUBDIR, SYS.XMLDIR, SYS.MEDIA_DIR,

SYS.LOG_FILE_DIR, SYS.DATA_FILE_DIR, SYS.WORK_DIR, SYS.ADMIN_DIR

The following BFILEs exist in the database:

PM.PRINT_MEDIA

PL/SQL procedure successfully completed.

 

以上输出的对象将不会传输到新的数据库,如果有必要就需DBA手工的将这些对象创建到新的数据库中

 

执行整库转换:

 

RMAN> convert database new database 'orcl2'

2> transport script '/u01/rman_convert/whole_db_script.sql'

3> to platform 'Linux IA (32-bit)'

4> db_file_name_convert '/u01/app/oracle/oradata/orcl' '/u01/app/oracle/oradata/orcl2'

5> ;

 

.

.

.

channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:04

Run SQL script /u01/rman_convert/whole_db_script.sql on the target platform to create database

Edit init.ora file /u01/app/oracle/10.2.0/db_1/dbs/init_00p5armv_1_0.ora. This PFILE will be used to create the database on the target platform

To recompile all PL/SQL modules, run utlirp.sql and utlrp.sql on the target platform

To change the internal database identifier, use DBNEWID Utility

Finished backup at 09-APR-14

 

 

创建数据文件和trace文件的存储路径:

 

[oracle@localhost ~]$ mkdir -p /u01/app/oracle/oradata/orcl2

[oracle@localhost ~]$ mkdir -p /u01/app/oracle/admin/orcl2/{a,b,c,u}dump

 

 

将所以的转换文件和执行脚本复制到目标数据库:

 

[oracle@localhost ~]$ scp 10.37.100.100:/u01/app/oracle/oradata/orcl2/* /u01/app/oracle/oradata/orcl2/

oracle@10.37.100.100's password: 

example01.dbf                                       100%  100MB  16.7MB/s   00:06    

sysaux01.dbf                                         100%  330MB  13.8MB/s   00:24    

system01.dbf                                         100%  500MB  11.4MB/s   00:44    

tts01.dbf                                              100%   20MB  20.0MB/s   00:01    

tts02.dbf                                              100%   20MB  20.0MB/s   00:00    

undotbs001.dbf                                     100%  100MB  14.3MB/s   00:07    

users01.dbf                                           100%  183MB  15.2MB/s   00:12  

 

[oracle@localhost ~]$ scp 10.37.100.100:/u01/rman_convert/* /u01/rman_convert/

oracle@10.37.100.100's password: 

whole_db_script.sql                              100%  2853     2.8KB/s   00:00  

 

[oracle@localhost ~]$ scp 10.37.100.100:/u01/app/oracle/10.2.0/db_1/dbs/init_00p5armv_1_0.ora /u01/rman_convert/

oracle@10.37.100.100's password: 

init_00p5armv_1_0.ora                         100%  1540     1.5KB/s   00:00    

 

修改cupy过来的参数文件:

[oracle@localhost ~]$ cp /u01/rman_convert/init_00p5armv_1_0.ora /u01/rman_convert/init_orcl2.ora

 

[oracle@localhost ~]$ vi /u01/rman_convert/init_orcl2.ora

将相关路径修改成自己的配置:

主要的有以下几个:

  control_files            = "/u01/app/oracle/oradata/orcl2/control01.ctl","/u01/app/oracle/oradata/orcl2/control02.ctl","/u01/app/oracle/oradata/orcl2/control03.ctl"

 

  db_recovery_file_dest    = "/u01/app/oracle/flash_recovery_area/orcl2"

  db_recovery_file_dest_size = 5368709120

  background_dump_dest     = "/u01/app/oracle/admin/orcl2/bdump"

  user_dump_dest           = "/u01/app/oracle/admin/orcl2/udump"

  core_dump_dest           = "/u01/app/oracle/admin/orcl2/cdump"

  audit_file_dest          = "/u01/app/oracle/admin/orcl2/adump"

  db_name                  = "ORCL2"

 

修改需要执行的脚本:(也可按照脚本一步一步去修改执行)

 

-- 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 PFILE='/u01/rman_convert/init_orcl2.ora'

CREATE CONTROLFILE REUSE SET DATABASE "ORCL2" RESETLOGS FORCE LOGGING ARCHIVELOG

    MAXLOGFILES 16

    MAXLOGMEMBERS 3

    MAXDATAFILES 100

    MAXINSTANCES 8

    MAXLOGHISTORY 292

LOGFILE

  GROUP 1 '/u01/app/oracle/oradata/orcl2/redo01.log'  SIZE 50M,

  GROUP 2 '/u01/app/oracle/oradata/orcl2/redo02.log'  SIZE 50M,

  GROUP 3 '/u01/app/oracle/oradata/orcl2/redo03'  SIZE 50M

DATAFILE

  '/u01/app/oracle/oradata/orcl2/system01.dbf',

  '/u01/app/oracle/oradata/orcl2/sysaux01.dbf',

  '/u01/app/oracle/oradata/orcl2/users01.dbf',

  '/u01/app/oracle/oradata/orcl2/example01.dbf',

  '/u01/app/oracle/oradata/orcl2/tts01.dbf',

  '/u01/app/oracle/oradata/orcl2/tts02.dbf',

  '/u01/app/oracle/oradata/orcl2/undotbs001.dbf'

CHARACTER SET WE8ISO8859P1

;

 

-- 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 '/u01/app/oracle/10.2.0/db_1/dbs/temp01.dbf'

     SIZE 22020096  AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;

-- End of tempfile additions.

--

 

set echo off

prompt ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

prompt * Your database has been created successfully!

prompt * There are many things to think about for the new database. Here

prompt * is a checklist to help you stay on track:

prompt * 1. You may want to redefine the location of the directory objects.

prompt * 2. You may want to change the internal database identifier (DBID) 

prompt *    or the global database name for this database. Use the 

prompt *    NEWDBID Utility (nid).

prompt ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

SHUTDOWN IMMEDIATE 

STARTUP UPGRADE PFILE='/u01/rman_convert/init_orcl2.ora'

@@ ?/rdbms/admin/utlirp.sql 

SHUTDOWN IMMEDIATE 

STARTUP PFILE='/u01/rman_convert/init_orcl2.ora'

-- The following step will recompile all PL/SQL modules.

-- It may take serveral hours to complete.

@@ ?/rdbms/admin/utlrp.sql 

set feedback 6;

 

修改脚本相对操作简单,但要认真,不然很出错后差错就麻烦了

 

设置新的环境变量,进入SQL*plus命令行

[oracle@localhost ~]$ export ORACLE_SID=orcl2

[oracle@localhost ~]$ sqlplus / as sysdba

 

执行修改后的脚本:

SQL> @/u01/rman_convert/whole_db_script.sql

 

期间会重启几次数据库,等待时间较长,要有耐心,尤其是这个时间点:

DOC>   1. Query showing jobs created by UTL_RECOMP

DOC>         SELECT job_name FROM dba_scheduler_jobs

DOC>            WHERE job_name like 'UTL_RECOMP_SLAVE_%';

DOC>

DOC>   2. Query showing UTL_RECOMP jobs that are running

DOC>         SELECT job_name FROM dba_scheduler_running_jobs

DOC>            WHERE job_name like 'UTL_RECOMP_SLAVE_%';

DOC>#

SQL> 

SQL> DECLARE

  2     threads pls_integer := &&1;

  3  BEGIN

  4     utl_recomp.recomp_parallel(threads);

  5  END;

  6  /

 

 

执行完成后测试结果:

SQL> conn scott/oracle
Connected.
SQL> select tname from tab;


TNAME
------------------------------
DEPT
EMP
BONUS
SALGRADE
TEST


此时数据库复制已经完成,需要的话别忘了去创建前面检查时不能签约的外部对象,配置口令文件和监听等。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29320885/viewspace-1138997/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
每个人都有梦想,去实现吧!

注册时间:2013-11-14

  • 博文量
    164
  • 访问量
    2103520