

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 阶段 3-传输阶段（源数据库为只读）
<a name="phase3"></a>

在此阶段，源系统变为只读。通过应用最终的增量备份，可以使目标系统上的数据文件与源系统保持一致。然后，从源系统导出对象元数据并将其导入目标系统。

## 步骤 1：将源数据库中的表空间设为只读
<a name="phase3-step1"></a>

使用 SYSDBA，在源系统`READ ONLY`上传输所有表空间。

为了减少停机时间，您可以同时运行以下两个步骤。

## 步骤 2：创建最终的增量备份
<a name="phase3-step2"></a>

在源系统上，创建正在传输的表空间的最终增量备份。

```
cd /u01/oracle/expimp/xtt<nn>
export TMPDIR=/u01/oracle/expimp/out/out<nn>
$ORACLE_HOME/perl/bin/perl xttdriver.pl --backup --debug 3
```

此步骤会返回错误，例如 “ORA-20001：TABLESPACE (S) 为只读”；该错误是预料之中的，您可以放心地将其忽略。

## 步骤 3：导出元数据
<a name="phase3-step3"></a>

从源数据库导出可传输表空间的元数据。

这是用于导出可传输表空间元数据的参数文件示例。

```
directory=dmpdir
metrics=y
dumpfile=xttsmeta%U.dmp
filesize=1048576000
logfile=expxtts.log
transport_tablespaces=
APPS_TS_ARCHIVE,
APPS_TS_INTERFACE,
APPS_TS_MEDIA,
APPS_TS_NOLOGGING,
….
exclude=table_statistics,index_statistics
```

此外，如果源系统有许多表和索引，则可以在导出过程中排除它们的统计信息，从而节省导出时间。导入可传输表空间后，将统计数据导入目标系统。

在运行之前`expdp`，请创建一个数据库目录，用于存储源系统上的转储文件。

```
SQL> create directory dmpdir as <location>;
expdp system/<system password> parfile=<parameter file>
```

以下两个步骤是使用 RMAN 增量备份实现跨平台可传输表空间的最后步骤。这些步骤必须按顺序执行。

## 步骤 4：传输文件并应用最终的增量备份
<a name="phase3-step4"></a>

将最终的增量备份和导出转储文件传输到目标系统，进行转换并应用最终的增量备份。

用于 Direct Connect 将最终的增量备份副本和 res.txt 文件传输到目标。您可以使用 VPN 连接，但如果有足够的带宽， Direct Connect 则使用可以显著减少停机时间。

要恢复最终的增量备份，请在目标系统上使用`--restore`选项对每个表空间组运行以下命令。

```
cd /u01/oracle/expimp/xtt<nn>
export TMPDIR=/u01/oracle/expimp/out/out<nn>
$ORACLE_HOME/perl/bin/perl xttdriver.pl --restore --debug 3
```

## 步骤 5：导入对象元数据
<a name="phase3-step5"></a>

使用 Oracle 数据泵将对象元数据导入目标系统。运行以下命令以获取目标系统上`transport_datafiles=`参数的数据文件列表。

```
cd /u01/oracle/expimp/xtt<nn>
export TMPDIR=/u01/oracle/expimp/out/out<nn>
$ORACLE_HOME/perl/bin/perl xttdriver.pl -e
```

每当你运行前面的命令时，你都会得到带有`transport_datafiles=`参数的`xttplugin.txt`文件。将所有`xttplugin.txt`文件合并为`transport_datafiles=`一行，然后将数据文件列表放入导入元数据的参数文件参数中。`transport_datafiles`

以下代码片段显示了用于在目标系统上导入可传输表空间的参数文件。

```
directory=dmpdir
metrics=y
dumpfile=xttsmeta%U.dmp
logfile=impxtts.log
exclude=TYPE
transport_datafiles= '+EBSDATA/APPS_TS_TX_DATA_2.dbf','+EBSDATA/APPS_TS_TX_DATA_11.dbf','+EBSDATA/APPS_TS_TX_DATA_22.dbf','+EBSDATA/APPS_TS_TX_DATA_183.dbf','+EBSDATA/APPS_TS_TX_DATA_204.dbf','+EBSDATA/APPS_TS_TX_DATA_219.dbf','+EBSDATA/APPS_TS_TX_DATA_227.dbf'…..
```

在运行之前`impdp`，创建一个指向导出转储文件位置的数据库目录。

```
SQL> create directory dmpdir as <location>;
impdp system/<system password> parfile=<parameter file>
```