

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

# 使用 Oracle 資料庫做為 的目標 AWS Database Migration Service
<a name="CHAP_Target.Oracle"></a>

您可以使用 從另一個 Oracle 資料庫或其他支援的資料庫之一 AWS DMS，將資料遷移至 Oracle 資料庫目標。您可以使用 Secure Sockets Layer (SSL) 加密您 Oracle 端點與複寫執行個體之間的連線。如需搭配 Oracle 端點使用 SSL 的詳細資訊，請參閱 [搭配 使用 SSL AWS Database Migration Service](CHAP_Security.SSL.md)。 AWS DMS 也支援使用 Oracle 透明資料加密 (TDE) 來加密目標資料庫中的靜態資料，因為 Oracle TDE 不需要加密金鑰或密碼即可寫入資料庫。

如需 AWS DMS 支援做為目標的 Oracle 版本資訊，請參閱 [的目標 AWS DMS](CHAP_Introduction.Targets.md)。

當您使用 Oracle 做為目標時，我們假設資料將遷移到用於目標連線的結構描述或使用者。如果您想要將資料遷移到不同的結構描述，請使用結構描述轉型來執行此作業。例如，假設您的目標端點連線到使用者 `RDSMASTER`，而您想要從使用者 `PERFDATA1` 遷移到 `PERFDATA2`。在這種情況下，請建立如下所示的轉換。

```
{
   "rule-type": "transformation",
   "rule-id": "2",
   "rule-name": "2",
   "rule-action": "rename",
   "rule-target": "schema",
   "object-locator": {
   "schema-name": "PERFDATA1"
},
"value": "PERFDATA2"
}
```

使用 Oracle 做為目標時， 會將所有資料表和索引 AWS DMS 遷移至目標中的預設資料表和索引資料表空間。如果您要將資料表和索引遷移到不同的資料表和索引資料表空間，請使用資料表空間轉換來這樣做。例如，假設您在 `INVENTORY` 結構描述中有一組資料表指派給 Oracle 來源中的一些資料表空間。對於遷移，您想要將所有這些資料表指派給目標中的單一 `INVENTORYSPACE` 資料表空間。在這種情況下，請建立如下所示的轉換。

```
{
   "rule-type": "transformation",
   "rule-id": "3",
   "rule-name": "3",
   "rule-action": "rename",
   "rule-target": "table-tablespace",
   "object-locator": {
      "schema-name": "INVENTORY",
      "table-name": "%",
      "table-tablespace-name": "%"
   },
   "value": "INVENTORYSPACE"
}
```

如需轉型的詳細資訊，請參閱[使用 JSON 指定資料表選擇及轉換](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.md)。

如果 Oracle 同時是來源和目標，您可以設定 Oracle 來源額外連線屬性，來保留現有的資料表或索引資料表空間指派 `enableHomogenousTablespace=true`。如需詳細資訊，請參閱[使用 Oracle 做為 來源時的端點設定 AWS DMS](CHAP_Source.Oracle.md#CHAP_Source.Oracle.ConnectionAttrib)

如需使用 Oracle 資料庫做為 目標的其他詳細資訊 AWS DMS，請參閱下列章節：

**Topics**
+ [Oracle 做為 目標的限制 AWS Database Migration Service](#CHAP_Target.Oracle.Limitations)
+ [使用 Oracle 做為目標所需之使用者帳戶權限](#CHAP_Target.Oracle.Privileges)
+ [將 Oracle 資料庫設定為 的目標 AWS Database Migration Service](#CHAP_Target.Oracle.Configuration)
+ [使用 Oracle 做為 目標時的端點設定 AWS DMS](#CHAP_Target.Oracle.ConnectionAttrib)
+ [Oracle 的目標資料類型](#CHAP_Target.Oracle.DataTypes)

## Oracle 做為 目標的限制 AWS Database Migration Service
<a name="CHAP_Target.Oracle.Limitations"></a>

使用 Oracle 做為資料遷移目標時有以下限制：
+ AWS DMS 不會在目標 Oracle 資料庫上建立結構描述。您必須在目標 Oracle 資料庫中建立您想要的任何結構描述。Oracle 目標中必須已有結構描述名稱。來自來源結構描述的資料表會匯入至使用者或結構描述，其 AWS DMS 會用來連線至目標執行個體。若要遷移多個結構描述，您可以建立多個複寫任務。您也可以將資料遷移至目標上不同的資料架構。若要這樣做，您需要在 AWS DMS 資料表映射上使用結構描述轉換規則。
+ AWS DMS 不支援具有 INDEXTYPE CONTEXT 的資料表`Use direct path full load`選項。若要解決這個問題，您可以使用陣列載入。
+ 使用批次最佳化套用模式，載入到網路變更表會使用直接路徑，這不支援 XML 資料類型。若要解決這個問題，您可以使用交易套用模式。
+ 從來源資料庫遷移的空白字串可能會使用與 Oracle 目標不同的方式處理 (例如轉換成一個空格的字串)。這可能會導致 AWS DMS 驗證報告不相符。
+ 您可以使用下列公式，表示在批次最佳化套用模式下每個資料表支援的欄總數：

  ```
  2 * {{columns_in_original_table}} + {{columns_in_primary_key}} <= 999
  ```

  例如，如果原始資料表有 25 個欄，其中「主索引鍵」由 5 欄組成，則欄的總數為 55。如果資料表超過支援的欄數，則會以逐步模式套用所有變更。
+ AWS DMS 不支援 Oracle Cloud Infrastructure (OCI) 上的自治資料庫。
+ 在交易套用模式中，Oracle 目標可以處理大小上限為 32 KB 的 DML 陳述式。雖然此限制足以處理許多使用案例，但超過 32 KB 的 DML 陳述式將會失敗，並顯示錯誤：「請求「ORA-01460：未實作或不合理的轉換」。若要解決此問題，您必須將`BatchApplyEnabled`任務設定設定為 來啟用批次套用功能`true`。批次套用會減少整體陳述式大小，讓您繞過 32 KB 的限制。如需詳細資訊，請參閱[目標中繼資料任務設定](CHAP_Tasks.CustomizingTasks.TaskSettings.TargetMetadata.md)。
+ AWS DMS 由於 LOB 資料的特殊處理要求，LOB 資料表的直接路徑完全載入可能會失敗，並出現錯誤 ORA-39777。此錯誤會在直接路徑載入程序期間發生，並可能會中斷涉及 LOB 資料欄的遷移任務。若要解決此問題，請停用目標端點上的 `useDirectPathFullLoad`設定，然後重試載入操作。

## 使用 Oracle 做為目標所需之使用者帳戶權限
<a name="CHAP_Target.Oracle.Privileges"></a>

若要在 AWS Database Migration Service 任務中使用 Oracle 目標，請在 Oracle 資料庫中授予下列權限。請將這些權限授予 Oracle 資料庫定義中指定給 AWS DMS的使用者帳戶。
+ SELECT ANY TRANSACTION 
+ V$NLS\_PARAMETERS 的 SELECT 權限 
+ V$TIMEZONE\_NAMES 的 SELECT 權限 
+ ALL\_INDEXES 的 SELECT 權限 
+ ALL\_OBJECTS 的 SELECT 權限 
+ DBA\_OBJECTS 的 SELECT 權限
+ ALL\_TABLES 的 SELECT 權限 
+ ALL\_USERS 的 SELECT 權限 
+ ALL\_CATALOG 的 SELECT 權限 
+ ALL\_CONSTRAINTS 的 SELECT 權限 
+ ALL\_CONS\_COLUMNS 的 SELECT 權限 
+ ALL\_TAB\_COLS 的 SELECT 權限 
+ ALL\_IND\_COLUMNS 的 SELECT 權限 
+ DROP ANY TABLE 
+ SELECT ANY TABLE
+ INSERT ANY TABLE 
+ UPDATE ANY TABLE
+ CREATE ANY VIEW
+ DROP ANY VIEW
+ CREATE ANY PROCEDURE
+ ALTER ANY PROCEDURE
+ DROP ANY PROCEDURE
+ CREATE ANY SEQUENCE
+ ALTER ANY SEQUENCE
+ DROP ANY SEQUENCE 
+ DELETE ANY TABLE

針對以下要求，請授予這些額外的權限：
+ 若要使用特定的資料表清單，請在任何複寫資料表中授予 SELECT 權限，也可以授予 ALTER 權限。
+ 若要讓使用者在預設資料表空間中建立資料表，請授予 GRANT UNLIMITED TABLESPACE 權限。
+ 針對登入，授予 CREATE SESSION 權限。
+ 如果您使用的是直接路徑 (這是完全載入的預設路徑)，則為 `GRANT LOCK ANY TABLE to {{dms_user}};`。
+ 如果使用「DROP 和 CREATE」資料表準備模式時的結構描述不同，則為 `GRANT CREATE ANY INDEX to {{dms_user}};`.
+ 對於某些完全載入案例，您可以選擇「DROP 與 CREATE 資料表」或「先截斷再載入」選項，其中目標資料表結構描述與 DMS 使用者不同。在此情況下，授予 DROP ANY TABLE。
+ 若要在目標資料表結構描述與 DMS 使用者結構描述不同時將變更儲存在變更資料表或稽核資料表中，請授予 CREATE ANY TABLE 和 CREATE ANY INDEX。
+ 若要使用驗證功能驗證 LOB 資料欄，請將 上的 EXECUTE 權限授予 `SYS.DBMS_CRYPTO` DMS 使用者。

### 目標資料庫 AWS Database Migration Service 上 所需的讀取權限
<a name="CHAP_Target.Oracle.Privileges.Read"></a>

必須授予 AWS DMS 使用者帳戶下列 DBA 資料表的讀取許可：
+ DBA\_USERS 的 SELECT 權限
+ DBA\_TAB\_PRIVS 的 SELECT 權限
+ DBA\_OBJECTS 的 SELECT 權限
+ DBA\_SYNONYMS 的 SELECT 權限
+ DBA\_SEQUENCES 的 SELECT 權限
+ DBA\_TYPES 的 SELECT 權限
+ DBA\_INDEXES 的 SELECT 權限
+ DBA\_TABLES 的 SELECT 權限
+ DBA\_TRIGGERS 的 SELECT 權限
+ SYS.DBA\_REGISTRY 的 SELECT 權限

如果 V$xxx 無法獲授予任何所需的權限，請將這些權限授予 V\_$xxx。

### 預遷移評估
<a name="CHAP_Target.Oracle.Privileges.Premigration"></a>

若要使用 中列出的預遷移評估[Oracle 評估](CHAP_Tasks.AssessmentReport.Oracle.md)搭配 Oracle 做為目標，您必須將下列許可新增至 Oracle 資料庫目標端點中指定的使用者帳戶：

```
GRANT SELECT ON V_$INSTANCE TO dms_user;
GRANT EXECUTE ON SYS.DBMS_XMLGEN TO dms_user;
```

## 將 Oracle 資料庫設定為 的目標 AWS Database Migration Service
<a name="CHAP_Target.Oracle.Configuration"></a>

使用 Oracle 資料庫做為資料遷移目標之前，您必須提供 Oracle 使用者帳戶 AWS DMS。此使用者帳戶必須擁有 Oracle 資料庫的讀取/寫入權限，如[使用 Oracle 做為目標所需之使用者帳戶權限](#CHAP_Target.Oracle.Privileges)一節所指定。

## 使用 Oracle 做為 目標時的端點設定 AWS DMS
<a name="CHAP_Target.Oracle.ConnectionAttrib"></a>

您可以使用端點設定來設定您的 Oracle 目標資料庫，類似於使用額外的連線屬性。當您使用 AWS DMS 主控台或使用 中的 `create-endpoint`命令搭配 `--oracle-settings '{"{{EndpointSetting"}}: {{"value"}}, {{...}}}'` JSON 語法來建立目標端點時[AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html)，您可以指定設定。

下列資料表顯示您可搭配 Oracle 做為目標使用的端點設定。


| 名稱 | 描述 | 
| --- | --- | 
| `UseDirectPathFullLoad` | 設定為 時`Y`， AWS DMS 會使用直接路徑完全載入。指定此值，以啟用 Oracle Call Interface (OCI) 中的直接路徑通訊協定。此 OCI 通訊協定可在完整載入期間大量載入 Oracle 目標資料表。<br />預設值：`true`<br />有效值：`true`/`false` <br />範例：`--oracle-settings '{"UseDirectPathFullLoad": false}'` | 
| `DirectPathParallelLoad` | 設為 `true` 時，此屬性會在 `UseDirectPathFullLoad` 設為 `Y` 時，指定平行載入。此屬性也只適用於您使用 AWS DMS 平行載入功能時。如需詳細資訊，請參閱[資料表和集合設定規則與操作](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md)中的 `parallel-load` 操作。<br />指定此平行載入設定的限制是，目標資料表不可有任何條件約束或索引。如需此限制的詳細資訊，請參閱[平行直接路徑載入後啟用條件約束](https://docs.oracle.com/en/database/oracle/oracle-database/19/sutil/oracle-sql-loader-conventional-and-direct-loads.html#GUID-E2A3A8A3-78FF-45B6-90C0-14211621E77C)。如果啟用條件約束或索引，將此屬性設為 `true` 不會產生任何作用。<br />預設值：`false`<br />有效值：`true`/`false` <br />範例：`--oracle-settings '{"DirectPathParallelLoad": true}'` | 
| `DirectPathNoLog` | 設為 `true` 時，此屬性有助於藉由直接寫入資料表，而不是將線索寫入資料表日誌，以提高 Oracle 目標資料庫的遞交率。如需詳細資訊，請參閱[直接載入 INSERT](https://docs.oracle.com/cd/A87860_01/doc/server.817/a76965/c21dlins.htm)。此屬性也僅適用於將 `UseDirectPathFullLoad` 設為 `Y` 時。<br />預設值：`false`<br />有效值：`true`/`false` <br />範例：`--oracle-settings '{"DirectPathNoLog": true}'` | 
| `CharLengthSemantics` | 指定字元資料行的長度是以位元組或字元為單位。若要指示字元資料行長度以字元為單位，請將此屬性設為 `CHAR`。否則，字元資料行長是以位元組為單位。<br />預設值：未設定為 `CHAR`<br />有效值：`CHAR`<br />範例：`--oracle-settings '{"CharLengthSemantics": "CHAR"}'` | 
| `AlwaysReplaceEmptyString` | AWS DMS 新增額外的空間，以在遷移至 Oracle 目標時複寫空字串。一般來說，Oracle 沒有空字符串的符號。當您在 varchar2 上插入一個空字符串時，空字符串將載入為 NULL。如果要在 Oracle 上將資料作為 NULL 插入，請將此屬性設為 FALSE。<br />預設值：`true`<br />有效值：`true`/`false`<br />範例：`--oracle-settings '{"AlwaysReplaceEmptyString": false}'` | 

## Oracle 的目標資料類型
<a name="CHAP_Target.Oracle.DataTypes"></a>

搭配 使用的目標 Oracle 資料庫 AWS DMS 支援大多數 Oracle 資料類型。下表顯示使用 時支援的 Oracle 目標資料類型， AWS DMS 以及來自 AWS DMS 資料類型的預設映射。如需如何檢視從來源映射的資料類型詳細資訊，請參閱您要使用的來源一節。


|  AWS DMS 資料類型  |  Oracle 資料類型  | 
| --- | --- | 
| BOOLEAN | NUMBER (1) | 
| BYTES | RAW (長度) | 
| DATE | DATETIME | 
| TIME | TIMESTAMP (0) | 
| DATETIME | TIMESTAMP (擴展) | 
| INT1 | NUMBER (3) | 
| INT2 | NUMBER (5) | 
| INT4 | NUMBER (10) | 
| INT8 | NUMBER (19) | 
| NUMERIC | NUMBER (p,s) | 
| REAL4 | FLOAT | 
| REAL8 | FLOAT | 
| STRING | 使用日期指示：DATE <br />使用時間指示：TIMESTAMP <br />使用時間戳記指示：TIMESTAMP <br />使用 timestamp\_with\_timezone 指示：TIMESTAMP WITH TIMEZONE <br />使用 timestamp\_with\_local\_timezone 指示：TIMESTAMP WITH LOCAL TIMEZONE 使用 interval\_year\_to\_month 指示：INTERVAL YEAR TO MONTH <br />使用 interval\_day\_to\_second 指示：INTERVAL DAY TO SECOND <br />如果長度 > 4000：CLOB<br />所有其他案例：VARCHAR2 (長度) | 
| UINT1 | NUMBER (3) | 
| UINT2 | NUMBER (5) | 
| UINT4 | NUMBER (10) | 
| UINT8 | NUMBER (19) | 
| WSTRING | 如果長度 > 2000：NCLOB<br />所有其他案例：NVARCHAR2 (長度) | 
| BLOB | BLOB<br />若要搭配 使用此資料類型 AWS DMS，您必須針對特定任務啟用 BLOBs。只有包含主索引鍵的資料表支援 BLOB 資料類型 | 
| CLOB | CLOB<br />若要搭配 使用此資料類型 AWS DMS，您必須針對特定任務啟用 CLOBs 的使用。在變更資料擷取 (CDC) 期間，只有包含主索引鍵的資料表支援 CLOB 資料類型。<br />STRING<br />來源上宣告大小大於 4000 個位元組的 Oracle VARCHAR2 資料類型會透過 AWS DMS CLOB 映射至 Oracle 目標上的 STRING。 | 
| NCLOB | NCLOB<br />若要搭配 使用此資料類型 AWS DMS，您必須針對特定任務啟用 NCLOBs的使用。在 CDC 期間，只有包含主索引鍵的資料表支援 NCLOB 資料類型。<br />WSTRING<br />來源上宣告大小大於 4000 個位元組的 Oracle VARCHAR2 資料類型會透過 AWS DMS NCLOB 映射至 Oracle 目標上的 WSTRING。 | 
| XMLTYPE | XMLTYPE 目標資料類型僅在 Oracle 到 Oracle 的複寫任務中相關。<br />當來源資料庫是 Oracle 時，來源資料類型會按「原狀」複寫到 Oracle 目標。例如，來源的 XMLTYPE 資料類型會建立為目標的 XMLTYPE 資料類型。 | 