

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

# 使用 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\$1NLS\$1PARAMETERS 的 SELECT 權限 
+ V\$1TIMEZONE\$1NAMES 的 SELECT 權限 
+ ALL\$1INDEXES 的 SELECT 權限 
+ ALL\$1OBJECTS 的 SELECT 權限 
+ DBA\$1OBJECTS 的 SELECT 權限
+ ALL\$1TABLES 的 SELECT 權限 
+ ALL\$1USERS 的 SELECT 權限 
+ ALL\$1CATALOG 的 SELECT 權限 
+ ALL\$1CONSTRAINTS 的 SELECT 權限 
+ ALL\$1CONS\$1COLUMNS 的 SELECT 權限 
+ ALL\$1TAB\$1COLS 的 SELECT 權限 
+ ALL\$1IND\$1COLUMNS 的 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\$1USERS 的 SELECT 權限
+ DBA\$1TAB\$1PRIVS 的 SELECT 權限
+ DBA\$1OBJECTS 的 SELECT 權限
+ DBA\$1SYNONYMS 的 SELECT 權限
+ DBA\$1SEQUENCES 的 SELECT 權限
+ DBA\$1TYPES 的 SELECT 權限
+ DBA\$1INDEXES 的 SELECT 權限
+ DBA\$1TABLES 的 SELECT 權限
+ DBA\$1TRIGGERS 的 SELECT 權限
+ SYS.DBA\$1REGISTRY 的 SELECT 權限

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

### 預遷移評估
<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 做為目標使用的端點設定。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/dms/latest/userguide/CHAP_Target.Oracle.html)

## 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  使用時間指示：TIMESTAMP  使用時間戳記指示：TIMESTAMP  使用 timestamp\$1with\$1timezone 指示：TIMESTAMP WITH TIMEZONE  使用 timestamp\$1with\$1local\$1timezone 指示：TIMESTAMP WITH LOCAL TIMEZONE 使用 interval\$1year\$1to\$1month 指示：INTERVAL YEAR TO MONTH  使用 interval\$1day\$1to\$1second 指示：INTERVAL DAY TO SECOND  如果長度 > 4000：CLOB 所有其他案例：VARCHAR2 (長度)  | 
|  UINT1  |  NUMBER (3)  | 
|  UINT2  |  NUMBER (5)  | 
|  UINT4  |  NUMBER (10)  | 
|  UINT8  |  NUMBER (19)  | 
|  WSTRING  |  如果長度 > 2000：NCLOB 所有其他案例：NVARCHAR2 (長度)  | 
|  BLOB  |  BLOB 若要搭配 使用此資料類型 AWS DMS，您必須針對特定任務啟用 BLOBs。只有包含主索引鍵的資料表支援 BLOB 資料類型  | 
|  CLOB  |  CLOB 若要搭配 使用此資料類型 AWS DMS，您必須針對特定任務啟用 CLOBs 的使用。在變更資料擷取 (CDC) 期間，只有包含主索引鍵的資料表支援 CLOB 資料類型。 STRING 來源上宣告大小大於 4000 個位元組的 Oracle VARCHAR2 資料類型會透過 AWS DMS CLOB 映射至 Oracle 目標上的 STRING。  | 
|  NCLOB  |  NCLOB 若要搭配 使用此資料類型 AWS DMS，您必須針對特定任務啟用 NCLOBs的使用。在 CDC 期間，只有包含主索引鍵的資料表支援 NCLOB 資料類型。 WSTRING 來源上宣告大小大於 4000 個位元組的 Oracle VARCHAR2 資料類型會透過 AWS DMS NCLOB 映射至 Oracle 目標上的 WSTRING。  | 
| XMLTYPE |  XMLTYPE 目標資料類型僅在 Oracle 到 Oracle 的複寫任務中相關。 當來源資料庫是 Oracle 時，來源資料類型會按「原狀」複寫到 Oracle 目標。例如，來源的 XMLTYPE 資料類型會建立為目標的 XMLTYPE 資料類型。  | 