Oracle 12C RMAN Cross-Platform Transport of PDBs

为了将整个PDB传输到不同的平台,源平台与目标平台必须使用相同的字节序。compatible参数在源CDB数据库与目标CDB数据库中必须设置为12.1或更高版本。

下面的例子将Linux平台上的RAC CDB中的PDB数据库(jypdb与testpdb)传输到windows平台上的单实例CDB数据库中。 执行跨平台传输的操作如下:
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.检查源平台与目标平台的字节序
源平台

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 tp.platform_name=d.platform_name;

PLATFORM_NAME                                                                       ENDIAN_FORMAT
--------------------------------------------------------------------------------    --------------
Microsoft Windows x86 64-bit                                                        Little

3.将要被传输的pdb(jypdb,testpdb)设置为只读状态

SQL> alter pluggable database all close immediate;

Pluggable database altered.

SQL> set long 200
SQL> set linesize 200
SQL>  select name,open_mode from v$pdbs;

NAME                                                                                                                             OPEN_MODE
-------------------------------------------------------------------------------------------------------------------------------- ----------
PDB$SEED                                                                                                                         READ ONLY
JYPDB                                                                                                                            MOUNTED
TESTPDB                                                                                                                          MOUNTED

4.备份要传输的PDB数据库,可以使用以下一种方法来跨平台传输PDB
4.1使用RMAN连接到CDB的root容器,并使用backup for transport … pluggable database或者backup to platform … pluggable database命令来为PDB创建跨平台备份。

4.2使用RMAN连接到PDB,并使用backup for transport或backup to platform命令来为PDB创建跨平台备份。

因为我这里要传输两个PDB所以选择第一种方法

RMAN> backup for transport unplug into '/ora_backup/tpdbs/metadata_jypdb.xml' pluggable database jypdb  format '/ora_backup/tpdbs/pdb_%U';

Starting backup at 11-FEB-18
using channel ORA_DISK_1
running UNPLUG on the specified pluggable database: JYPDB
UNPLUG file path : /ora_backup/tpdbs/metadata_jypdb.xml
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00014 name=+DATA/JY/5F9AC6865E87549FE053AB828A0ADE94/DATAFILE/users.278.962209649
input datafile file number=00011 name=+DATA/JY/5F9AC6865E87549FE053AB828A0ADE94/DATAFILE/sysaux.316.962209649
input datafile file number=00012 name=+DATA/JY/5F9AC6865E87549FE053AB828A0ADE94/DATAFILE/undotbs1.264.962209649
input datafile file number=00013 name=+DATA/JY/5F9AC6865E87549FE053AB828A0ADE94/DATAFILE/undo_2.268.962209649
input datafile file number=00010 name=+DATA/JY/5F9AC6865E87549FE053AB828A0ADE94/DATAFILE/system.271.962209649
input datafile file number=00015 name=+DATA/JY/5F9AC6865E87549FE053AB828A0ADE94/DATAFILE/test.275.962210609
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 11-FEB-18
channel ORA_DISK_1: finished piece 1 at 11-FEB-18
piece handle=/ora_backup/tpdbs/pdb_8csqvqc5_1_1 tag=TAG20180211T173748 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:56
Finished backup at 11-FEB-18
starting full resync of recovery catalog
full resync complete

RMAN> backup for transport unplug into '/ora_backup/tpdbs/metadata_testpdb.xml' pluggable database testpdb  format '/ora_backup/tpdbs/pdb_%U';

Starting backup at 11-FEB-18
starting full resync of recovery catalog
full resync complete
using channel ORA_DISK_1
running UNPLUG on the specified pluggable database: TESTPDB
UNPLUG file path : /ora_backup/tpdbs/metadata_testpdb.xml
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00017 name=+DATA/JY/600D6F56DEB669CCE053AB828A0AAB7E/DATAFILE/sysaux.259.962469409
input datafile file number=00018 name=+DATA/JY/600D6F56DEB669CCE053AB828A0AAB7E/DATAFILE/undotbs1.265.962469409
input datafile file number=00016 name=+DATA/JY/600D6F56DEB669CCE053AB828A0AAB7E/DATAFILE/system.260.962469409
input datafile file number=00019 name=+DATA/JY/600D6F56DEB669CCE053AB828A0AAB7E/DATAFILE/undo_2.266.962469409
input datafile file number=00021 name=+DATA/JY/600D6F56DEB669CCE053AB828A0AAB7E/DATAFILE/test.269.962469409
input datafile file number=00020 name=+DATA/JY/600D6F56DEB669CCE053AB828A0AAB7E/DATAFILE/users.267.962469409
channel ORA_DISK_1: starting piece 1 at 11-FEB-18
channel ORA_DISK_1: finished piece 1 at 11-FEB-18
piece handle=/ora_backup/tpdbs/pdb_8dsqvqpj_1_1 tag=TAG20180211T174458 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:35
Finished backup at 11-FEB-18
starting full resync of recovery catalog
full resync complete


[oracle@jytest1 tpdbs]$ ls -lrt
total 1707488
-rw-r--r-- 1 oracle asmadmin      11413 Feb 11 11:38 metadata_jypdb.xml
-rw-r----- 1 oracle asmadmin 1038368768 Feb 11 11:39 pdb_8csqvqc5_1_1
-rw-r--r-- 1 oracle asmadmin       9569 Feb 11 11:45 metadata_testpdb.xml
-rw-r----- 1 oracle asmadmin  710066176 Feb 11 11:45 pdb_8dsqvqpj_1_1

5.将在源平台上使用rman backup命令生成的备份集与备份的控制文件传输到目标平台的D:\app\oracle\oradata\pdbs目录中

6.将PDB(jypdb,testpdb)还原到目标数据库

RMAN> restore from platform 'Linux x86 64-bit'   foreign pluggable database jypdb  to new from backupset 'D:\app\oracle\oradata\pdbs\pdb_8csqvqc5_1_1';

从位于 11-2月 -18 的 restore 开始
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=1522 设备类型=DISK

通道 ORA_DISK_1: 正在开始还原数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
通道 ORA_DISK_1: 正在还原备份片段中的所有外部文件
通道 ORA_DISK_1: 正在读取备份片段 D:\app\oracle\oradata\pdbs\pdb_8csqvqc5_1_1
通道 ORA_DISK_1: 将外部文件 14 还原到 D:\APP\ORACLE\ORADATA\JY\DATAFILE\O1_MF_USERS_F805GPMS_.DBF
通道 ORA_DISK_1: 将外部文件 11 还原到 D:\APP\ORACLE\ORADATA\JY\DATAFILE\O1_MF_SYSAUX_F805GPMS_.DBF
通道 ORA_DISK_1: 将外部文件 12 还原到 D:\APP\ORACLE\ORADATA\JY\DATAFILE\O1_MF_UNDOTBS1_F805GPMS_.DBF
通道 ORA_DISK_1: 将外部文件 13 还原到 D:\APP\ORACLE\ORADATA\JY\DATAFILE\O1_MF_UNDO_2_F805GPMS_.DBF
通道 ORA_DISK_1: 将外部文件 10 还原到 D:\APP\ORACLE\ORADATA\JY\DATAFILE\O1_MF_SYSTEM_F805GPN8_.DBF
通道 ORA_DISK_1: 将外部文件 15 还原到 D:\APP\ORACLE\ORADATA\JY\DATAFILE\O1_MF_TEST_F805GPN8_.DBF
通道 ORA_DISK_1: 将外部文件 22 还原到 D:\APP\ORACLE\ORADATA\JY\DATAFILE\O1_MF_TTS_F805GPN8_.DBF
通道 ORA_DISK_1: 将外部文件 23 还原到 D:\APP\ORACLE\ORADATA\JY\DATAFILE\O1_MF_CS_F805GPN8_.DBF
通道 ORA_DISK_1: 外部片段句柄 = D:\app\oracle\oradata\pdbs\pdb_8csqvqc5_1_1
通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 还原完成, 用时: 00:00:36
在 11-2月 -18 完成了 restore


RMAN> restore from platform 'Linux x86 64-bit'   foreign pluggable database testpdb  to new from backupset 'D:\app\oracle\oradata\pdbs\pdb_8dsqvqpj_1_1';

从位于 11-2月 -18 的 restore 开始
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=1522 设备类型=DISK

通道 ORA_DISK_1: 正在开始还原数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
通道 ORA_DISK_1: 正在还原备份片段中的所有外部文件
通道 ORA_DISK_1: 正在读取备份片段 D:\app\oracle\oradata\pdbs\pdb_8dsqvqpj_1_1
通道 ORA_DISK_1: 将外部文件 17 还原到 D:\APP\ORACLE\ORADATA\JY\DATAFILE\O1_MF_SYSAUX_F806C6WT_.DBF
通道 ORA_DISK_1: 将外部文件 18 还原到 D:\APP\ORACLE\ORADATA\JY\DATAFILE\O1_MF_UNDOTBS1_F806C6WT_.DBF
通道 ORA_DISK_1: 将外部文件 16 还原到 D:\APP\ORACLE\ORADATA\JY\DATAFILE\O1_MF_SYSTEM_F806C6WT_.DBF
通道 ORA_DISK_1: 将外部文件 19 还原到 D:\APP\ORACLE\ORADATA\JY\DATAFILE\O1_MF_UNDO_2_F806C6XB_.DBF
通道 ORA_DISK_1: 将外部文件 21 还原到 D:\APP\ORACLE\ORADATA\JY\DATAFILE\O1_MF_TEST_F806C6XB_.DBF
通道 ORA_DISK_1: 将外部文件 20 还原到 D:\APP\ORACLE\ORADATA\JY\DATAFILE\O1_MF_USERS_F806C6XB_.DBF
通道 ORA_DISK_1: 外部片段句柄 = D:\app\oracle\oradata\pdbs\pdb_8dsqvqpj_1_1
通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 还原完成, 用时: 00:00:26
在 11-2月 -18 完成了 restore

7.在目标主机上修改metadata_jypdb.xml与metadata_testpdb.xml文件将数据文件路径修改为还原后数据文件所在路径

8.将传输过来的PDB(jypdb,testpdb)插入CDB

SQL> create pluggable database jypdb using 'D:\app\oracle\oradata\pdbs\metadata_jypdb.xml' nocopy;

插接式数据库已创建。


SQL> create pluggable database testpdb using 'D:\app\oracle\oradata\pdbs\metadata_testpdb.xml' nocopy ;

插接式数据库已创建。

SQL> set long 200
SQL> set linesize 200
SQL> select name,open_mode from v$pdbs;

NAME                                                                                                                     OPEN_MODE
-------------------------------------------------------------------------------------------------------------------------------- ----------
PDB$SEED                                                                                                                 READ ONLY
JYPDB                                                                                                                    MOUNTED
TESTPDB                                                                                                                  MOUNTED

SQL> alter pluggable database all open;

插接式数据库已变更。

SQL> select name,open_mode from v$pdbs;

NAME                                                                                                                     OPEN_MODE
-------------------------------------------------------------------------------------------------------------------------------- ----------
PDB$SEED                                                                                                                 READ ONLY
JYPDB                                                                                                                    READ WRITE
TESTPDB                                                                                                                  READ WRITE

9.查询tts.t1与cs.t2表中的数据来验证跨平台传输PDB是否操作成功

SQL> select count(*) from tts.t1;

  COUNT(*)
----------
        90

SQL> select count(*) from cs.t2;

  COUNT(*)
----------
        92

到此,跨平台传输PDB就完成了。

Oraclc 12C使用不一致备份执行跨平台传输表空间

使用不一致备份执行跨平台传输表空间
RMAN可以跨平台传输不一致表空间备份。不一致表空间备份是当表空间处于读写状态时对一个或多个表空间创建的备份。不一致是指备份的数据文件包含了检查点之后发生的改变。跨平台不一致备份所生成的外部数据文件不能 直接附加到目标数据库。可以通过应用跨平台增量备份来使外部数据文件达到一致。这种备份必须包含附加传输表空间到目标数据库所需要元数据的dump文件。

不一致备份能让你减少停机时间。当表空间联机时,在源数据库上创建跨平台不一致备份。第一次备份必须是level 0增量备份,后续,创建level 1增量备份它包含从最近level 1备份后所有发生的改变。就算其它level 1增量 备份正在源数据库上创建时,这些level 0与level 1增量备份可以被还原与应用到目标数据库。在开始应用之前所创建的level 1备份到目标数据库之前不需要等待所有level 1增量备份在源数据库上创建完成就可以执行。因为 当创建增量备份时这些表空间仍然处于联机状态,在这时应用程序仍然可以正常运行。当最后一次创建增量备份时需要将表空间置于只读状态,这时应用程序处于停机状态。最后的备份必须包含附加表空间到目标数据库所需要 的元数据。

在目标数据库上,首先还原level 0增量备份来创建外部数据文件集。下一步就是应用当表空间处于读写状态时所生成的level 1增量备份至这些还原的外部数据文件。以创建这些备份的顺序来应用这些备份。在大多数情况下, 目标数据库的内容就赶上最后增量备份之前的最近一次level 1增量备份所包含的内容,创建最后增量备份时需要将源数据库中的表空间设置为只读状态。最后还原最终的level 1增量备份时会使用外部数据文件达到一致状态。 这次的备份包含附加表空间到目标数据库中所需要的元数据。

可以使用备份集或镜像副本来跨平台传输不一致备份,使用backup命令来以备份集方式来创建跨平台备份。使用convert命令来以镜像副本来创建跨平台备份。

在源数据为上创建不一致与增量备份
在backup或convert命令中使用allow inconsistent子句来为表空间创建跨平台不一致备份。当创建不一致备份时这些表空间处于读写状态。为了创建增量备份,在backup命令中使用incremental level 1子句。

第一次不一致备份是level 0增量备份。后续可以创建多个跨平台的level 1增量备份。最后一次跨平台增量备份必须是一个一致的备份因此在创建时表空间必须处于只读状态。在创建最后一次增量备份时,在backup命令中使用 dump file子句来创建包含表空间元数据的dump文件。

当使用convert命令时,必须显式的使用Data Pump导出工具来创建包含表空间元数据的导出dump文件。allo inconsistent子句不能用于跨平台数据库备份。

在目标数据库还原与恢复不一致备份
当源数据库中表空间处于读写状态时首先在目标数据库中还原跨平台level 0增量备份。这个操作会还原备份与创建外部数据文件副本。因为创建备份时这些表空间不是处于只读状态所以这些外部数据文件处于一不致状态。为了 使用这些外部数据文件达到一致并且达到一致检查点SCN,以创建增量备份的顺序来应用这些增量备份。最后应用的增量备份在创建时源数据库中的表空间必须处于只读状态。下一步就是将表空间附加到目标数据库中,在传输表 空间时可以还原与导入包含元数据的dump文件。

对还原的数据文件应用跨平台增量备份所要满足的条件
为了对还原的外部数据文件集成功应用跨平台增量表空间备份必须满足以下条件:
.每个被包含在跨平台增量备份中的数据文件,它的开始SCN号必须小于外部数据文件副本的当前检查点SCN号。

.对于通过还原操作所创建的外部数据文件副本必须不能被修改。例如,如果外部数据文件副本已经被附加到目标数据库中,并且处于读写状态,然后置于只读状态,那么RMAN会认为这些文件已经被修改。

跨平台传输不一致表空间
跨平台传输不一致表空间分主以下三个主要操作
1.在源数据库上创建传输表空间所需要的文件。
2.将文件从源主机传输到目标主机上。
3.在目标主机上还原表空间并附加到目标数据库

一在源数据库上创建传输表空间所需要的文件
1.1如果被传输的表空间是TDE加密表空间,那么在创建备份集之前指定加密密码
RMAN> SET PASSPHRASE ON IDENTIFIED BY encr_temp;

1.2对于要被传输的表空间在其处于读写状态下创建跨平台level 0不一致备份。在backup命令中使用allow inconsistent and incremental level 0子句来指示备份是不一致备份。

1.3在要被传输的表空间在其处于读写状态下创建跨平台level 1增量备份。在level 0不一致备份后,在表空间处于读写状态下时可以创建任何数量的level 1增量备份。在backup命令中使用allow inconsistent与 incremental level 1子句来创建增量备份。当被传输表空间处于读写状态时频繁的执行增量备份的好处就是可以减少当表空间处于只读状态时所创建的最后增量备份应用到目标数据库的时间。

1.4当被传输表空间处于只读状态时创建跨平台level 1增量备份。这是最后一次增量备份并且它必须包含附加表空间到目标数据库中所需要的表空间元数据。在backup命令中使用incremental level 1子句来创建level 1增量 备份。

当使用backup命令执地跨平台传输时,使用datapump子句在创建增量备份的同时也生成导出dump文件。dump文件被创建在一个单独的备份集中。当使用镜像副本来创建跨平台增量备份时,必须显式地使用Data Pump导出工具来 创建包含表空间元数据的dump文件。

二将文件从源主机传输到目标主机上
使用ftp,操作系统复制命令或一些其它机制来移动备份集,数据文件与dump文件到目标主机上。

三在目标主机上还原表空间并附加到目标数据库
3.1如果被传输表空间是TDE加密表空间,那么通过下面的方式来指定密码
RMAN> SET PASSPHRASE ON IDENTIFIED BY encr_temp;

3.2还原跨平台level 0不一致备份
还原操作将会在目标数据库上创建一组外部数据文件。这些外部数据文件是不一致状态,并且它们在附加到目标数据库之前需要执行恢复。使用restore命令来还原跨平台level 0不一致备份。当还原跨平台不一致备份,它是由 备份集组成,使用from backupset子句来指定包含level 0不一致备份的备份集名称。

3.3应用表空间处于读写状态时所创建的跨平台level 1增量备份到还原的外部数据文件。
如果创建了多次跨平台level 1增量备份,那么这些增量备份必须以相同的顺序来进行应用。使用recover命令来应用增量备份。recover命令中的foreign datafilecopy子句必须列出增量备份所要应用到的每个数据文件。使用 from backupset子句来指定包含被恢复数据的备份集名称。

3.4应用表空间处于只读状态时所创建的跨平台level 1增理备份到还原的外部数据文件。
使用recover命令来应用增量备份。recover命令中的foreign datafilecopy子句必须列出增量备份所要应用到的每个数据文件。使用from backupset子句来指定包含被恢复数据的备份集名称。

3.5还原包含表空间元数据的备份集
使用restore命令来还原在创建跨平台增量备份时一同创建的包含dump文件的备份集。这种备份是当表空间处于只读状态时所创建的。可以使用dump file子句来指定目标数据库上dump文件的名称,datapump destination子句 来指定存储dump文件的目录。如果这些子句被忽略,RMAN将使用配置的缺省值。当使用备份集传输数据时,使用from backupset子句来指定包含dump文件的备份集。

3.6向目标数据库导入包含表空间元数据的dump文件
通过使用Data Pump导入工具来导入在执行增量备份时所生成的dump文件来附加被恢复的表空间到目标数据库中。运行Data Pump导入工具的用户必须有sysdba权限。

Performing Cross-Platform Inconsistent Tablespace Transport Using Backup Sets
下面的例子将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.当表空间jypdb:tts,与jypdb:cs处于读写状态时创建跨平台level 0不一致备份。备份集名为tts_cs_incon.bck并存储在/ora_backup/tts目录中

RMAN> backup for transport allow inconsistent incremental level 0 tablespace JYPDB:'TTS',JYPDB:'CS' format '/ora_backup/tts/tts_cs_incon.bck';

Starting backup at 09-FEB-18
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=16 instance=jy1 device type=DISK
channel ORA_DISK_1: starting incremental level 0 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 09-FEB-18
channel ORA_DISK_1: finished piece 1 at 09-FEB-18
piece handle=/ora_backup/tts/tts_cs_incon.bck tag=TAG20180209T184928 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 09-FEB-18

因为使用for transport代替to platform子句,因此这种跨平台备份可以被还原到任何平台。这种转换操作将在目标数据库上完成。

5.对tts.t1与cs.t2表进行更新

SQL> select count(*) from tts.t1;

  COUNT(*)
----------
        45


SQL> select count(*) from cs.t2;

  COUNT(*)
----------
        46

SQL> insert into tts.t1 select * from tts.t1;

45 rows created.

SQL> insert into cs.t2 select * from cs.t2;

46 rows created.

SQL> commit;

Commit complete.

SQL> select count(*) from tts.t1;

  COUNT(*)
----------
        90

SQL> select count(*) from cs.t2;

  COUNT(*)
----------
        92

6.当表空间jypdb:tts,jypdb:cs处于读写状态时创建跨平台的level 1增量备份。备份集名为tts_cs_incon1.bck并存储在/ora_backup/tts目录中

RMAN> backup for transport allow inconsistent incremental level 1 tablespace JYPDB:'TTS',JYPDB:'CS' format '/ora_backup/tts/tts_cs_incon1.bck';

Starting backup at 09-FEB-18
using channel ORA_DISK_1
channel ORA_DISK_1: starting incremental level 1 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 09-FEB-18
channel ORA_DISK_1: finished piece 1 at 09-FEB-18
piece handle=/ora_backup/tts/tts_cs_incon1.bck tag=TAG20180209T185930 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 09-FEB-18

为了最小化应用程序停机的时间,在步骤4,6所创建的level 0与level 1增量备份当源数据库中表空间处于读写状态的情况下,可以被还原与应用到目标数据库。当目标数据库的内容赶上最近一次增量备份的内容时,可以将源 数据库中的表空间设置为只读状态来创建最终的增量备份。

7.将源数据库中的表空间jypdb:tts,jypdb:cs设置只读模式

SQL> alter tablespace tts read only;

Tablespace altered.

SQL> alter tablespace cs read only;

Tablespace altered.

SQL> select tablespace_name,status from dba_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.

8.创建最终的跨平台level 1增量备份。这次备份包含上一次备份以来所有的改变并且包含导出dump文件它包含表空间元数据。

RMAN> backup for transport  incremental level 1 tablespace JYPDB:'TTS',JYPDB:'CS' format '/ora_backup/tts/tts_cs_incr.bck' DATAPUMP FORMAT '/ora_backup/tts/tts_cs_incr_dp.bck';

Starting backup at 09-FEB-18
starting full resync of recovery catalog
full resync complete
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_vqqz":
   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_vqqz" successfully loaded/unloaded
   EXPDP> ******************************************************************************
   EXPDP> Dump file set for SYS.TRANSPORT_EXP_JY_vqqz is:
   EXPDP>   /u01/app/oracle/product/12.2.0/db/dbs/backup_tts_JY_71118.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_vqqz" successfully completed at Fri Feb 9 19:19:28 2018 elapsed 0 00:09:02
Export completed

channel ORA_DISK_1: starting incremental level 1 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 09-FEB-18
channel ORA_DISK_1: finished piece 1 at 09-FEB-18
piece handle=/ora_backup/tts/tts_cs_incr.bck tag=TAG20180209T190934 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
channel ORA_DISK_1: starting incremental level 1 datafile backup set
input Data Pump dump file=/u01/app/oracle/product/12.2.0/db/dbs/backup_tts_JY_71118.dmp
channel ORA_DISK_1: starting piece 1 at 09-FEB-18
channel ORA_DISK_1: finished piece 1 at 09-FEB-18
piece handle=/ora_backup/tts/tts_cs_incr_dp.bck tag=TAG20180209T190934 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 09-FEB-18
starting full resync of recovery catalog
full resync complete

9.将所有生成的备份集与Data Pump导出的dump文件传输到目标平台的D:\app\oracle\oradata\tts目录中

10.还原步骤4生成的跨平台level 0不一致备份
使用foreign datafile子句来指定被还原的数据文件。from platform子句指定创建备份的平台名称。在目标数据库中转换备份需要指定这个子句。在下面的例子中数据文件号为22,23的数据文件会被还原,并且通过指定 format子句来为数据文件指定名称。

RMAN> RESTORE FROM PLATFORM 'Linux x86 64-bit'
2> FOREIGN DATAFILE 22 FORMAT 'D:\APP\ORACLE\ORADATA\JY\DATAFILE\tts_22.df',
3> 23
4> FORMAT 'D:\APP\ORACLE\ORADATA\JY\DATAFILE\cs_23.df'
5> FROM BACKUPSET 'D:\app\oracle\oradata\tts\tts_cs_incon.bck';

从位于 09-2月 -18 的 restore 开始
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=2652 设备类型=DISK

通道 ORA_DISK_1: 正在开始还原数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
通道 ORA_DISK_1: 正在还原外部文件 00022
通道 ORA_DISK_1: 正在还原外部文件 00023
通道 ORA_DISK_1: 正在读取备份片段 D:\app\oracle\oradata\tts\tts_cs_incon.bck
通道 ORA_DISK_1: 将外部文件 22 还原到 D:\APP\ORACLE\ORADATA\JY\DATAFILE\TTS_22.DF
通道 ORA_DISK_1: 将外部文件 23 还原到 D:\APP\ORACLE\ORADATA\JY\DATAFILE\CS_23.DF
通道 ORA_DISK_1: 外部片段句柄 = D:\app\oracle\oradata\tts\tts_cs_incon.bck
通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 还原完成, 用时: 00:00:04
在 09-2月 -18 完成了 restore

11.通过应用步骤6所创建的level 1增量备份来恢复步骤10中还原的外部数据文件

RMAN> RECOVER
2> FROM PLATFORM 'Linux x86 64-bit'
3> FOREIGN DATAFILECOPY 'D:\APP\ORACLE\ORADATA\JY\DATAFILE\tts_22.df','D:\APP\ORACLE\ORADATA\JY\DATAFILE\cs_23.df'
4> FROM BACKUPSET 'D:\app\oracle\oradata\tts\tts_cs_incon1.bck';

从位于 09-2月 -18 的 restore 开始
使用通道 ORA_DISK_1

通道 ORA_DISK_1: 正在开始还原数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
通道 ORA_DISK_1: 正在还原外部文件 D:\APP\ORACLE\ORADATA\JY\DATAFILE\tts_22.df
通道 ORA_DISK_1: 正在还原外部文件 D:\APP\ORACLE\ORADATA\JY\DATAFILE\cs_23.df
通道 ORA_DISK_1: 正在读取备份片段 D:\app\oracle\oradata\tts\tts_cs_incon1.bck
通道 ORA_DISK_1: 外部片段句柄 = D:\APP\ORACLE\ORADATA\TTS\TTS_CS_INCON1.BCK
通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 还原完成, 用时: 00:00:01
在 09-2月 -18 完成了 restore

12.使用最终的level 1增量备份来恢复步骤10中还原的外部数据文件

RMAN> RECOVER
2> FROM PLATFORM 'Linux x86 64-bit'
3> FOREIGN DATAFILECOPY 'D:\APP\ORACLE\ORADATA\JY\DATAFILE\tts_22.df','D:\APP\ORACLE\ORADATA\JY\DATAFILE\cs_23.df'
4> FROM BACKUPSET 'D:\app\oracle\oradata\tts\tts_cs_incr.bck';

从位于 09-2月 -18 的 restore 开始
使用通道 ORA_DISK_1

通道 ORA_DISK_1: 正在开始还原数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
通道 ORA_DISK_1: 正在还原外部文件 D:\APP\ORACLE\ORADATA\JY\DATAFILE\tts_22.df
通道 ORA_DISK_1: 正在还原外部文件 D:\APP\ORACLE\ORADATA\JY\DATAFILE\cs_23.df
通道 ORA_DISK_1: 正在读取备份片段 D:\app\oracle\oradata\tts\tts_cs_incr.bck
通道 ORA_DISK_1: 外部片段句柄 = D:\APP\ORACLE\ORADATA\TTS\TTS_CS_INCR.BCK
通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 还原完成, 用时: 00:00:01
在 09-2月 -18 完成了 restore

13.还原包含导出dump文件的备份集,dump文件是附加表空间到目标数据库中所需要的。

RMAN> RESTORE
2> FROM PLATFORM 'Linux x86 64-bit'
3> DUMP FILE 'tts_cs_restore_md.dmp'
4> DATAPUMP DESTINATION 'D:\app\oracle\oradata\tts\'
5> FROM BACKUPSET 'D:\app\oracle\oradata\tts\tts_cs_incr_dp.bck';

从位于 09-2月 -18 的 restore 开始
使用通道 ORA_DISK_1

通道 ORA_DISK_1: 正在开始还原数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
通道 ORA_DISK_1: 正在将数据泵转储文件还原到 D:\app\oracle\oradata\tts\/tts_cs_restore_md.dmp
通道 ORA_DISK_1: 正在读取备份片段 D:\app\oracle\oradata\tts\tts_cs_incr_dp.bck
通道 ORA_DISK_1: 外部片段句柄 = D:\app\oracle\oradata\tts\tts_cs_incr_dp.bck
通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 还原完成, 用时: 00:00:02
在 09-2月 -18 完成了 restore

14.附加表空间到目标数据库中

SQL> CREATE OR REPLACE DIRECTORY dp_dir  AS 'D:\app\oracle\oradata\tts\';

目录已创建。


SQL> GRANT read,write ON DIRECTORY dp_dir TO public;

授权成功。


C:\Users\Administrator>impdp system/abcd@jypdb directory=dp_dir dumpfile=tts_cs_restore_md.dmp transport_datafiles='D:\APP\ORACLE\ORADATA\JY\DATAFILE\tts_22.df','D:\APP\ORACLE \ORADATA\JY\DATAFILE\cs_23.df' nologfile=Y

Import: Release 12.2.0.1.0 - Production on 星期五 2月 9 19:56:16 2018

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

连接到: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
已成功加载/卸载了主表 "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01"
启动 "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01":  system/********@jypdb directory=dp_dir dumpfile=tts_cs_restore_md.dmp transport_datafiles='D:\APP\ORACLE\ORADATA\JY\DATAFILE\tts_22.df','D: \APP\ORACLE\ORADATA\JY\DATAFILE\cs_23.df' nologfile=Y
处理对象类型 TRANSPORTABLE_EXPORT/PLUGTS_BLK
处理对象类型 TRANSPORTABLE_EXPORT/TABLE
处理对象类型 TRANSPORTABLE_EXPORT/INDEX/INDEX
处理对象类型 TRANSPORTABLE_EXPORT/INDEX_STATISTICS
处理对象类型 TRANSPORTABLE_EXPORT/TABLE_STATISTICS
处理对象类型 TRANSPORTABLE_EXPORT/STATISTICS/MARKER
处理对象类型 TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
作业 "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" 已于 星期五 2月 9 19:56:49 2018 elapsed 0 00:00:29 成功完成

15.检查tts.t1与cs.t2表的数据来验证传输是否成功

SQL> select tablespace_name,status from dba_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 行。

SQL> select count(*) from tts.t1;

  COUNT(*)
----------
        90

SQL> select count(*) from cs.t2;

  COUNT(*)
----------
        92

SQL> alter tablespace tts read write;

表空间已更改。

SQL> alter tablespace cs read write;

表空间已更改。

到此使用不一致跨平台备份传输表空间操作完成

Proudly powered by WordPress | Indrajeet by Sus Hill.