文档内容
|
|
目标 |
|
|
解决方案 |
| 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 参数来明确指定对应表空间的数据泵文件。
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
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 已经设置,执行下面命令:
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 指定的目录中。
如果正在使用多备份集,则显示如下:
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' ;
如果为每个备份集使用多个备份片,则需要指定每个备份集里面备份片的名字:
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 没有设置,需要指定数据文件的存放路径:
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';
这个命令会输出下面结果:
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