12C 基于 RMAN 备份集进行跨平台(different Endian)数据传输 (文档 ID 2108887.1)

文档内容


目标

解决方案
  1. 连接到需要导出表空间的源数据库(AIX)
  2. 将需要传输的表空间设置为只读模式
  3. 在源数据库备份表空间,在 backup 命令中,要指定参数 TO PLATFORM /FOR TRANSPORT
  4. 移动备份集到目的服务器
  5. 连接到目的数据库(Linux x86 64-bit)
  6. 通过备份集恢复(Restore)表空间
  7. 更改表空间为读写模式

参考


适用于:

Oracle Database - Enterprise Edition - 版本 12.1.0.1 和更高版本
本文档所含信息适用于所有平台

目标

解释 12C 的新功能,如何使用 RMAN 进行跨平台(different Endian)的数据传输。

RMAN 可以跨平台传输数据库,数据文件,和表空间。使用 RMAN 备份集进行跨平台的数据库传输,可利用块压缩,而降低备份集大小。这会提高备份性能,并降低备份集通过网络传输的时间。


RMAN 跨平台备份,可以将备份集还原到不同 Endian 的目的数据库。

解决方案

前提条件

  • 使用 RMAN 备份集执行跨平台数据传输,目的数据库版本必须要求 12.1 及之后版本。
  • 参数 COMPATIBLE 必须设置为 12.0.0 或更高。
  • 被传输的表空间需要为 read-only 模式,除非在备份命令执行时,使用 ALLOW INCONSISTENT 条目。
  • 被传输的表空间需要是自包含的(self-contained)。
  • 使用 DBMS_TTS.TRANSPORT_SET_CHECK 检查依赖关系,如果视图 TRANSPORT_SET_VIOLATIONS 包含的行信息,指向了特定的表空间,在创建跨平台备份前,必须要先解决依赖关系。

注意事项

外部数据文件

一个不属于目的数据库的数据文件,被称为外部数据文件。这些数据文件,作为数据传输的一部分,被传输并插入到目的数据库。在源数据库中,这个数据文件有它自己的原始的数据文件号。

外部表空间

外部表空间是由一组外部数据文件组成的在源数据库上的表空间。这些外部数据文件不属于目的数据库,但是被传输到目的数据库,并且依然使用源数据库的表空间名。

外部数据文件拷贝

外部数据文件拷贝,是从一个跨平台备份集中恢复出来的数据文件。 由于数据的不一致性,它不能被直接的插入到目的数据库。我们必须先通过跨平台的增量备份来恢复(recover)这个外部数据文件,然后插入到目的数据库。

数据泵的目的地

数据泵的目的地,即目的数据库主机上的一个磁盘路径,用以存放数据库导出的文件和日志。

例如:

  • 源数据库:AIX-Based Systems (64-bit) (Big Endian format)
  • 目的数据库:Linux x86 64-bit (Little Endian format)
  • 在源端和目的端数据库,将 SYSBACKUP 权限赋予用户 RMAN_TEST
  • 被传输的表空间 TEST1
  • 源数据名 SOURCE
  • 目的数据库名 DEST

注意:如果被传输的表空间中包含的对象的属主(schema)在目的数据库不存在,将会遇到下面问题:

ORA-39083: Object type OBJECT_GRANT failed to create with error:
ORA-01917: user or role 'DMSTEAM' does not exist
Failing sql is:GRANT DELETE ON "ADVTVS"."FT_ENQUIRY_PLAN" TO "DMSTEAM"
ORA-39083: Object type OBJECT_GRANT failed to create with error:
ORA-01917: user or role 'DMSTEAM' does not exist

为防止以上问题发生,需要在目的数据库上手动创建全部的,已经在源数据库存在的用户(schema)。 可以通过下面的查询,来检查用户是否存在。

select distinct OWNER from dba_segments where tablespace_name in ('被传输的表空间名');

通过备份集,跨平台传输只读表空间的具体步骤:

1. 连接到需要导出表空间的源数据库(AIX)

$ rman

Recovery Manager: Release 12.1.0.2.0 - Production on Thu May 28 14:38:06 2015

Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved.

RMAN> Connect target "rman_test@source AS SYSBACKUP";

根据提示,输入密码。

2. 将需要传输的表空间设置为只读模式

RMAN> alter tablespace test1 read only;

using target database control file instead of recovery catalog
Statement processed

3. 在源数据库备份表空间,在 backup 命令中,要指定参数 TO PLATFORM /FOR TRANSPORT

使用 DATAPUMP 参数来明确指定对应表空间的数据泵文件。

RMAN> BACKUP
            TO PLATFORM 'Linux x86 64-bit'
            FORMAT '/tmp/xplat_backups/trans_ts.bck'
            DATAPUMP FORMAT '/tmp/xplat_backups/trans_ts_dmp.bck'
            TABLESPACE test1;

这个命令会输出下面结果:

RMAN>
Starting backup at 22-MAY-15
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=184 device type=DISK
Running TRANSPORT_SET_CHECK on specified tablespaces
TRANSPORT_SET_CHECK completed successfully

Performing export of metadata for specified tablespaces...
   EXPDP> Starting "SYSBACKUP"."TRANSPORT_EXP_SOURCE_asbF":  
   EXPDP> Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
   EXPDP> Processing object type TRANSPORTABLE_EXPORT/TABLE
   EXPDP> Processing object type TRANSPORTABLE_EXPORT/TABLE_STATISTICS
   EXPDP> Processing object type TRANSPORTABLE_EXPORT/STATISTICS/MARKER
   EXPDP> Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
   EXPDP> Master table "SYSBACKUP"."TRANSPORT_EXP_SOURCE_asbF" successfully loaded/unloaded
   EXPDP> ******************************************************************************
   EXPDP> Dump file set for SYSBACKUP.TRANSPORT_EXP_SOURCE_asbF is:
   EXPDP>   /u01/app/oracle/product/dbs/backup_tts_SOURCE_93693.dmp
   EXPDP> ******************************************************************************
   EXPDP> Datafiles required for transportable tablespace TEST1:
   EXPDP>   /u01/app/app/oracle/oradata/SOURCE/test01.dbf
   EXPDP> Job "SYSBACKUP"."TRANSPORT_EXP_SOURCE_asbF" successfully completed at Fri May 22 11:54:53 2015 elapsed 0 00:02:06
Export completed

channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00002 name=/u01/app/app/oracle/oradata/SOURCE/test01.dbf
channel ORA_DISK_1: starting piece 1 at 22-MAY-15
channel ORA_DISK_1: finished piece 1 at 22-MAY-15
piece handle=/u01/app/app/oracle/oradata/trans_ts.bck tag=TAG20150522T115158 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
channel ORA_DISK_1: starting full datafile backup set
input Data Pump dump file=/u01/app/app/oracle/product/ dbs/backup_tts_SOURCE_93693.dmp
channel ORA_DISK_1: starting piece 1 at 22-MAY-15
channel ORA_DISK_1: finished piece 1 at 22-MAY-15
piece handle=/u01/app/app/oracle/oradata/trans_ts_dmp.bck tag=TAG20150522T115158 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 22-MAY-15

当在源库使用参数'TO PLATFORM',oracle 会转换数据文件的 endian 格式到目的数据库。

退出连接到源数据库的 RMAN 会话。

4. 移动备份集到目的服务器

将 Backup 命令和数据泵导出的文件移动到目的主机。可以使用 sftp,ftp 和 scp 等系统工具进行移动/复制。

5. 连接到目的数据库(Linux x86 64-bit)

连接到目的数据库(表空间需要被导入的库),并且目的数据库保持读写模式。

这个样例中,目的数据库中的用户 TEST1 需要被赋予 SYSBACKUP 权限:

$ rman

Recovery Manager: Release 12.1.0.2.0 - Production on Thu May 28 14:38:06 2015

Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved.

RMAN> connect target "rman_test@dest AS SYSBACKUP";

根据提示,输入用户 RMAN_TEST 的密码。

6. 通过备份集恢复(Restore)表空间

从源数据库传输过来的备份集中,使用 restore 命令恢复数据文件。使用数据泵文件导入包含表空间的源数据,并将这个表空间插入到目的数据库。

这个样例中,备份集和数据泵文件复制到目录 /u01/app/oracle/oradata/test/。

如果目的数据库的参数 db_create_file_dest 已经设置,执行下面命令:

RMAN> RESTORE 
    FOREIGN TABLESPACE TEST1 to NEW
    FROM BACKUPSET '/u01/app/oracle/oradata/test/trans_ts.bck'
    DUMP FILE FROM BACKUPSET '/u01/app/oracle/oradata/test/trans_ts_dmp.bck';

注意:使用"to NEW"还原数据文件到参数 db_create_file_dest 指定的目录中。

如果正在使用多备份集,则显示如下: 

RMAN> RESTORE
ALL FOREIGN DATAFILES TO NEW
FROM BACKUPSET '/mnt/staging_clt_target/tts/all_3tbs_uhrdm8f5_1_1.bck' BACKUPSET '/mnt/staging_clt_target/tts/all_3tbs_uirdm8f6_1_1.bck'
DUMP FILE FROM BACKUPSET '/mnt/staging_clt_target/tts/all_3tbs_uhrdm8f5_1_1.bck' ;

  

如果为每个备份集使用多个备份片,则需要指定每个备份集里面备份片的名字:

RMAN> RESTORE
ALL FOREIGN DATAFILES TO NEW
FROM BACKUPSET '/mnt/staging_clt_target/tts/RTODP-a0r8utgu_1_1','/mnt/staging_clt_target/tts/RTODP-a0r8utgu_2_1',
BACKUPSET '/mnt/staging_clt_target/tts/RTODP-a1r8utgu_1_1','/mnt/staging_clt_target/tts/RTODP-a1r8utgu_2_1'
DUMP FILE FROM BACKUPSET '/mnt/staging_clt_target/tts/RTODP_metadata_1.bck';

  

如果目的数据库的参数 db_create_file_dest 没有设置,需要指定数据文件的存放路径:

RMAN> RESTORE
   FOREIGN TABLESPACE TEST1 format '/u01/app/oracle/oradata/%U'
   FROM BACKUPSET '/u01/app/oracle/oradata/dest/trans_ts.bck'
   DUMP FILE FROM BACKUPSET '/u01/app/oracle/oradata/dest/trmp.bck';

这个命令会输出下面结果:

Starting restore at 22-MAY-15
using channel ORA_DISK_1

channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring all files in foreign tablespace TEST1
channel ORA_DISK_1: reading from backup piece/u01/app/oracle/oradata/dest/trans_ts.bck
channel ORA_DISK_1: restoring foreign file 2 to/u01/app/oracle/oradata/dest/data_D-dest_I-2390668590_TS-TEST1_FNO-2_jvq7is5b
channel ORA_DISK_1: foreign piece handle=/u01/app/oracle/oradata/dest/trans_ts.bck
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:02
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring Data Pump dump file to/u01/app/oracle/product/c12101/dbs/backup_tts_dest_31167.dmp
channel ORA_DISK_1: reading from backup piece/u01/app/oracle/oradata/dest/trans_ts_dmp.bck
channel ORA_DISK_1: foreign piece handle=/u01/app/oracle/oradata/dest/trans_ts_dmp.bck
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:02

Performing import of metadata...
   IMPDP> Master table "SYSBACKUP"."TSPITR_IMP_dest_jykD" successfully loaded/unloaded
   IMPDP> import done in WE8MSWIN1252 character set and AL16UTF16 NCHAR character set
export done in US7ASCII character set and AL16UTF16 NCHAR character set
   IMPDP> Starting "SYSBACKUP"."TSPITR_IMP_dest_jykD":  
   IMPDP> Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
   IMPDP> Processing object type TRANSPORTABLE_EXPORT/TABLE
   IMPDP> Processing object type TRANSPORTABLE_EXPORT/TABLE_STATISTICS
   IMPDP> Processing object type TRANSPORTABLE_EXPORT/STATISTICS/MARKER
   IMPDP> Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
   IMPDP> Job "SYSBACKUP"."TSPITR_IMP_dest_jykD" successfully completed at Fri May 22 12:19:08 2015 elapsed 0 00:00:05
Import completed

Finished restore at 22-MAY-15

退出 RMAN 会话,并连接到目的数据库。

7. 更改表空间为读写模式

SQL> select status,tablespace_name from  dba_tablespaces;


STATUS    TABLESPACE_NAME
--------- ------------------------------
ONLINE    SYSTEM
ONLINE    SYSAUX
ONLINE    UNDOTBS1
ONLINE    TEMP
ONLINE    USERS
READ ONLY TEST1

SQL>  Alter tablespace test1 read write ;

Tablespace altered.

SQL> select status,tablespace_name from  dba_tablespaces;


STATUS    TABLESPACE_NAME
--------- ------------------------------
ONLINE    SYSTEM
ONLINE    SYSAUX
ONLINE    UNDOTBS1
ONLINE    TEMP
ONLINE    USERS
ONLINE    TEST1

 

 

 

 

 


参考

NOTE:2005729.1 - 12C - Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup
请使用浏览器的分享功能分享到微信等