12c – 使用跨平台增量备份来减少传输表空间的停机时间 (Doc ID 2102859.1)

12c – 使用跨平台增量备份来减少传输表空间的停机时间 (Doc ID 2102859.1)



文档内容


文档内容


用途

适用范围

详细信息

概述

跨平台增量备份支持脚本

前提条件

问题分析

已知问题

使用跨平台增量备份及传输表空间技术来减少停机时间

文档约定

阶段1 – 初始设置

步骤1.1 – 安装目标数据库软件并且创建目标数据库

步骤1.2 – 确定要进行传输的表空间

步骤1.3 – 在源库上安装 xttconvert 脚本

步骤1.4 – 创建必要的目录

步骤1.5 – 在源库中配置 xtt.properties

步骤1.6 – 拷贝 xttconvert 脚本和 xtt.properties 文件到目标系统

步骤1.7 – 这是 TMPDIR 环境变量

阶段2 – 准备阶段

步骤2.1 – 在源库中做备份

步骤2.2 – 把下面的文件发送到目标系统

步骤2.3 – 在目标库上还原数据文件

阶段3 – 前滚阶段

步骤3.1 – 在源库需要传输的表空间上做增量备份

步骤3.2 – 传输增量备份到目标系统

步骤3.3 – 应用增量备份到目标系统的数据文件拷贝中

步骤3.4 - 为下次增量备份确定 from_scn

步骤 3.5 – 或者重复执行前滚阶段3 (3.1 – 3.4)或者直接执行阶段4 – 最后一次增量备份

阶段4 – 最后一次增量备份

步骤4.1 – 在源库中把源表空间置为 READ ONLY 模式

步骤4.2 – 创建最后一次增量备份并发送相关文件到目标系统

步骤4.3 – 应用最后的增量备份到目标系统

阶段5 – 传输阶段:导入对象元数据至目标数据库

步骤5A – 导入已存在的 dump 文件

步骤5A.1 – 创建数据泵目录及赋予权限

步骤5A.2 修改并执行 impdp 命令:

步骤5B – 使用 dblink 导入

步骤5B.1 – 为网络导入生成新的 xttplugin.txt

步骤5B.2 – 在目标系统上创建一个 dblink

步骤5B.3 – 修改并执行 impdp 命令

阶段6 -校验数据

步骤6.1 – 检查表空间是否发生 corruption

步骤6.2 – 在目标系统上把相关的表空间设为 READ WRITE 模式

阶段7 -收尾

附录

Perl 脚本 xttdriver.pl 命令选项的描述

配置文件 xtt.properties 中的参数描述

更改历史

参考

 



适用于:

Oracle Database Cloud Exadata Service - 版本 N/A 和更高版本
Oracle Database Exadata Express Cloud Service - 版本 N/A 和更高版本
Oracle Database Backup Service - 版本 N/A 和更高版本
Oracle Database Cloud Service - 版本 N/A 和更高版本
Oracle Database - Enterprise Edition - 版本 12.1.0.2 和更高版本
Linux x86-64

用途

注意: 考虑使用新release的版本V4的过程。 这个版本极大地简化了相关步骤。 请参考文档:V4 Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup  Note 2471245.1
XTT的旧版本上不会有bug修复或诊断,除非绝对必要,请仅仅使用V4版本。

 

本文档覆盖了在 12c 及更高版本上,使用跨平台传输表空间(XTTS)以及 RMAN 增量备份,以最小的应用停机时间,在不同 endian 格式的系统间迁移数据的步骤。

第一步是从源系统拷贝一份 full backup 到目标系统。之后,使用一系列的增量备份(每一份都比前一份要小),这样在停机前可以做到目标系统的数据和源系统“几乎”一致。需要停机的步骤只有最终的增量备份及元数据导出/导入。

这个文档描述了在 12c 下使用跨平台增量备份的步骤,关于 11g 下的步骤,请您参考  Note:1389592.1

跨平台增量备份特性并不能减少 XTTS 的其它步骤花费的时间,比如元数据导出/导入。因此,如果数据库内有很多元数据(DDL),比如 Oracle E-Business Suite 和其它打包程序,那么跨平台增量备份特性并不能带来很多好处;对于这样的环境,迁移花的大部分时间是花在处理元数据上,而不是数据文件的转换及传输。

 

只有被迁移表空间里物理存储的数据库对象才会被拷贝至目标系统;如果要迁移存储在其它表空间的其它类型的对象(比如存储在 SYSTEM 表空间内的 pl/sql 对象,sequences 等),你可以使用数据泵来拷贝这些对象至目标系统。

 

注意: 考虑使用新release的版本V4的过程。 这个版本极大地简化了相关步骤。 请参考文档:V4 Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup  Note 2471245.1

跨平台增量备份的主要步骤有:

1.  初始化设置

2.  准备阶段 (源库数据仍然在线)

1.  备份要传输的表空间(0级备份)

2.  把备份及其它必须的文件发送到目标系统

3.  在目标系统恢复数据文件至目标端的 endian 格式

3.  前滚阶段 (源库数据仍然在线 – 要重复这个阶段足够多次,使得目标数据文件拷贝和源库越相近越好)

1.  在源库创建增量备份

2.  把增量备份及其它必须的文件发送到目标系统

3.  把增量备份转换成目标系统的 endian 格式并且把增量备份应用至目标数据文件

4.  为下次增量备份确定 next_scn

5.  重复这些步骤直到已经准备好了操作传输表空间

NOTE:  在版本3,如果一个数据文件被加入到一个表空间或者一个新的表空间名字被加入到xtt.properties文件,会出现一个Warning并且需要额外的处置  

1.  传输阶段 (此时源库数据需要置于 READ ONLY 模式)

1.  在源库端把表空间置为 READ ONLY

2.  最后一次执行前滚阶段的步骤

1.  这个步骤会让目标系统的数据文件拷贝和源库数据文件完全一致并且产生必要导出文件。

2.  在数据量非常大的情况下,这个步骤所花费的时间要显著的少于传统的 XTTS 方式,因为增量备份会很小。

3.  使用数据泵把这个表空间的元数据导入至目标数据库

4.  把目标数据库的相关表空间置为 READ WRITE

 

适用范围

源库可以是下面列出的满足前提条件的任何平台。

如果要迁移小 endian 平台到 Oracle Linux,那么可以考虑的最好办法是 Data Guard。关于使用异构平台 Data Guard 迁移小 endian 平台到 Oracle Linux 的更详细信息可以参考  Note 413484.1

详细信息

概述

这个文档提供了一个测试案例,列出了使用 Oracle 跨平台增量备份技术把 Oracle Solaris SPARC 系统的两个表空间 TS1 和 TS2 传输至 Oracle Linux 并减少停机时间的详细步骤。

在完成初始化步骤后,要执行下面的步骤来移动数据:

准备:
在准备阶段,要在源库上对表空间的数据文件做一个0级备份。备份需要传送至目标系统,数据文件被还原并转换成目标系统的 endian 格式。  

前滚:
在前滚阶段,会对上个步骤还原的数据文件使用从源库上做的增量备份来做前滚。对这个步骤做多次,每个增量备份会变得越来越小并且应用这些增量备份所花的时间也会越来越小,并可以让目标系统“几乎”和源库一致。而在这个过程中,应用程序不会受到任何影响。

传输:
在传输阶段,源库中要迁移的表空间需要置为 READ ONLY 模式,并且需要在源库最后做一次增量备份。这个备份会被传送至目标系统并且应用到目标系统的数据文件上。此时,目标的数据文件拷贝和源库已经是一致的了;而要迁移的应用程序不能做任何更改操作。表空间会使用传输表空间技术导入到目标数据库。最终,目标系统上的表空间会被置于 READ WRITE 模式并且提供完全的访问。

跨平台增量备份支持脚本

跨平台增量备份的核心功能是在 Oracle 数据库 11.2.0.4 及之后版本上提供的,而对于 11g 版本,需要按照  Note 1389592.1  里提供的步骤来操作。本文提到的步骤适用于 Oracle 12c,12.1 或者更高版本,可以参照 Requirements and Recommendations 部分。另外,附件 rman_xttconvert_ver2.zip 中包含了一些在实施跨平台增量备份及 XTTS 时用到的支持脚本。

主要的支持脚本包括下面的几个:

·  Perl 脚本 xttdriver.pl 是用来运行 XTTS 和跨平台增量备份的主要步骤的。

·  参数文件 xtt.properties 保存了一些站点相关的配置。

前提条件

在开始操作前,必须要先满足下面的前提条件:

·  必须要考虑传输表空间的限制及注意事项,它们定义在下面的在线文档中:

Oracle Database Administrator's Guid

Oracle Database Utilities

·  除了传输表空间的限制及注意事项,还要注意下面的条件:

当前版本不支持Windows作为源库或目标库。

源库的 COMPATIBLE 参数必须设置为 12.1.0 或更高。

源库的 COMPATIBLE 参数值不能大于目标库的 COMPATIBLE 参数值。

源库必须处于 ARCHIVELOG 模式。

源库的 RMAN 配置里 DEVICE TYPE DISK 不能设置为 COMPRESSED。

源库的备份类型必须是BACKUP TYPE TO BACKUPSET, 而不能是 BACKUP TYPE TO COPY.

目标库的 COMPATIBLE 参数必须设置为 12.1.0 或更高。

要迁移的表空间的数据文件必须都是 online 或者不包含 offline 的数据文件。表空间必须是 READ WRITE 模式。READ ONLY 的表空间可以用普通的 XTTS 方式迁移,没有必要使用跨平台增量备份的技术来迁移 READ ONLY 的表空间。

虽然首选目标系统是Linux(64位Oracle Linux或RedHat Linux的认证版本),此过程可与其他基于Unix的操作系统一起使用。 但是,任何非Linux操作系统必须在目标库和源库中都运行12.1.0.1或以上版本。

源库的oracle版本必须低于或等于目标库。因此, 这个过程可以被用来作为一个升级的方法。对于transportable tablespace的限制也同样适用.

·  这些步骤都需要使用 OSDBA 组中的 oracle 用户来执行。需要使用 OS 验证的方式来连接源库和目标库。

·  这个方法不支持在备库和snapshot备库

·  这个方法不支持multitenant databases。 但是新的V4的版本支持, 请参考文档:  Note 2471245.1

整个database的迁移

如果跨平台的增量备份可以用来减少数据库迁移的downtime, 那么这个文章的步骤可以和文档: .中的XTTS部分结合使用。

 

问题分析

Debug 模式可以打印更多的屏幕输出,并且开启 RMAN 的 debug 模式。要启用 debug 模式,或者以 -d 参数运行 xttdriver.pl 或者在运行 xttdriver.pl 前设置环境变量 XTTDEBUG=1。这个参数接受3种级别,-d[1/2/3]级别3会显示最多的信息。

已知问题

1.  如果前滚阶段(xttdriver.pl -r)失败了并显示下面的错误,需要检查 RMAN DEVICE TYPE DISK 是否被配置成了 COMPRESSED:

Entering RollForward
After applySetDataFile
Done: applyDataFileTo
Done: RestoreSetPiecehttps://mosemp.us.oracle.com/epmos/faces/secure/awiz/AwizHome.jspx?_afrLoop=345416299618939&docid=2102859.1&_afrWindowMode=0&_adf.ctrl-state=14b3jfishi_464
DECLARE
*
ERROR at line 1:
ORA-19624: operation failed, retry possible
ORA-19870: error while restoring backup piece
/dbfs_direct/FS1/xtts/incrementals/xtts_incr_backup
ORA-19608: /dbfs_direct/FS1/xtts/incrementals/xtts_incr_backup is not a backup
piece
ORA-19837: invalid blocksize 0 in backup piece header
ORA-06512: at "SYS.X$DBMS_BACKUP_RESTORE", line 2338
ORA-06512: at line 40

    2. 如果在源和目标中使用ASM,请参阅XTTS在源和目标使用ASM时目标上创建的别名(<注释2351123.1>)

    3. 无论是源还是目标,GLOGIN.sql的存在都可能导致语法错误。

>另请参阅针对其他已知问题的跨平台可传输表空间XTTS <文档2311677.1>的已知问题。

注意:我们建议此过程在主数据库上运行,以读写模式打开。但是,如果是强制性的,则可以对具有版本3 的备用数据库执行该过程:

1. xtt.properties 文件中,取消注释:

allowstandby = 1

2. 所有步骤保持不变,除了在第四阶段 - Transport 阶段。 datapump 必须在主数据库执行,因为它不能针对只读数据库(备用数据库)。

3. 以下是第 4 阶段 - Transport 阶段所需的更改:

a. 步骤 4.1 ,使源表空间在 PRIMARY 数据库中只读

SQL> alter tablespace test1 read only;
SQL> alter system archive log current;

注意:确保待机已收到redo 。如果数据文件不同,则表空间插件将返回如下错误:
ORA-39123: Data Pump transportable tablespace job aborted
ORA-19722: datafile /u01/oradata/convert/TEST1_5.xtf is an incorrect version

b. 步骤 4.2 ,创建最终增量备份,传输,转换并应用到目标数据文件

< 与此 note 相同的步骤 >

c 。步骤 4.3 ,在目标数据库中创建一个连接到 PRIMARY 的数据库链接

SQL> 创建公共数据库链接 primarylink 连接到由管理器标识的系统使用 '< 连接字符串 >';

测试链接:

SQL>select db_name, database_role from v$database@primarylink;

该角色应该返回PRIMARY

d 。步骤 4.4 ,将对象元数据导入目标数据库:

d1 。执行:
[oracle@dest]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -e

d2 。修改在 xttplugin.txt 中创建的命令以包含链接到主要。即,在我的测试中,我使用的命令
是:

impdp directory = DATA_PUMP_DIR logfile = tts_imp.log \
network_link = primarylink transport_full_check = no \
transport_tablespaces = TEST1 \
transport_datafiles = '/ U01 / ORADATA / 转换 / TEST1_5.xtf'

注意:在我的测试中,在“'READ ONLY WITH APPLY” 模式下。在备用备份之间的每个增量备份之间,数据在主要数据中更改。待机状态已被检查,以确保已从主库接收到 redo

[ 这部分客户不可见。 ]

 


使用跨平台增量备份及传输表空间技术来减少停机时间

XTTS 和跨平台传输表空间被分成下面的阶段:

·  阶段 1 - 初始设置阶段

·  阶段 2 - 准备阶段

·  阶段 3 - 前滚阶段

·  阶段 4 - 最后的增量备份阶段

·  阶段 5 - 传输阶段: 导入元数据

·  阶段 6 - 校验数据

·  阶段 7 - 收尾

文档约定

·  所有的命令都是使用的bash的语法

·  如果命令前面的提示符是  [oracle@source]$  代表是在源系统上以 oracle 用户运行的。

·  如果命令前面的提示符是  [oracle@dest]$  代表是在目标系统上以 oracle 用户运行的。

阶段1 – 初始设置

为了跨平台增量备份,需要执行下面的步骤来配置环境:

步骤1.1 – 安装目标数据库软件并且创建目标数据库

在目标系统上安装 Oracle 数据库软件,它一定需要是 Oracle 12c 版本的。

在目标系统上确定(或者创建)一个数据库用来导入表空间,并且创建传输表空间需要的用户。

根据普通的 TTS 的要求,需要确保传输表空间使用的用户已经在目标库上存在。

步骤1.2 – 确定要进行传输的表空间

在源库上确定要进行迁移的表空间。在这个例子里我们会使用表空间 TS1 和 TS2。就像之前提到的那样,传输表空间的前提条件和注意事项都需要仔细验证。

步骤1.3 – 在源库上安装 xttconvert 脚本

在源库上,使用 oracle 软件的用户,下载并解压缩这个文档的附件:支持脚本 rman-xttconvert_2.0.zip:

[oracle@source]$ pwd
/home/oracle/xtt

[oracle@source]$ unzip rman_xttconvert_v3.zip
Archive: rman_xttconvert_v3.zip
inflating: xtt.properties
inflating: xttcnvrtbkupdest.sql
inflating: xttdbopen.sql
inflating: xttdriver.pl
inflating: xttprep.tmpl
extracting: xttstartupnomount.sql

步骤1.4 – 创建必要的目录

1.  在源库:

存放备份的目录,在 xtt.properties 文件中由 backupformat 参数定义。

2.  在目标库:

目标系统中暂存区,在 xtt.properties 文件中由 stageondest 参数定义。

目标系统中数据文件的位置,在 xtt.properties 文件中由 storageondest 参数定义。 

步骤1.5 – 在源库中配置 xtt.properties

按照本系统配置编辑源库  xtt.properties  文件。关于这个文件中参数的更多信息,请参照本文档附录中的“配置文件 xtt.properties中 的参数描述”部分。只要下面的参数是本文档必需的,其它的都是可选项/或者和备份的兼容有关的部分,可以忽略:

· 

·  tablespaces

·  platformid

·  backupformat

·  stageondest

·  storageondest

步骤1.6 – 拷贝 xttconvert 脚本和 xtt.properties 文件到目标系统

使用 oracle 软件的用户复制所有的 xttconvert 脚本和修改后的 xtt.properties 文件到目标系统:

[oracle@source]$ scp -r /home/oracle/xtt oracle@dest:/home/oracle/xtt

步骤1.7 – 这是 TMPDIR 环境变量

在源库和目标库的 shell 环境里设置环境变量 TMPDIR,指向支持脚本所在的目录。使用相同的 shell 来运行 Perl 脚本 xttdriver.pl。如果 TMPDIR 没有设置,那么输出文件会被放在 /tmp 中;并且输入文件也应该放在 /tmp 下。

[oracle@source]$ export TMPDIR=/home/oracle/xtt

[oracle@dest]$ export TMPDIR=/home/oracle/xtt

 

阶段2 – 准备阶段

在准备阶段,源库中要对要迁移的表空间的所有数据文件做备份;备份需要传送到目标系统,并且使用 xttdriver.pl 脚本还原。

NOTE:  For large number of files, using dbms_file_transfer (see phase 2 in  Note 1389592.1  has been found to be the fastest method for transferring datafiles to destination.  This method outlined in the following article also applies to 12c databases:
11G - Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup (Doc ID 1389592.1). 

 

步骤2.1 – 在源库中做备份

在源系统中,使用 oracle 用户及环境变量(ORACLE_HOME 和 ORACLE_SID 环境变量)指向源库,做备份如下:

[oracle@source]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl --backup

步骤2.2 – 把下面的文件发送到目标系统

·  创建在源系统  backupformat  目录中的备份需要传送至目标系统  stageondest  目录 

在下面的例子里,使用 scp 命令来传送从源系统中做的0级备份到目标系统中:

[oracle@source]$ scp /backupformat/* oracle@dest:/stageondest

· 

 从源系统 $TMPDIR 到目标系统的 $TMPDIR,如下:

· 

· 

·  tsbkupmap.txt

·  xttnewdatafiles.txt

步骤2.3 – 在目标库上还原数据文件

在目标系统中,使用 oracle 用户及环境变量(ORACLE_HOME 和 ORACLE_SID 环境变量)指向目标库,还原数据文件如下:

[oracle@dest]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl --restore

 

数据文件会被放在目标系统中由 storageondest 定义的目录中

阶段3 – 前滚阶段

在这个阶段,增量备份会在源库创建,发送到目标系统,转换成目标系统的 endian 格式,应用到目标数据文件拷贝上并进行前滚。这个阶段可能需要运行很多次。每次增量备份都会比上次的增量备份花费更少的时间,并且把目标系统的数据文件拷贝和源库更贴近。在这个阶段,源库上的数据仍然可以被正常访问。

步骤3.1 – 在源库需要传输的表空间上做增量备份

在源系统上,使用 oracle 用户及环境变量(ORACLE_HOME 和 ORACLE_SID 环境变量)指向源库,做增量备份如下:

[oracle@source]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl --bkpinc

 

这个步骤可以对 xtt.properties 中列出的所有表空间生成增量备份。它同时生成的下面的文件也必须和备份文件一起传送到目标系统中: 

·  xttplan.txt

·  tsbkupmap.txt

·  incrbackups.txt

步骤3.2 – 传输增量备份到目标系统

把上个步骤产生的增量备份文件及其它需要的文件传输到目标系统的 stageondest 处。下面列出了源库中 incrbackups.txt 文件中发现的需要拷贝的文件列表:

[oracle@source]$ scp `cat incrbackups.txt` oracle@dest:/stageondest

[oracle@source]$ scp xttplan.txt oracle@dest:/home/oracle/xtt
[oracle@source]$ scp tsbkupmap.txt oracle@dest:/home/oracle/xtt
[oracle@source]$ scp incrbackups.txt oracle@dest:/

 home/oracle/xtt >p>

 

如果源系统的 backupformat 和目标系统的 stageondest 指向了同一个 NFS 存储空间,那么备份文件时不需要再拷贝了,因为它们已经是放在了目标系统的期望目录中。

但是其它的文件(xttplan.txt, tsbkupmap.txt, incrbackups.txt)在每次增量备份中仍然需要拷贝,因为这些文件的内容会在每次执行步骤3.4后发生改变。

步骤3.3 – 应用增量备份到目标系统的数据文件拷贝中

在目标系统中,使用 oracle 用户及环境变量(ORACLE_HOME 和 ORACLE_SID环境变量)指向目标库,前滚数据文件如下:

[oracle@dest]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl --recover

前滚步骤会连接至目标系统并且把增量备份应用到要进行传输的表空间的数据文件中。

 

注意:每次这个步骤在执行中,都需要拷贝 xttplan.txt 和 tsbkupmap.txt,因为它们的内容在每次执行时都会发生改变。

步骤3.4 - 为下次增量备份确定 from_scn

为了下次增量备份,在源系统中,使用oracle用户及环境变量(ORACLE_HOME 和 ORACLE_SID环境变量)指向源库,运行下面的操作来确定新的 FROM_SCN:

[oracle@source]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -s


这可以为下次 FROM_SCN 步骤计算出下个 from_scn,并记录在 xttplan.txt 文件中,然后再下次再做增量备份时就可以使用这个 SCN 了。

步骤 3.5 – 或者重复执行前滚阶段 3 (3.1 – 3.4) 或者直接执行阶段 4 – 最后一次增量备份

到现在为止,我们有两种选择

1.  如果需要把目标数据库的数据和生产库同步更近一些,那么重复前滚阶段,从步骤3.1开始。

2.  如果觉得目标系统已经和源库足够接近了,那么执行传输阶段。

阶段4 – 最后一次增量备份

在这个阶段,源数据会被置为只读,而目标系统会和源库数据通过最后一次增量备份完全同步。之后就可以通过普通的传输表空间技术来从源库上导出对象元数据并导入到目标数据库。数据会一直处于 READ ONLY 模式,直到这个阶段结束。

步骤4.1 – 在源库中把源表空间置为 READ ONLY 模式

源系统 上,使用 oracle 用户及环境变量(ORACLE_HOME 和 ORACLE_SID环境变量)指向源库,把要传输的表空间设为 READ ONLY。

system@source/prod SQL> alter tablespace TS1 read only;

Tablespace altered.

system@source/prod SQL> alter tablespace TS2 read only;

Tablespace altered.

步骤4.2 – 创建最后一次增量备份并发送相关文件到目标系统

最后的增量备份是使用参数"--bkpexport"创建的,之后传送这些文件到目标系统: 


[oracle@source]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl --bkpexport
[oracle@source]$ scp `cat incrbackups.txt` oracle@dest:/stageondest
[oracle@source]$ scp xttplan.txt oracle@dest:home/oracle/xtt
[oracle@source]$ scp tsbkupmap.txt oracle@dest:home/oracle/xtt
[oracle@source]$ scp incrbackups.txt oracle@dest:home/oracle/xtt

步骤4.3 – 应用最后的增量备份到目标系统

最后的增量备份必须使用"--resincrdmp"来应用到目标数据文件

[oracle@dest]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl --resincrdmp 

 这一步会应用最后的增量备份到目标系统数据文件,并且,它会为阶段 5A 产生一个 dump 文件及一个脚本文件 xttplugin.txt。

在源库的对象元数据被导出后,源库的表空间就可以被置为 READ WRITE,如果你希望这样做的话(注意,这可能会导致目标系统和源库数据的不一致)。

阶段5 – 传输阶段:导入对象元数据至目标数据库

在这个阶段,表空间会被插入到目标数据库。这里有两个选项。第一个是使用步骤 4.3 创建的 dump 文件导入;第二个可以在两个数据库间使用 network link 来导入。

步骤5A – 导入已存在的 dump 文件
步骤5A.1 – 创建数据泵目录及赋予权限

数据泵会在特定的 directory 对象来查找/生成 dump 文件。或者拷贝’.dmp’文件到一个已经存在的数据泵 directory 或者创建一个新的 directory 对象来指向’.dmp’文件当前的目录。

SYS@DESTDB> create directory dpump_tts as '/home/oracle/destination/convert';

这个目录的相关权限必须赋予给要执行导入的用户:

SYS@DESTDB> GRANT READ, WRITE ON DIRECTORY dpump_tts TO system;

步骤5A.2 修改并执行 impdp 命令:

要执行传输表空间,你必须修改导入的命令文件 xttplugin.txt (在执行步骤4.3时生成的)并且替换导入参数 DIRECTORY 成当前环境里的值。

下面是一个导入的例子:

[oracle@dest]$ impdp system/ directory=dpump_tts \
> logfile=tts_imp.log \
> dumpfile=impdp3925_641.dmp \
> transport_datafiles='/u01/oradata/DESTDB/o1_mf_ts1_bngv18vm_.dbf','/u01/oradata/DESTDB/o1_mf_ts2_bngv229g_.dbf'

步骤5B – 使用 dblink 导入

如果你想的话,你可以使用 dblink 来导入元数据到目标库。这可以通过下面的步骤来完成。

步骤5B.1 – 为网络导入生成新的 xttplugin.txt

在目标系统中,使用 oracle 用户及环境变量(ORACLE_HOME 和 ORACLE_SID 环境变量)指向目标库,运行下列命令来生成数据泵 TTS 命令:

[oracle@dest]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -e

这会生成一个使用数据泵 network_link 方式导入的示例命令,并正确设置了 TRANSPORT_TABLESPACES 和 TRANSPORT_DATAFILES 参数。另外,一个数据泵导出文件也会被创建。

注意:这个命令会覆盖步骤 5A 中也会需要的 xttplugin.txt 文件。

步骤5B.2 – 在目标系统上创建一个 dblink

连接到目标数据库,创建一个连接至源库的 db link,如:

SQL@dest> create public database link ttslink connect to system identified by using '';

验证这个 dblink 可以正确的连接至源库:

SQL@dest> select name from v$database@ttslink;

步骤5B.3 – 修改并执行 impdp 命令

这并不需要重新生成一份 dump 文件。要执行传输表空间,你必须修改导入的命令文件 xttplugin.txt (在执行步骤 5B.1 时生成的)并且替换导入参数 DIRECTORY,LOGFILE和NETWORK_LINK 成当前环境里的值。

如下是一个使用网络模式运行导入的示例命令:

[oracle@dest]$ impdp directory=DATA_PUMP_DIR logfile=tts_imp.log network_link=ttslink \ 
transport_full_check=no \ 
transport_tablespaces=TS1,TS2 \ 
transport_datafiles='+DATA/prod/datafile/ts1.285.771686721', \ 
'+DATA/prod/datafile/ts2.286.771686723', \ 
'+DATA/prod/datafile/ts2.287.771686743'

 

根据普通的 TTS 的要求,在执行导入前,用户拥有的需要导入的对象必须在目标系统上已存在。

资源:

· 

· 

· 

· 

阶段6 - 校验数据

步骤6.1 – 检查表空间是否发生 corruption

在这个步骤里,传输的数据在目标系统是 READ ONLY 的,可以使用应用程序来验证这些数据是否正确。

另外,可以使用 RMAN 的 VALIDATE TABLESPACE 来检查是否存在逻辑/物理损坏:

RMAN> validate tablespace TS1, TS2 check logical;

步骤6.2 – 在目标系统上把相关的表空间设为 READ WRITE 模式

最后的步骤是在目标系统上把表空间设置为 READ WRITE 模式

system@dest/prod SQL> alter tablespace TS1 read write; 

Tablespace altered. 

system@dest/prod SQL> alter tablespace TS2 read write; 

Tablespace altered.

阶段7 - 收尾

如果迁移过程中创建了一个额外的用来做增量备份转换的临时的实例,那么这个实例就可以被关闭/删除了。

在整个过程中一些不再需要的文件都可以被删除了,这包括:

·  源库中 backupformat 所对应的目录

·  目标系统中 stageondest 所对应的目录

·  源库和目标系统中 $TMPDIR 下对应的目录(注意 /tmp 目录不能被删除)


附录

Perl 脚本 xttdriver.pl 命令选项的描述

 下面的表格列出了只要的支持脚本 xttdriver.pl 的选项。

选项

描述

--backup 

对于选定的表空间所拥有的数据文件做0级备份。这些备份会写入配置文件 xtt.properties 的参数“backupformat”所定义的目录中。这些备份需要拷贝至目标系统中的配置文件的参数“stageondest”所定义的目录中。生成的另两个文件 tsbkupmap.txt 和 xttnewdatafiles.txt 也需要拷贝到目标系统上,TMPDIR 参数所对应的临时目录中。                                                                                                                  

--restore 

还原并转换备份中的数据文件到目标系统中 “stageondest” 对应的目录中,还原后的文件也会放在目标系统中 “stageondest” 对应的目录中。

--bkpincr

会生成一个增量备份,并把备份放在源库的“ backupformat”参数定义的目录中,同时会生成“incrbackups.txt”文件,包含了创建的备份的列表。这个文件和“tsbkupmap.txt”文件一起都必须被拷贝至目标系统的“stageondest”所定义的目录中。

--recover 

这个选项可以对在目标系统上已经创建了的数据文件应用增量备份。

-s 

在源库设置环境变量(ORACLE_HOME and ORACLE_SID) 并多次运行来确认新的 FROM_SCN。这个选项是用来确认下一个 FROM_SCN,并记录到 xttplan.txt 文件中。当下次按照步骤3.1创建增量备份时使用这个 SCN。它会把新的 FROM_SCN 映射到时钟时间来显示下个增量备份距当前有多久。

-- bkpexport

这个选项会生成最后一次增量备份,并创建导入数据文件所需要的 dump 文件。增量备份会被放置在“backupformat”对应的目录,并且可以从“incrbackups.txt”文件得到这个路径。另外也会创建文件“tsbkupmap.txt”, 这些文件都应该被拷贝到目标系统。

-- resincrdmp

这个选项会还原并应用最后一个增量备份,并且会把 dump 文件还原至“TMPDIR”所对应的临时目录中(可以通过命令行指定,也可以设置成环境变量);这个 dump 文件会在导入时使用。

-e 

在目标系统(需设置环境变量 ORACLE_HOME 和 ORACLE_SID 到目标系统)执行一次来生成数据泵的命令。

这个步骤会创建数据泵命令使用的模板,这个模板将使用dblink来导入表空间内对象的元数据。

-d debug

对 xttdriver.pl 脚本和 RMAN 命令开启调试模式。调试模式也可以通过设置环境变量 XTTDEBUG=1 来开启。调试模式支持3种级别: 1,2,3 ,如 xttdriver.pl -d 3。

配置文件 xtt.properties 中的参数描述

下面表中列出的参数是在 12c 上操作必须在 xtt.properties 文件中定义的参数;可能还会有其它为了向下兼容而存在的参数:

参数

描述

例子

tablespaces

以逗号分割的的要传输的表空间的列表。必须写在一行里,写在多行里是不支持的。

tablespaces=TS1,TS2

platformid

源库的平台标识号,可以从 V$DATABASE.PLATFORM_ID 得到。

platformid=2

storageondest

目标系统中的 Directory 对象,定义了目标数据文件创建在哪里。

storageondest=DESTDIR

backupformat

源库上备份放置的地方,这个目录必须有足够的空闲磁盘空间来放置0级备份及所有之后产生的增量备份。这个地址可以是和目标系统共享的 NFS 文件系统,在这种情况下,目标系统的 stageondest 也应该指向相同的 NFS 目录。

backupformat=/stage_source

stageondest

目标系统上用来放置从源库上传输过来的备份的位置。这个位置必须有足够的空闲磁盘空间来放置0级备份及之后所有的增量备份。这个地址可以是 NFS 文件系统。这个地址可以是和目标系统共享的 NFS 文件系统,在这种情况下,目标系统的 stageondest 也应该指向相同的 NFS 目录。对于 NFS 的挂载选项,请参考  Note 359515.1

stageondest=/stage_dest

asm_home

目标系统上 ASM 实例的 ORACLE_HOME,注意: 如果 backupondest 被指定到文件系统目录上(而不是 ASM 的话),那么请注释掉 m_home 和 asm_sid。

asm_home=/u01/app/11.2.0.4/grid

asm_sid

目标系统上运行的 ASM 实例的 ORACLE_SID。

asm_sid=+ASM1

parallel

定义了在源库上做备份时的并行度。

parallel=3

更改历史

 

更改

日期

rman-xttconvert_2.0.zip 被发布 – 加入了对多个源及目标系统目录的支持。

rman-xttconvert_v3.zip 被发布 –

2015-May-20

 

 

参考

NOTE:2311677.1  - Known Issues for Cross Platform Transportable Tablespaces XTTS
NOTE:17866999.8  - Bug 17866999 - ORA-1499 by Analyze Cluster Following RMAN Convert. Cluster Inconsistency may lead to ORA-600 [6711] ORA-600 [6722]. Fix Introduces dbms_repair procedures to repair Index
NOTE:359515.1  - Mount Options for Oracle files for RAC databases and Clusterware when used with NFS on NAS devices
NOTE:1389592.1  - 11G - Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup
NOTE:2471245.1  - V4 Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup 
NOTE:2351123.1  - XTTS Creates Alias on Destination when Source and Destination use ASM
 - CHANGE TRACKING IS NOT USED DURING INCREMENTAL BACKUP FOR READ ONLY TBS
NOTE:413484.1  - Data Guard Support for Heterogeneous Primary and Physical Standbys in Same Data Guard Configuration
NOTE:2013271.1  - 12c How Perform Cross-Platform Database Transport to different Endian Platform with RMAN Backup Sets

 - ORA-1499 FOR CLUSTER FOLLOWING RMAN CONVERT

 


请使用浏览器的分享功能分享到微信等