

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 階段 2 – 向前滾動階段 （來源資料庫保持線上狀態）
<a name="phase2"></a>

您可以視需要重複向前滾動階段多次，以將目的地資料檔案擷取到來源資料庫。

向前滾動階段包含下列步驟。

1. 從來源資料庫建立增量備份。

1. 將備份傳輸至目的地系統。

1. 將備份轉換為目的地系統最終格式。

1. 將備份套用至轉換後的目的地資料檔案副本，以將其向前滾動。

每個連續的增量備份應該花費較少的時間，並將目的地資料檔案複本與來源資料庫相比更為最新。

## 步驟 1：平行進行增量備份
<a name="phase2-step1"></a>

對在來源系統上平行傳輸的資料表空間群組進行增量備份。

此步驟會為 `xtt.properties` 檔案中列出的所有資料表空間= 建立增量備份。

如果您可以在來源系統上啟用 **BLOCK CHANGE TRACKING** 功能，則可以大幅縮短增量備份的時間。

下列命令會在完整備份後自動辨識下一個 SCN。

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

## 步驟 2：將增量備份和 res.txt 檔案傳輸至目的地系統
<a name="phase2-step2"></a>

如果您有足夠的頻寬，您可以使用 縮短傳輸持續時間 Direct Connect。

在 `src_scratch_location`和 之間傳輸增量備份`dest_scratch_location`。在`$TMPDIR`來源系統和目的地系統`$TMPDIR`上的 之間傳輸`res.txt`檔案。

如果您進行多個增量備份，則必須在最後一個增量備份之後複製`res.txt`檔案，才能套用到目的地系統。

```
[source]$ scp $TMPDIR/res.txt oracle@[dest]:/u01/oracle/expimp/out/out<nn>
[source]$ scp <src_scratch_location>/* oracle@[dest]:<dest_scratch_location>
```

## 步驟 3：轉換並套用增量備份
<a name="phase2-step3"></a>

將增量備份轉換為目的地系統最終格式，並將增量備份套用至目的地系統上的目的地資料檔案副本。

在本指南中，假設資料表空間群組是四個。使用每個資料表空間群組的 `--restore`選項執行每個`xttdriver.pl`命令。

在此步驟中，Oracle XTTS 公用程式會重新啟動目標資料庫。若要平行執行命令，您必須在 Perl 指令碼 中使用下列自訂`xttdriver.pl`。

****

1. 註解以下幾行：
   + 第 4867 行：` my $outputstart = `sqlplus -L -s \"/ as sysdba\" \@xttstartupnomount.sql`;`
   + 第 4868 行：` checkError ("Error in executing xttstartupnomount.sql", $outputstart);`
   + 第 4992 行：` my $outputstart = `sqlplus -L -s \"/ as sysdba\" \@xttdbopen.sql`;\`

1. 讓目標資料庫處於 `NOMOUNT` 狀態。

   ```
   sqlplus / as sysdba @xttstartupnomount.sql
   ```

1. 平行執行增量備份的向前滾動。

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

1. 滾動所有增量備份之後，將目標資料庫設定為 `OPEN` 狀態。

   ```
   sqlplus / as sysdba @xttdbopen.sql
   ```

此時，您可以重複第 2 階段，直到來源和目的地資料庫上的 SCNs 夠接近為止。您必須決定要繼續進行階段 3 還是重複階段 2，取決於指定的目標停機時間。

若要減少第 3 階段 （傳輸階段） 期間的停機時間，您可以在將來源資料庫設定為 之前，先匯出和匯入非區段型物件的中繼資料`FUNCTION`，例如 `PROCEDURE`、、 `USER` `PACKAGE`和 `READ ONLY`。

如果來源資料庫中的資料庫物件數量非常大 （數百個），匯出和匯入中繼資料需要幾個小時。在此情況下，請考慮匯出中繼資料。

匯出非區段型物件會在來源系統上的讀取/寫入中執行。然後，您必須先將物件匯入目的地系統，來源系統才會設為 `READ ONLY`。此時，您必須保持資料庫來源物件，例如 `PACKAGE`、 `PROCEDURE`和 `FUNCTION`不變。

這是傾印參數檔案的範例，用於匯出非區段型物件的中繼資料，包括 `USER`、`PACKAGE_SPEC`、`PROCEDURE`、 `PACKAGE_BODY`和 `FUNCTION`。

```
directory=dmpdir
dumpfile=xttsmsc%U.dmp
full=y
filesize=1048576000
logfile=expmsc.log
metrics=y
exclude=TABLE,INDEX,CONSTRAINT,COMMENT,
MATERIALIZED_VIEW,MATERIALIZED_VIEW_LOG,SCHEMA_CALLOUT
```

使用下列命令匯出中繼資料。

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

這是用於匯入非區段物件中繼資料的傾印參數檔案範例。

```
directory=dmpdir
dumpfile=xttsmsc%U.dmp
full=y
logfile=impmsc1.log
EXCLUDE=TABLESPACE, PROCOBJ, RLS_CONTEXT, RLS_GROUP, RLS_POLICY, TABLESPACE_QUOTA
metrics=y
remap_tablespace=
APPS_TS_ARCHIVE:SYSTEM,
APPS_TS_INTERFACE:SYSTEM,
APPS_TS_SEED:SYSTEM,
APPS_TS_SUMMARY:SYSTEM,
…..
```

目前，除了目的地系統`TEMP`上的 `SYSTEM`、`UNDO`、 `SYSAUX`和 之外，沒有資料表空間。因此，您必須重新映射要匯入資料表`SYSTEM`空間的所有物件。

使用下列命令來匯入中繼資料。

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

現在，您可以在目的地資料庫上看到建立的物件。

```
SQL> select object_type, count(*) from dba_objects group by object_type order by count(*) desc;
OBJECT_TYPE                  COUNT(*)
------------------------------- ----------
SYNONYM                          89327
PACKAGE                           55670
PACKAGE BODY                  54447
VIEW                                 41378
JAVA CLASS                        31978
SEQUENCE                         12766
…..
```

除了 `SYSTEM`、`SYSAUX`、 `UNDO`和 之外，沒有資料表空間`TEMP`。`USER` 物件會以 `USERS`做為預設資料表空間建立。在第 3 階段期間，將建立可傳輸的資料表空間，然後使用原始預設資料表空間來變更 USER 物件。