使用带用for transport或to platform子句的backup命令来创建备份集来将只读表空间从一个平台传输到另一个平台。当传输只读表空间时,必须要导出这些表空间的元数据。这些元数据会在将表空间附加到目标数据库时需要使用。当跨平台传输表空间时,源平台与目标平台可以使用不同的字节序。可以还原跨平台备份中的所有数据文件或表空间或者它们中的一部分。在还原这些对象之后,可以为被还原的数据文件指定路径与名称。
使用备份集执行跨平台传输表空间的先决条件
.源数据库与目标数据库的spfile参数文件中的compatible参数必须设置为12.0.0或更高版本。
.被传输的表空间必须是自包含。执行dbms_tts.transport_set_check过程来检查依赖性。如果transport_set_violations视图包含指定表空间的相关行记录,那么必须在创建跨平台备份之前解决这种依赖性。
.被传输的表空间必须是只读模式,除非在backup命令中使用了allow inconsistent子句。
下面的例子将Linux平台上的RAC CDB中的jypdb的表空间tts与cs传输到windows平台上的单实例CDB的jypdb数据库中。使用备份集对只读表空间执行跨平台传输的操作如下:
1.检查源数据库与目标数据库的compatible参数是否设置为12.0.0或更高版本
源数据库
SQL> show parameter compatible NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ compatible string 12.2.0 noncdb_compatible boolean FALSE 目标数据库 SQL> show parameter compatible NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ compatible string 12.2.0 noncdb_compatible boolean FALSE
2.对源数据库中的要被传输的表空间tts与cs执行自包含检查
SQL> alter session set container=jypdb; Session altered. SQL> exec sys.dbms_tts.transport_set_check('TTS,CS',true); PL/SQL procedure successfully completed. SQL> select * from sys.transport_set_violations; no rows selected
3.检查源平台与目标平台的字节序
源平台
SQL> select d.platform_name,endian_format from v$transportable_platform tp,v$database d where tp.platform_name=d.platform_name; PLATFORM_NAME ENDIAN_FORMAT ----------------------------------------------------------------------------------------------------- -------------- Linux x86 64-bit Little
目标平台
SQL> select d.platform_name,endian_format from v$transportable_platform tp,v$database d where t PLATFORM_NAME ENDIAN_FORMAT -------------------------------------------------------------------------------- -------------- Microsoft Windows x86 64-bit Little
4.将要被传输的表空间(tts,cs)设置为只读状态
SQL> alter tablespace tts read only; Tablespace altered. SQL> alter tablespace cs read only; Tablespace altered. SQL> select tablespace_name,status from user_tablespaces; TABLESPACE_NAME STATUS ------------------------------ --------- SYSTEM ONLINE SYSAUX ONLINE UNDOTBS1 ONLINE TEMP ONLINE UNDO_2 ONLINE USERS ONLINE TEST ONLINE TTS READ ONLY CS READ ONLY 9 rows selected.
5.给RMAN备份输出文件选择命名方法,使用backup命令的format子句来为备份输出文件选择输出方法。
6.启动RMAN连接到源数据库(整个RAC CDB)并将重启源数据库并以只读方式打开
[oracle@jytest1 ~]$ rman target sys/abcd@jy catalog rco/abcd@jypdb_173 Recovery Manager: Release 12.2.0.1.0 - Production on Mon Feb 5 23:22:24 2018 Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved. connected to target database: JY (DBID=979425723) connected to recovery catalog database
7.在backup命令中使用for transport或to platform子句来备份表空间。下面的例子对表空间tts与cs创建跨平台传输备份。备份可以被还原到Microsoft Windows IA (64-bit)平台。Data Pump导出dump文件包含了附加表空间到目标数据库中所需要的元数据。备份文件与dump文件存储在/ora_backup/tts目录中。
RMAN> backup to platform 'Microsoft Windows x86 64-bit' format '/ora_backup/tts/trans_ts.bck' datapump format '/ora_backup/tts/trans_ts_dmp.bck' tablespace JYPDB:'TTS',JYPDB:'CS'; Starting backup at 05-FEB-18 using channel ORA_DISK_1 Running TRANSPORT_SET_CHECK on specified tablespaces TRANSPORT_SET_CHECK completed successfully Performing export of metadata for specified tablespaces... EXPDP> Starting "SYS"."TRANSPORT_EXP_JY_xput": EXPDP> Processing object type TRANSPORTABLE_EXPORT/INDEX_STATISTICS EXPDP> Processing object type TRANSPORTABLE_EXPORT/TABLE_STATISTICS EXPDP> Processing object type TRANSPORTABLE_EXPORT/STATISTICS/MARKER EXPDP> Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK EXPDP> Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK EXPDP> Processing object type TRANSPORTABLE_EXPORT/TABLE EXPDP> Processing object type TRANSPORTABLE_EXPORT/INDEX/INDEX EXPDP> Master table "SYS"."TRANSPORT_EXP_JY_xput" successfully loaded/unloaded EXPDP> ****************************************************************************** EXPDP> Dump file set for SYS.TRANSPORT_EXP_JY_xput is: EXPDP> /u01/app/oracle/product/12.2.0/db/dbs/backup_tts_JY_38873.dmp EXPDP> ****************************************************************************** EXPDP> Datafiles required for transportable tablespace CS: EXPDP> +DATA/JY/5F9AC6865E87549FE053AB828A0ADE94/DATAFILE/cs.294.966380783 EXPDP> Datafiles required for transportable tablespace TTS: EXPDP> +DATA/JY/5F9AC6865E87549FE053AB828A0ADE94/DATAFILE/tts.257.966380353 EXPDP> Job "SYS"."TRANSPORT_EXP_JY_xput" successfully completed at Mon Feb 5 23:57:57 2018 elapsed 0 00:03:08 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=00022 name=+DATA/JY/5F9AC6865E87549FE053AB828A0ADE94/DATAFILE/tts.257.966380353 input datafile file number=00023 name=+DATA/JY/5F9AC6865E87549FE053AB828A0ADE94/DATAFILE/cs.294.966380783 channel ORA_DISK_1: starting piece 1 at 05-FEB-18 channel ORA_DISK_1: finished piece 1 at 05-FEB-18 piece handle=/ora_backup/tts/trans_ts.bck tag=TAG20180205T235319 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03 channel ORA_DISK_1: starting full datafile backup set input Data Pump dump file=/u01/app/oracle/product/12.2.0/db/dbs/backup_tts_JY_38873.dmp channel ORA_DISK_1: starting piece 1 at 05-FEB-18 channel ORA_DISK_1: finished piece 1 at 05-FEB-18 piece handle=/ora_backup/tts/trans_ts_dmp.bck tag=TAG20180205T235319 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01 Finished backup at 05-FEB-18 starting full resync of recovery catalog full resync complete [oracle@jytest1 tts]$ ls -lrt total 2472 -rw-r----- 1 oracle asmadmin 2318336 Feb 5 17:57 trans_ts.bck -rw-r----- 1 oracle asmadmin 212992 Feb 5 17:57 trans_ts_dmp.bck
因为在backup命令中使用了to platform子句,因此将数据文件转换成目标平台字节序的操作在源平台执行。
8.将backup命令生成的备份集与Data Pump导出的dump文件传输到目标平台的D:/app/oracle/oradata/tts目录中
9.使用rman连接到目标数据库(单实例CDB中的JYPDB)
C:/Users/Administrator>rman target sys/abcd@jypdb 恢复管理器: Release 12.2.0.1.0 - Production on 星期一 2月 5 00:22:31 2018 Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved. 已连接到目标数据库: JY:JYPDB (DBID=4203494064)
10.使用有foreign tablespace子句的restore命令来还原从源平台传输过来的备份集
RMAN> restore foreign tablespace TTS,CS to new from backupset 'D:/app/oracle/oradata/tts/trans_ts.bck' dump file from backupset 'D:/app/oracle/oradata/tts/trans_ts_dmp.bck'; 从位于 06-2月 -18 的 restore 开始 使用目标数据库控制文件替代恢复目录 分配的通道: ORA_DISK_1 通道 ORA_DISK_1: SID=8 设备类型=DISK 通道 ORA_DISK_1: 正在开始还原数据文件备份集 通道 ORA_DISK_1: 正在指定从备份集还原的数据文件 通道 ORA_DISK_1: 正在还原外部表空间 TTS 中的所有文件 通道 ORA_DISK_1: 正在还原外部表空间 CS 中的所有文件 通道 ORA_DISK_1: 正在读取备份片段 D:/app/oracle/oradata/tts/trans_ts.bck 通道 ORA_DISK_1: 将外部文件 22 还原到 D:/APP/ORACLE/ORADATA/JY/5F9AC6865E87549FE053AB828A0ADE94/DATAFILE/O1_MF_TTS_F7K17RGW_.DBF 通道 ORA_DISK_1: 将外部文件 23 还原到 D:/APP/ORACLE/ORADATA/JY/5F9AC6865E87549FE053AB828A0ADE94/DATAFILE/O1_MF_CS_F7K17RHC_.DBF 通道 ORA_DISK_1: 外部片段句柄 = D:/app/oracle/oradata/tts/trans_ts.bck 通道 ORA_DISK_1: 已还原备份片段 1 通道 ORA_DISK_1: 还原完成, 用时: 00:00:02 通道 ORA_DISK_1: 正在开始还原数据文件备份集 通道 ORA_DISK_1: 正在指定从备份集还原的数据文件 通道 ORA_DISK_1: 正在将数据泵转储文件还原到 D:/app/oracle/product/12.2.0/dbhome_1/dbs/backup_tts_JY_38586.dmp 通道 ORA_DISK_1: 正在读取备份片段 D:/app/oracle/oradata/tts/trans_ts_dmp.bck 通道 ORA_DISK_1: 外部片段句柄 = D:/app/oracle/oradata/tts/trans_ts_dmp.bck 通道 ORA_DISK_1: 已还原备份片段 1 通道 ORA_DISK_1: 还原完成, 用时: 00:00:02 正在执行元数据导入... IMPDP> 已成功加载/卸载了主表 "SYS"."TSPITR_IMP_JY_pfCp" IMPDP> 启动 "SYS"."TSPITR_IMP_JY_pfCp": IMPDP> 处理对象类型 TRANSPORTABLE_EXPORT/PLUGTS_BLK IMPDP> 处理对象类型 TRANSPORTABLE_EXPORT/TABLE IMPDP> 处理对象类型 TRANSPORTABLE_EXPORT/INDEX/INDEX IMPDP> 处理对象类型 TRANSPORTABLE_EXPORT/INDEX_STATISTICS IMPDP> 处理对象类型 TRANSPORTABLE_EXPORT/TABLE_STATISTICS IMPDP> 处理对象类型 TRANSPORTABLE_EXPORT/STATISTICS/MARKER IMPDP> 处理对象类型 TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK IMPDP> 作业 "SYS"."TSPITR_IMP_JY_pfCp" 已于 星期二 2月 6 00:24:02 2018 elapsed 0 00:00:33 成功完成 导入完毕 在 05-2月 -18 完成了 restore
11.在目标数据库中查询表tts.t1与cs.t2记录是否与源数据库中一致,如果一致说用表空间tts与cs跨平台传输成功
源数据库
SQL> alter session set container=jypdb; 会话已更改。 SQL> select count(*) from tts.t1; COUNT(*) ---------- 45 SQL> select count(*) from cs.t2; COUNT(*) ---------- 46
目标数据库
SQL> alter session set container=jypdb; 会话已更改。 SQL> select count(*) from tts.t1; COUNT(*) ---------- 45 SQL> select count(*) from cs.t2; COUNT(*) ---------- 46
到此使用备份集跨平台传输只读表空间操作就完成了。