

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

# 資料遷移的來源
<a name="CHAP_Source"></a>

AWS Database Migration Service (AWS DMS) 可以使用許多最熱門的資料引擎做為資料複寫的來源。資料庫來源可以是在 Amazon EC2 執行個體或內部部署資料庫上執行的自我管理引擎。或者，它可以是 AWS 服務上的資料來源，例如 Amazon RDS 或 Amazon S3。

如需有效來源的完整清單，請參閱 [AWS DMS的來源](CHAP_Introduction.Sources.md#CHAP_Introduction.Sources.title)。

**Topics**
+ [使用 Oracle 資料庫做為 的來源 AWS DMS](CHAP_Source.Oracle.md)
+ [使用 Microsoft SQL Server 資料庫做為 的來源 AWS DMS](CHAP_Source.SQLServer.md)
+ [使用 Microsoft Azure SQL 資料庫做為 的來源 AWS DMS](CHAP_Source.AzureSQL.md)
+ [使用 Microsoft Azure SQL 受管執行個體做為 的來源 AWS DMS](CHAP_Source.AzureMgd.md)
+ [使用 Microsoft Azure Database for PostgreSQL 彈性伺服器做為 的來源 AWS DMS](CHAP_Source.AzureDBPostgreSQL.md)
+ [使用 Microsoft Azure Database for MySQL 彈性伺服器做為 的來源 AWS DMS](CHAP_Source.AzureDBMySQL.md)
+ [使用 OCI MySQL Heatwave 做為 的來源 AWS DMS](CHAP_Source.heatwave.md)
+ [使用 Google Cloud for MySQL 做為 的來源 AWS DMS](CHAP_Source.GC.md)
+ [使用 Google Cloud for PostgreSQL 做為 的來源 AWS DMS](CHAP_Source.GCPostgres.md)
+ [使用 PostgreSQL 資料庫做為 AWS DMS 來源](CHAP_Source.PostgreSQL.md)
+ [使用 MySQL 相容資料庫做為 的來源 AWS DMS](CHAP_Source.MySQL.md)
+ [使用 SAP ASE 資料庫做為 的來源 AWS DMS](CHAP_Source.SAP.md)
+ [使用 MongoDB 做為 的來源 AWS DMS](CHAP_Source.MongoDB.md)
+ [使用 Amazon DocumentDB （與 MongoDB 相容） 做為 的來源 AWS DMS](CHAP_Source.DocumentDB.md)
+ [使用 Amazon S3 做為 的來源 AWS DMS](CHAP_Source.S3.md)
+ [使用適用於 Linux、Unix、Windows 和 Amazon RDS 資料庫 (Db2 LUW) 的 IBM Db2 作為 的來源 AWS DMS](CHAP_Source.DB2.md)
+ [針對 z/OS 資料庫使用 IBM Db2 做為 的來源 AWS DMS](CHAP_Source.DB2zOS.md)

# 使用 Oracle 資料庫做為 的來源 AWS DMS
<a name="CHAP_Source.Oracle"></a>

您可以使用 從一或多個 Oracle 資料庫遷移資料 AWS DMS。使用 Oracle 資料庫作為來源，您可以將資料遷移到 AWS DMS支援的任何目標。

AWS DMS 支援下列 Oracle 資料庫版本：
+ Oracle Enterprise Edition
+ Oracle Standard Edition
+ Oracle Enterprise 版
+ Oracle Personal 版

如需 AWS DMS 支援做為來源的 Oracle 資料庫版本的資訊，請參閱 [的來源 AWS DMS](CHAP_Introduction.Sources.md)。

您可以使用 Secure Sockets Layer (SSL) 加密 Oracle 端點與複寫執行個體之間的連線。如需使用 SSL 搭配 Oracle 端點的詳細資訊，請參閱[Oracle 端點的 SSL 支援](#CHAP_Security.SSL.Oracle)。

AWS DMS 支援使用 Oracle 透明資料加密 (TDE) 來加密來源資料庫中的靜態資料。如需如何將 Oracle TDE 與 Oracle 來源端點搭配使用的詳細資訊，請參閱[支援使用 Oracle 做為 來源的加密方法 AWS DMS](#CHAP_Source.Oracle.Encryption)。

AWS 支援搭配 Oracle 端點 （和所有其他端點類型） 使用 TLS 1.2 版和更新版本，並建議使用 TLS 1.3 版或更新版本。

請依照下列步驟，將 Oracle 資料庫設定為 AWS DMS 來源端點：

1. 建立具有適當許可的 Oracle 使用者 AWS DMS ，以存取您的 Oracle 來源資料庫。

1. 建立符合您選擇之 Oracle 資料庫組態的 Oracle 來源端點。若要建立僅完全載入的任務，則不需要任何進一步的組態。

1. 若要建立處理變更資料擷取的任務 （僅限 CDC 或完全載入和 CDC 任務），請選擇 Oracle LogMiner 或 AWS DMS Binary Reader 來擷取資料變更。選擇 LogMiner 或 Binary Reader 會決定一些後續許可和組態選項。如要比較 LogMiner 和 Binary Reader，請參閱下一節。

**注意**  
如需完全載入任務、僅限 CDC 任務以及完全載入和 CDC 任務的詳細資訊，請參閱[建立任務](CHAP_Tasks.Creating.md)

如需使用 Oracle 來源資料庫和 的其他詳細資訊 AWS DMS，請參閱下列各節。

**Topics**
+ [使用 Oracle LogMiner 或 AWS DMS Binary Reader for CDC](#CHAP_Source.Oracle.CDC)
+ [為 設定自我管理或受管 Oracle AWS來源資料庫的工作流程 AWS DMS設定 Oracle 來源資料庫](#CHAP_Source.Oracle.Workflows)
+ [使用自我管理的 Oracle 資料庫做為 的來源 AWS DMS](#CHAP_Source.Oracle.Self-Managed)
+ [使用 受 AWS管 Oracle 資料庫做為 的來源 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed)
+ [使用 Oracle 做為 來源的限制 AWS DMS](#CHAP_Source.Oracle.Limitations)
+ [Oracle 端點的 SSL 支援](#CHAP_Security.SSL.Oracle)
+ [支援使用 Oracle 做為 來源的加密方法 AWS DMS](#CHAP_Source.Oracle.Encryption)
+ [支援使用 Oracle 做為 來源的壓縮方法 AWS DMS](#CHAP_Source.Oracle.Compression)
+ [使用 Oracle 作為 來源複寫巢狀資料表 AWS DMS](#CHAP_Source.Oracle.NestedTables)
+ [使用 Oracle 做為 來源時，在 Oracle ASM 上存放 REDO AWS DMS](#CHAP_Source.Oracle.REDOonASM)
+ [使用 Oracle 做為 來源時的端點設定 AWS DMS](#CHAP_Source.Oracle.ConnectionAttrib)
+ [Oracle 的來源資料類型](#CHAP_Source.Oracle.DataTypes)

## 使用 Oracle LogMiner 或 AWS DMS Binary Reader for CDC
<a name="CHAP_Source.Oracle.CDC"></a>

在 中 AWS DMS，有兩種方法可在執行 Oracle 的變更資料擷取 (CDC) 作為來源時讀取重做日誌：Oracle LogMiner 和 AWS DMS Binary Reader。LogMiner 是一個 API，用於讀取線上重做日誌和存檔重做日誌檔案。Binary Reader 是一種直接讀取和剖析原始重做日誌檔案 AWS DMS 的方法。這些方法具有下列特徵。


| 功能 | LogMiner | Binary Reader | 
| --- | --- | --- | 
| 輕鬆設定 | 是 | 否 | 
| 降低對來源系統 I/O 和 CPU 的影響 | 否 | 是 | 
| 更好的 CDC 效能 | 否 | 是 | 
| 支援 Oracle 資料表叢集 | 是 | 否 | 
| 支援所有類型的 Oracle 混合直欄式壓縮 (HCC) | 是 |  部分 Binary Reader 對於使用 CDC 的任務不支援 QUERY LOW。完全支援所有其他 HCC 類型。  | 
| 僅在 Oracle 12c 中支援 LOB 資料欄 | 否 (Oracle 12c 中的 LogMiner 不提供 LOB 支援。) | 是 | 
| 支援僅影響 LOB 資料欄的 UPDATE 陳述式 | 否 | 是 | 
| 支援 Oracle 透明資料加密 (TDE) |  部分 使用 Oracle LogMiner 時， AWS DMS 不支援 Amazon RDS for Oracle 資料欄層級的 TDE 加密。  |  部分 Binary Reader 僅支援自我管理的 Oracle 資料庫的 TDE。  | 
| 支援所有 Oracle 壓縮方法 | 是 | 否 | 
| 支援 XA 交易 | 否 | 是 | 
| RAC |  是 不建議，因為效能原因和一些內部 DMS 限制。  |  是 強烈建議使用  | 

**注意**  
根據預設， AWS DMS 會使用 Oracle LogMiner for (CDC)。  
AWS DMS 使用 Oracle 來源資料庫時， 支援透明資料加密 (TDE) 方法。如果您指定的 TDE 登入資料不正確， AWS DMS 遷移任務不會失敗，這可能會影響加密資料表的持續複寫。如需指定 TDE 憑證的詳細資訊，請參閱[支援使用 Oracle 做為 來源的加密方法 AWS DMS](#CHAP_Source.Oracle.Encryption)。

搭配 使用 LogMiner 的主要優點 AWS DMS 包括：
+ LogMiner 支援大部分的 Oracle 選項，例如加密選項和壓縮選項。Binary Reader 不支援所有 Oracle 選項，特別是壓縮和大多數加密選項。
+ 如果還原日誌使用 Oracle Automatic Storage Management (ASM) 來管理，LogMiner 提供的組態較為簡單，尤其是相較於 Binary Reader 的直接存取設定而言。
+ LogMiner 支援資料表叢集以供 使用 AWS DMS。Binary Reader 不支援。

搭配 使用 Binary Reader 的主要優點 AWS DMS 如下：
+ 針對有大量變更的遷移，LogMiner 可能對託管 Oracle 來源資料庫電腦的 I/O 或 CPU 有一些影響。Binary Reader 遭受到 I/O 或 CPU 影響的機會較小，因為是直接挖掘日誌，而不是進行多個資料庫查詢。
+ 針對有大量變更的遷移，CDC 效能在使用 Binary Reader 時通常會比使用 Oracle LogMiner 時更好。
+ Binary Reader 在 Oracle 12c 版中支援 LOB 的 CDC。LogMiner 不支援。

一般而言，除非您有以下其中一種情況，否則都是使用 Oracle LogMiner 遷移您的 Oracle 資料庫：
+ 您需要在來源 Oracle 資料庫執行數項遷移任務。
+ 來源 Oracle 資料庫的變更量或還原日誌量很大，或您進行變更且也正在使用 Oracle ASM。

**注意**  
如果您在使用 Oracle LogMiner 和 AWS DMS Binary Reader 之間變更，請務必重新啟動 CDC 任務。

### Oracle 來源資料庫的 CDC 組態
<a name="CHAP_Source.Oracle.CDC.Configuration"></a>

若要讓 Oracle 來源端點連線至資料庫以進行變更資料擷取 (CDC) 任務，您可能需要指定額外的連線屬性。對於完全載入和 CDC 任務或僅限 CDC 任務，情況都是如此。您指定的額外連線屬性取決於您用來存取重做日誌的方法：Oracle LogMiner 或 AWS DMS Binary Reader。

您可在建立來源端點時，指定額外的連線屬性。如果您有多個連線屬性設定，請使用分號 (無額外空格) 分隔這些設定 (如 `oneSetting;thenAnother`)。

AWS DMS 根據預設， 會使用 LogMiner。您不一定要指定額外的連線屬性才能加以使用。

若要使用 Binary Reader 存取還原日誌，請新增以下額外的連線屬性。

```
useLogMinerReader=N;useBfile=Y;
```

針對額外連線屬性使用以下格式，來存取透過 Binary Reader 使用 ASM 的伺服器。

```
useLogMinerReader=N;useBfile=Y;asm_user=asm_username;asm_server=RAC_server_ip_address:port_number/+ASM;
```

將來源端點 `Password` 請求參數同時設定為 Oracle 使用者密碼和 ASM 密碼，並以逗號分隔，如下所示。

```
oracle_user_password,asm_user_password
```

在 Oracle 來源使用 ASM 的情況，您可以使用 Binary Reader 中的高效能選項，進行大規模的交易處理。這些選項包括額外連線屬性，以指定平行執行緒數量 (`parallelASMReadThreads`) 和預先讀取緩衝區 (`readAheadBlocks`) 數量。同時設定這些屬性可以大幅提升 CDC 任務的效能。下列設定可為大部分 ASM 組態提供好結果。

```
useLogMinerReader=N;useBfile=Y;asm_user=asm_username;asm_server=RAC_server_ip_address:port_number/+ASM;
    parallelASMReadThreads=6;readAheadBlocks=150000;
```

如需額外連線屬性所支援的值的詳細資訊，請參閱 [使用 Oracle 做為 來源時的端點設定 AWS DMS](#CHAP_Source.Oracle.ConnectionAttrib)。

此外，對於具有使用 ASM 之 Oracle 來源的 CDC 任務，其效能取決於您選擇的其他設定。這些設定包括您的 AWS DMS 額外連線屬性，以及用來設定 Oracle 來源的 SQL 設定。如需 Oracle 來源使用 ASM 之額外連線屬性的詳細資訊，請參閱[使用 Oracle 做為 來源時的端點設定 AWS DMS](#CHAP_Source.Oracle.ConnectionAttrib)

您還需要選擇適當的 CDC 起點。通常執行此操作時，您會想要識別交易處理點，以擷取從中開始 CDC 的最早開啟交易。否則，CDC 任務可能會遺漏先前開啟的交易。對於 Oracle 來源資料庫，您可以根據 Oracle 系統變更編號 (SCN) 來選擇 CDC 原生起點，以識別此最早的開啟交易。如需詳細資訊，請參閱[從 CDC 起點開始執行複寫](CHAP_Task.CDC.md#CHAP_Task.CDC.StartPoint)。

如需將自我管理的 Oracle 資料庫設為來源之 CDC 的詳細資訊，請參閱 [使用 Oracle LogMiner 存取重做日誌時所需的帳戶權限](#CHAP_Source.Oracle.Self-Managed.LogMinerPrivileges)、[使用 AWS DMS Binary Reader 存取重做日誌時所需的帳戶權限](#CHAP_Source.Oracle.Self-Managed.BinaryReaderPrivileges)和[使用 Binary Reader 搭配 Oracle ASM 時所需的其他帳戶權限](#CHAP_Source.Oracle.Self-Managed.ASMBinaryPrivileges)。

如需將 AWS受管 Oracle 資料庫的 CDC 設定為來源的詳細資訊，請參閱 [設定 CDC 任務以將 Binary Reader 與 的 RDS for Oracle 來源搭配使用 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.CDC)和 [在 中使用 Amazon RDS Oracle Standby （僅供讀取複本） 作為搭配適用於 CDC 的 Binary Reader 的來源 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.StandBy)。

## 為 設定自我管理或受管 Oracle AWS來源資料庫的工作流程 AWS DMS


## 設定 Oracle 來源資料庫
<a name="CHAP_Source.Oracle.Workflows"></a>

若要設定自我管理的來源資料庫執行個體，請根據您執行 CDC 的方式，使用下列工作流程步驟。


| 針對此工作流程步驟 | 如果您使用 LogMiner 執行 CDC，請執行此操作 | 如果您使用 Binary Reader 執行 CDC，請執行此操作 | 
| --- | --- | --- | 
| 授予 Oracle 帳戶權限。 | 請參閱 [的自我管理 Oracle 來源所需的使用者帳戶權限 AWS DMS](#CHAP_Source.Oracle.Self-Managed.Privileges)。 | 請參閱 [的自我管理 Oracle 來源所需的使用者帳戶權限 AWS DMS](#CHAP_Source.Oracle.Self-Managed.Privileges)。 | 
| 使用 CDC 為複寫準備來源資料庫。 | 請參閱 [使用 為 CDC 準備 Oracle 自我管理來源資料庫 AWS DMS](#CHAP_Source.Oracle.Self-Managed.Configuration)。 | 請參閱 [使用 為 CDC 準備 Oracle 自我管理來源資料庫 AWS DMS](#CHAP_Source.Oracle.Self-Managed.Configuration)。 | 
| 授予 CDC 所需的其他 Oracle 使用者權限。 | 請參閱 [使用 Oracle LogMiner 存取重做日誌時所需的帳戶權限](#CHAP_Source.Oracle.Self-Managed.LogMinerPrivileges)。 | 請參閱 [使用 AWS DMS Binary Reader 存取重做日誌時所需的帳戶權限](#CHAP_Source.Oracle.Self-Managed.BinaryReaderPrivileges)。 | 
| 對於具有 ASM 的 Oracle 執行個體，授予存取 ASM 進行 CDC 所需的其他使用者帳戶權限。 | 沒有其他動作。 AWS DMS 支援 Oracle ASM，沒有其他帳戶權限。 | 請參閱 [使用 Binary Reader 搭配 Oracle ASM 時所需的其他帳戶權限](#CHAP_Source.Oracle.Self-Managed.ASMBinaryPrivileges)。 | 
| 如果您尚未這麼做，請將任務設定為使用 LogMiner 或 Binary Reader 進行 CDC。 | 請參閱 [使用 Oracle LogMiner 或 AWS DMS Binary Reader for CDC](#CHAP_Source.Oracle.CDC)。 | 請參閱 [使用 Oracle LogMiner 或 AWS DMS Binary Reader for CDC](#CHAP_Source.Oracle.CDC)。 | 
| 將 Oracle Standby 設為 CDC 的來源。 | AWS DMS 不支援 Oracle Standby 做為來源。 | 請參閱 [在 中使用自我管理的 Oracle 待命做為來源與適用於 CDC 的 Binary Reader AWS DMS](#CHAP_Source.Oracle.Self-Managed.BinaryStandby)。 | 

使用下列工作流程步驟來設定受管 Oracle AWS來源資料庫執行個體。


| 針對此工作流程步驟 | 如果您使用 LogMiner 執行 CDC，請執行此操作 | 如果您使用 Binary Reader 執行 CDC，請執行此操作 | 
| --- | --- | --- | 
| 授予 Oracle 帳戶權限。 | 如需詳細資訊，請參閱[的 受管 Oracle AWS來源上所需的使用者帳戶權限 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.Privileges)。 | 如需詳細資訊，請參閱[的 受管 Oracle AWS來源上所需的使用者帳戶權限 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.Privileges)。 | 
| 使用 CDC 為複寫準備來源資料庫。 | 如需詳細資訊，請參閱[設定 AWS的 受管 Oracle 來源 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.Configuration)。 | 如需詳細資訊，請參閱[設定 AWS的 受管 Oracle 來源 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.Configuration)。 | 
| 授予 CDC 所需的其他 Oracle 使用者權限。 | 不需額外的帳戶權限。 | 如需詳細資訊，請參閱[設定 CDC 任務以將 Binary Reader 與 的 RDS for Oracle 來源搭配使用 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.CDC)。 | 
| 如果您尚未這麼做，請將任務設定為使用 LogMiner 或 Binary Reader 進行 CDC。 | 如需詳細資訊，請參閱[使用 Oracle LogMiner 或 AWS DMS Binary Reader for CDC](#CHAP_Source.Oracle.CDC)。 | 如需詳細資訊，請參閱[使用 Oracle LogMiner 或 AWS DMS Binary Reader for CDC](#CHAP_Source.Oracle.CDC)。 | 
| 將 Oracle Standby 設為 CDC 的來源。 | AWS DMS 不支援 Oracle Standby 做為來源。 | 如需詳細資訊，請參閱[在 中使用 Amazon RDS Oracle Standby （僅供讀取複本） 作為搭配適用於 CDC 的 Binary Reader 的來源 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.StandBy)。 | 

## 使用自我管理的 Oracle 資料庫做為 的來源 AWS DMS
<a name="CHAP_Source.Oracle.Self-Managed"></a>

*自我管理資料庫*是您可以設定和控制的資料庫，可以是本機內部部署資料庫執行個體或 Amazon EC2 上的資料庫。接下來，您可以了解使用自我管理的 Oracle 資料庫時所需的權限和組態 AWS DMS。

### 的自我管理 Oracle 來源所需的使用者帳戶權限 AWS DMS
<a name="CHAP_Source.Oracle.Self-Managed.Privileges"></a>

若要使用 Oracle 資料庫做為 中的來源 AWS DMS，請將下列權限授予 Oracle 端點連線設定中指定的 Oracle 使用者。

**注意**  
授予權限時，請使用物件實際名稱，而不是各物件的同義詞。例如，使用 `V_$OBJECT` (含底線)，而非 `V$OBJECT` (不含底線)。

```
GRANT CREATE SESSION TO dms_user;
GRANT SELECT ANY TRANSACTION TO dms_user;
GRANT SELECT ON V_$ARCHIVED_LOG TO dms_user;
GRANT SELECT ON V_$LOG TO dms_user;
GRANT SELECT ON V_$LOGFILE TO dms_user;
GRANT SELECT ON V_$LOGMNR_LOGS TO dms_user;
GRANT SELECT ON V_$LOGMNR_CONTENTS TO dms_user;
GRANT SELECT ON V_$DATABASE TO dms_user;
GRANT SELECT ON V_$THREAD TO dms_user;
GRANT SELECT ON V_$PARAMETER TO dms_user;
GRANT SELECT ON V_$NLS_PARAMETERS TO dms_user;
GRANT SELECT ON V_$TIMEZONE_NAMES TO dms_user;
GRANT SELECT ON V_$TRANSACTION TO dms_user;
GRANT SELECT ON V_$CONTAINERS TO dms_user;                   
GRANT SELECT ON ALL_INDEXES TO dms_user;
GRANT SELECT ON ALL_OBJECTS TO dms_user;
GRANT SELECT ON ALL_TABLES TO dms_user;
GRANT SELECT ON ALL_USERS TO dms_user;
GRANT SELECT ON ALL_CATALOG TO dms_user;
GRANT SELECT ON ALL_CONSTRAINTS TO dms_user;
GRANT SELECT ON ALL_CONS_COLUMNS TO dms_user;
GRANT SELECT ON ALL_TAB_COLS TO dms_user;
GRANT SELECT ON ALL_IND_COLUMNS TO dms_user;
GRANT SELECT ON ALL_ENCRYPTED_COLUMNS TO dms_user;
GRANT SELECT ON ALL_LOG_GROUPS TO dms_user;
GRANT SELECT ON ALL_TAB_PARTITIONS TO dms_user;
GRANT SELECT ON SYS.DBA_REGISTRY TO dms_user;
GRANT SELECT ON SYS.OBJ$ TO dms_user;
GRANT SELECT ON DBA_TABLESPACES TO dms_user;
GRANT SELECT ON DBA_OBJECTS TO dms_user; -– Required if the Oracle version is earlier than 11.2.0.3.
GRANT SELECT ON SYS.ENC$ TO dms_user; -– Required if transparent data encryption (TDE) is enabled. For more information on using Oracle TDE with AWS DMS, see 支援使用 Oracle 做為 來源的加密方法 AWS DMS.
GRANT SELECT ON GV_$TRANSACTION TO dms_user; -– Required if the source database is Oracle RAC in AWS DMS versions 3.4.6 and higher.
GRANT SELECT ON V_$DATAGUARD_STATS TO dms_user; -- Required if the source database is Oracle Data Guard and Oracle Standby is used in the latest release of DMS version 3.4.6, version 3.4.7, and higher.
GRANT SELECT ON V_$DATABASE_INCARNATION TO dms_user;
```

使用特定的資料表清單時，為每個複寫資料表授予下列其他權限。

```
GRANT SELECT on any-replicated-table to dms_user;
```

授予其他下列權限以使用驗證功能。

```
GRANT EXECUTE ON SYS.DBMS_CRYPTO TO dms_user;
```

如果您使用 Binary Reader 而不是 LogMiner，請授予其他以下權限。

```
GRANT SELECT ON SYS.DBA_DIRECTORIES TO dms_user;
```

授予額外的下列權限以公開檢視。

```
GRANT SELECT on ALL_VIEWS to dms_user;
```

若要公開檢視，您還必須將 `exposeViews=true` 額外的連線屬性新增至來源端點。

使用無伺服器複寫時，授予額外的下列權限。

```
GRANT SELECT on dba_segments to dms_user;
GRANT SELECT on v_$tablespace to dms_user;
GRANT SELECT on dba_tab_subpartitions to dms_user;
GRANT SELECT on dba_extents to dms_user;
```

如需無伺服器複寫的相關資訊，請參閱[使用 AWS DMS Serverless](CHAP_Serverless.md)。

使用 Oracle 特定的預遷移評估時，授予額外的下列權限。

```
GRANT SELECT on gv_$parameter  to dms_user;
GRANT SELECT on v_$instance to dms_user;
GRANT SELECT on v_$version to dms_user;
GRANT SELECT on gv_$ASM_DISKGROUP to dms_user;
GRANT SELECT on gv_$database to dms_user;
GRANT SELECT on dba_db_links to dms_user;
GRANT SELECT on gv_$log_History to dms_user;
GRANT SELECT on gv_$log to dms_user;
GRANT SELECT ON DBA_TYPES TO dms_user;
GRANT SELECT ON DBA_USERS to dms_user;
GRANT SELECT ON DBA_DIRECTORIES to dms_user;
GRANT EXECUTE ON SYS.DBMS_XMLGEN TO dms_user;
```

如需 Oracle 特定預遷移評估的相關資訊，請參閱 [Oracle 評估](CHAP_Tasks.AssessmentReport.Oracle.md)。

#### 處理 Oracle Standby 之開啟交易的先決條件
<a name="CHAP_Source.Oracle.Self-Managed.Privileges.Standby"></a>

使用 3.4.6 版和更新 AWS DMS 版本時，請執行下列步驟來處理 Oracle Standby 的開啟交易。

1. 在主要資料庫 `DMS_USER` 上建立名為 `AWSDMS_DBLINK` 的資料庫連結，將使用資料庫連結來連線至主要資料庫。請注意，資料庫連結是從待命執行個體執行，以查詢主要資料庫上執行的開啟交易。請參閱以下範例。

   ```
   CREATE PUBLIC DATABASE LINK AWSDMS_DBLINK 
      CONNECT TO DMS_USER IDENTIFIED BY DMS_USER_PASSWORD
      USING '(DESCRIPTION=
               (ADDRESS=(PROTOCOL=TCP)(HOST=PRIMARY_HOST_NAME_OR_IP)(PORT=PORT))
               (CONNECT_DATA=(SERVICE_NAME=SID))
             )';
   ```

1. 確認已如下列範例所示，使用 `DMS_USER` 來建立資料庫連結的連線。

   ```
   select 1 from dual@AWSDMS_DBLINK
   ```

### 使用 為 CDC 準備 Oracle 自我管理來源資料庫 AWS DMS
<a name="CHAP_Source.Oracle.Self-Managed.Configuration"></a>

執行下列動作，準備將自我管理的 Oracle 資料庫作為執行 CDC 任務的來源：
+ [驗證 AWS DMS 是否支援來源資料庫版本](#CHAP_Source.Oracle.Self-Managed.Configuration.DbVersion).
+ [確保 ARCHIVELOG 模式處於開啟狀態](#CHAP_Source.Oracle.Self-Managed.Configuration.ArchiveLogMode).
+ [設定補充記錄](#CHAP_Source.Oracle.Self-Managed.Configuration.SupplementalLogging).

#### 驗證 AWS DMS 是否支援來源資料庫版本
<a name="CHAP_Source.Oracle.Self-Managed.Configuration.DbVersion"></a>

執行類似下列範例的查詢，以確認 AWS DMS支援目前版本的 Oracle 來源資料庫。

```
SELECT name, value, description FROM v$parameter WHERE name = 'compatible';
```

此處的 `name`、`value` 和 `description` 是資料庫中某處的欄，資料庫會根據 `name` 值進行查詢。如果此查詢執行時沒有錯誤， AWS DMS 支援資料庫的目前版本，您可以繼續遷移。如果查詢引發錯誤， AWS DMS 不支援目前版本的資料庫。若要繼續遷移，請先將 Oracle 資料庫轉換為 支援的版本 AWS DMS。

#### 確保 ARCHIVELOG 模式處於開啟狀態
<a name="CHAP_Source.Oracle.Self-Managed.Configuration.ArchiveLogMode"></a>

您可以使用兩種不同的模式來執行 Oracle：`ARCHIVELOG` 模式和 `NOARCHIVELOG` 模式。若要執行 CDC 任務，請在 `ARCHIVELOG` 模式中執行此資料庫。若要知道資料庫是否處於 `ARCHIVELOG` 模式，請執行以下查詢。

```
SQL> SELECT log_mode FROM v$database;
```

如果傳回的是 `NOARCHIVELOG` 模式，請按照 Oracle 指示將資料庫設為 `ARCHIVELOG`。

#### 設定補充記錄
<a name="CHAP_Source.Oracle.Self-Managed.Configuration.SupplementalLogging"></a>

若要擷取持續變更， 會要求您在 Oracle AWS DMS 來源資料庫上啟用最少的補充記錄。此外，您還需要啟用資料庫中每個複寫資料表的補充記錄。

根據預設， 會在所有複寫的資料表上 AWS DMS 新增`PRIMARY KEY`補充記錄。若要允許 AWS DMS 新增`PRIMARY KEY`補充記錄，請為每個複寫的資料表授予下列權限。

```
ALTER on any-replicated-table;
```

您可以使用 AWS DMS 額外的連線屬性 來停用新增的預設`PRIMARY KEY`補充記錄`addSupplementalLogging`。如需詳細資訊，請參閱[使用 Oracle 做為 來源時的端點設定 AWS DMS](#CHAP_Source.Oracle.ConnectionAttrib)。

如果您的複寫任務使用不參考主索引鍵資料欄的`WHERE`子句更新資料表，請務必開啟補充記錄。

**若要手動設定補充記錄**

1. 執行下列查詢，以確認已啟用資料庫的補充記錄。

   ```
   SELECT supplemental_log_data_min FROM v$database;
   ```

   如果傳回的結果是 `YES` 或 `IMPLICIT`，則會啟用資料庫的補充記錄。

   如果不是，請執行下列命令，以啟用資料庫的補充記錄。

   ```
   ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
   ```

1. 確定已為每個複寫資料表新增必要的補充記錄。

   考慮下列各項：
   + 如果將 `ALL COLUMNS` 補充記錄新增至資料表，就不需要新增其他記錄。
   + 如果有主索引鍵，請新增主索引鍵的補充記錄。您可以使用格式，在主索引鍵本身上新增補充記錄，或在資料庫主索引鍵資料欄上新增補充記錄，來做到這一點。

     ```
     ALTER TABLE Tablename ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
     ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
     ```
   + 如果沒有主索引鍵且資料表具有單一唯一索引，請將唯一索引的所有資料行新增至補充記錄檔。

     ```
     ALTER TABLE TableName ADD SUPPLEMENTAL LOG GROUP LogGroupName (UniqueIndexColumn1[, UniqueIndexColumn2] ...) ALWAYS;
     ```

     使用 `SUPPLEMENTAL LOG DATA (UNIQUE INDEX) COLUMNS` 不會將唯一索引欄新增至日誌。
   + 如果沒有主索引鍵，且資料表具有多個唯一索引， 會 AWS DMS 選取字母順序遞增清單中的第一個唯一索引。您需要如同前一個項目，在選取索引的資料欄上新增補充記錄。

     使用 `SUPPLEMENTAL LOG DATA (UNIQUE INDEX) COLUMNS` 不會將唯一索引欄新增至日誌。
   + 如果沒有主索引鍵且沒有唯一索引，請在所有資料行上新增補充記錄。

     ```
     ALTER TABLE TableName ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
     ```

     在某些情況下，目標資料表的主索引鍵或唯一的索引，和來源資料表的主索引鍵或唯一的索引不相同。在這些情況下，請手動在來源資料表資料欄中新增補充記錄，以構成目標資料表的主索引鍵或唯一的索引。

     而且，如果您變更目標資料表的主索引鍵，請在目標唯一索引的資料行中新增補充記錄，而不是新增在來源主索引鍵或唯一索引的資料行中。

如果已定義資料表的篩選條件或轉換，您可能需要啟用其他記錄。

考慮下列各項：
+ 如果將 `ALL COLUMNS` 補充記錄新增至資料表，就不需要新增其他記錄。
+ 如果資料表有唯一的索引或主索引鍵，在與篩選條件或轉換有關的每個資料欄中新增補充記錄。但僅限若這些資料欄和主索引鍵或唯一索引的資料欄不相同，才這麼做。
+ 如果轉換只包含一個資料欄，請勿將此資料欄新增至補充記錄群組。例如，對於轉換 `A+B`，請在 `A` 欄和 `B` 欄上新增補充記錄。但是，對於轉換 `substring(A,10)`，請不要在資料行 `A` 上新增補充記錄。
+ 若要在主索引鍵或唯一索引資料欄和其他篩選或轉換的資料欄上設定補充記錄，您可以設定 `USER_LOG_GROUP` 補充記錄。請在主索引鍵或唯一索引資料欄和其他已篩選或轉換的特定資料欄上新增此記錄。

  例如，若要使用資料欄 `NAME`，複寫以主索引鍵 `ID` 命名為 `TEST.LOGGING` 的資料表和篩選條件，您可以執行類似下列命令，以建立日誌群組補充記錄。

  ```
  ALTER TABLE TEST.LOGGING ADD SUPPLEMENTAL LOG GROUP TEST_LOG_GROUP (ID, NAME) ALWAYS;
  ```

### 使用 Oracle LogMiner 存取重做日誌時所需的帳戶權限
<a name="CHAP_Source.Oracle.Self-Managed.LogMinerPrivileges"></a>

若要使用 Oracle LogMiner 存取還原日誌，請將下列權限授予 Oracle 端點連線設定中指定的 Oracle 使用者。

```
GRANT EXECUTE on DBMS_LOGMNR to dms_user;
GRANT SELECT on V_$LOGMNR_LOGS to dms_user;
GRANT SELECT on V_$LOGMNR_CONTENTS to dms_user;
GRANT LOGMINING to dms_user; -– Required only if the Oracle version is 12c or higher.
```

### 使用 AWS DMS Binary Reader 存取重做日誌時所需的帳戶權限
<a name="CHAP_Source.Oracle.Self-Managed.BinaryReaderPrivileges"></a>

若要使用 AWS DMS Binary Reader 存取重做日誌，請將下列權限授予 Oracle 端點連線設定中指定的 Oracle 使用者。

```
GRANT SELECT on v_$transportable_platform to dms_user;   -– Grant this privilege if the redo logs are stored in Oracle Automatic Storage Management (ASM) and AWS DMS accesses them from ASM.
GRANT CREATE ANY DIRECTORY to dms_user;                  -– Grant this privilege to allow AWS DMS to use Oracle BFILE read file access in certain cases. This access is required when the replication instance does not have file-level access to the redo logs and the redo logs are on non-ASM storage.
GRANT EXECUTE on DBMS_FILE_TRANSFER to dms_user;         -– Grant this privilege to copy the redo log files to a temporary folder using the CopyToTempFolder method.
GRANT EXECUTE on DBMS_FILE_GROUP to dms_user;
```

Binary Reader 使用包括 Oracle 目錄的 Oracle 檔案功能。每個 Oracle 目錄物件都包含要處理之重做日誌檔的資料夾名稱。這些 Oracle 目錄不會在檔案系統層級顯示。相反地，它們是在 Oracle 資料庫層級建立的邏輯目錄。您可以在 Oracle `ALL_DIRECTORIES` 檢視中檢視它們。

如果您想要 AWS DMS 建立這些 Oracle 目錄，請授予先前指定的`CREATE ANY DIRECTORY`權限。 會 AWS DMS 建立具有 `DMS_` 字首的目錄名稱。如果您不授予 `CREATE ANY DIRECTORY` 權限，請手動建立對應的目錄。在部分情況下，當您手動建立 Oracle 目錄時，Oracle 來源端點中指定的 Oracle 使用者不是建立這些目錄的使用者。在這些情況下，請同時授予 `READ on DIRECTORY` 權限。

**注意**  
AWS DMS CDC 不支援未設定為使用自動重做傳輸服務的 Active Dataguard Standby。

在某些情況下，您可以使用 Oracle 受管檔案 (OMF) 來儲存日誌。或者來源端點處於 ADG，因此您無法授予 CREATE ANY DIRECTORY 權限。在這些情況下，請在開始 AWS DMS 複寫任務之前，使用所有可能的日誌位置手動建立目錄。如果 AWS DMS 找不到預期的預先建立目錄，任務會停止。此外， AWS DMS 不會刪除它在`ALL_DIRECTORIES`檢視中建立的項目，因此請手動刪除它們。

### 使用 Binary Reader 搭配 Oracle ASM 時所需的其他帳戶權限
<a name="CHAP_Source.Oracle.Self-Managed.ASMBinaryPrivileges"></a>

若要使用 Binary Reader 存取 Automatic Storage Management (ASM) 中的還原日誌，請將下列權限授予 Oracle 端點連線設定中指定的 Oracle 使用者。

```
SELECT ON v_$transportable_platform
SYSASM -– To access the ASM account with Oracle 11g Release 2 (version 11.2.0.2) and higher, grant the Oracle endpoint user the SYSASM privilege. For older supported Oracle versions, it's typically sufficient to grant the Oracle endpoint user the SYSDBA privilege.
```

您可以開啟命令提示字元並呼叫下列其中一個陳述式，以驗證 ASM 帳戶存取權，視您之前指定的 Oracle 版本而定。

如果您需要 `SYSDBA` 權限，請使用以下內容。

```
sqlplus asmuser/asmpassword@+asmserver as sysdba
```

如果您需要 `SYSASM` 權限，請使用以下內容。

```
sqlplus asmuser/asmpassword@+asmserver as sysasm
```

### 在 中使用自我管理的 Oracle 待命做為來源與適用於 CDC 的 Binary Reader AWS DMS
<a name="CHAP_Source.Oracle.Self-Managed.BinaryStandby"></a>

若要將 Oracle Standby 執行個體設定為使用 Binary Reader 進行 CDC 的來源，請從下列先決條件開始：
+ AWS DMS 目前僅支援 Oracle Active Data Guard Standby。
+ 請確定 Oracle Data Guard 組態使用以下項目：
  + 還原傳輸服務，用於自動傳輸還原資料。
  + 套用服務以自動將還原套用至待命資料庫。

為了確認這些要求得到滿足，請執行以下查詢。

```
SQL> select open_mode, database_role from v$database;
```

從該查詢的輸出中，確認待命資料庫是以 READ ONLY 模式開啟，並自動套用還原。例如：

```
OPEN_MODE             DATABASE_ROLE
--------------------  ----------------
READ ONLY WITH APPLY  PHYSICAL STANDBY
```

**將 Oracle Standby 執行個體設定為使用 Binary Reader 進行 CDC 的來源**

1. 授予存取待命日誌檔所需的其他權限。

   ```
   GRANT SELECT ON v_$standby_log TO dms_user;
   ```

1. 使用 AWS 管理主控台 或 AWS CLI建立 Oracle Standby 的來源端點。建立端點時，請指定下列額外的連線屬性。

   ```
   useLogminerReader=N;useBfile=Y;
   ```
**注意**  
在 中 AWS DMS，您可以使用額外的連線屬性來指定是否要從封存日誌遷移，而非重做日誌。如需詳細資訊，請參閱[使用 Oracle 做為 來源時的端點設定 AWS DMS](#CHAP_Source.Oracle.ConnectionAttrib)。

1. 設定封存的日誌目的地。

   不含 ASM 之 Oracle 來源的 DMS Binary Reader 會使用 Oracle 目錄來存取封存的還原日誌。如果資料庫設定為使用快速復原區域 (FRA) 作為封存日誌目的地，則封存還原檔案的位置不是固定的。每天產生封存還原日誌，都會導致在 FRA 中使用目錄名稱格式 YYYY\$1MM\$1DD 建立新目錄。例如：

   ```
   DB_RECOVERY_FILE_DEST/SID/archivelog/YYYY_MM_DD
   ```

   當 DMS 需要存取新建立的 FRA 目錄中的封存還原檔案，且將主要讀寫資料庫用作為來源時，DMS 會如下所示，建立新的 Oracle 目錄或取代現有的 Oracle 目錄。

   ```
   CREATE OR REPLACE DIRECTORY dmsrep_taskid AS ‘DB_RECOVERY_FILE_DEST/SID/archivelog/YYYY_MM_DD’;
   ```

   當待命資料庫作為來源使用時，DMS 無法建立或取代 Oracle 目錄，因為資料庫處於唯讀模式。但是，您可以選擇執行以下其中一個額外步驟：

   1. 在 Oracle 不會建立每日子目錄的這類組態中，修改 `log_archive_dest_id_1` 以使用實際路徑 (而不是 FRA)：

      ```
      ALTER SYSTEM SET log_archive_dest_1=’LOCATION=full directory path’
      ```

      然後，建立要由 DMS 使用的 Oracle 目錄物件：

      ```
      CREATE OR REPLACE DIRECTORY dms_archived_logs AS ‘full directory path’;
      ```

   1. 建立其他封存日誌目的地，以及指向該目的地的 Oracle 目錄物件。例如：

      ```
      ALTER SYSTEM SET log_archive_dest_3=’LOCATION=full directory path’; 
      CREATE DIRECTORY dms_archived_log AS ‘full directory path’;
      ```

      然後將額外的連線屬性新增至任務來源端點：

      ```
      archivedLogDestId=3
      ```

   1. 手動預先建立由 DMS 使用的 Oracle 目錄物件。

      ```
      CREATE DIRECTORY dms_archived_log_20210301 AS ‘DB_RECOVERY_FILE_DEST/SID/archivelog/2021_03_01’;
      CREATE DIRECTORY dms_archived_log_20210302 AS ‘DB_RECOVERY_FILE_DEST>/SID>/archivelog/2021_03_02’; 
      ...
      ```

   1. 建立每日執行並建立所需目錄的 Oracle 排程器作業。

1. 設定線上日誌目的地。

   使用待命重做日誌建立指向作業系統目錄的 Oracle 目錄：

   ```
   CREATE OR REPLACE DIRECTORY STANDBY_REDO_DIR AS '<full directory path>';
   GRANT READ ON DIRECTORY STANDBY_REDO_DIR TO <dms_user>;
   ```

### 在 中使用 Oracle Cloud Infrastructure (OCI) 上的使用者受管資料庫做為 CDC 的來源 AWS DMS
<a name="CHAP_Source.Oracle.Self-Managed.OCI"></a>

使用者管理的資料庫是您設定和控制的資料庫，例如在虛擬機器 (VM)、裸機或 Exadata 伺服器上建立的 Oracle 資料庫。或者，您可以設定和控制在專用基礎架構上執行的資料庫，例如 Oracle 雲端基礎架構 (OCI)。下列資訊說明在 AWS DMS中使用 OCI 上的 Oracle 使用者管理資料庫作為來源進行變更資料擷取 (CDC) 時，所需的權限和組態。

**將 OCI 代管使用者管理的 Oracle 資料庫設定為來源以進行變更資料擷取**

1. 授予 OCI 上自我管理 Oracle 來源資料庫所需的使用者帳戶權限。如需詳細資訊，請參閱[自我管理 Oracle 來源端點的帳戶權限](#CHAP_Source.Oracle.Self-Managed.Privileges)。

1. 授予使用 Binary Reader 存取還原日誌時所需的帳戶權限。如需詳細資訊，請參閱[使用 Binary Reader 時所需的帳戶權限](#CHAP_Source.Oracle.Self-Managed.BinaryReaderPrivileges)。

1. 新增將 Oracle Automatic Storage Management (ASM) 與 Binary Reader 搭配使用時所需的帳戶權限。如需詳細資訊，請參閱[將 Oracle ASM 與 Binary Reader 搭配使用時所需的其他帳戶權限](#CHAP_Source.Oracle.Self-Managed.ASMBinaryPrivileges)。

1. 設定補充記錄。如需詳細資訊，請參閱[設定補充記錄](#CHAP_Source.Oracle.Self-Managed.Configuration.SupplementalLogging)。

1. 設定 TDE 加密。如需詳細資訊，請參閱[使用 Oracle 資料庫作為來源端點時的加密方法](#CHAP_Source.Oracle.Encryption)。

從 Oracle 雲端基礎架構 (OCI) 上的 Oracle 來源資料庫複寫資料時，請留意以下限制。

**限制**
+ DMS 不支援使用 Oracle LogMiner 存取重做日誌。
+ DMS 不支援自治資料庫。

## 使用 受 AWS管 Oracle 資料庫做為 的來源 AWS DMS
<a name="CHAP_Source.Oracle.Amazon-Managed"></a>

 AWS受管資料庫是位於 Amazon RDS、Amazon Aurora 或 Amazon S3 等 Amazon 服務的資料庫。您可以在下面找到使用 AWS受管 Oracle 資料庫時需要設定的權限和組態 AWS DMS。

### 的 受管 Oracle AWS來源上所需的使用者帳戶權限 AWS DMS
<a name="CHAP_Source.Oracle.Amazon-Managed.Privileges"></a>

將下列權限授予 Oracle 來源端點定義中指定的 Oracle 使用者帳戶。

**重要**  
針對 `dms_user` 和 `any-replicated-table` 等所有參數值，除非您使用區分大小的識別碼來指定值，否則 Oracle 會假設值為全大寫。例如，假設您建立 `dms_user` 值而不使用引號，如在 `CREATE USER myuser` 或 `CREATE USER MYUSER` 中。在這種情況下，Oracle 會識別值並將其儲存為全大寫 (`MYUSER`)。如果您使用引號 (如在 `CREATE USER "MyUser"` 或 `CREATE USER 'MyUser'` 中)，Oracle 會識別並儲存您指定的區分大小寫的值 (`MyUser`)。

```
GRANT CREATE SESSION to dms_user;
GRANT SELECT ANY TRANSACTION to dms_user;
GRANT SELECT on DBA_TABLESPACES to dms_user;
GRANT SELECT ON any-replicated-table to dms_user;
GRANT EXECUTE on rdsadmin.rdsadmin_util to dms_user;
 -- For Oracle 12c or higher:
GRANT LOGMINING to dms_user; – Required only if the Oracle version is 12c or higher.
```

此外，如下所示，使用 Amazon RDS 程序 `rdsadmin.rdsadmin_util.grant_sys_object` 對 `SYS` 物件授予 `SELECT` 與 `EXECUTE` 許可。如需詳細資訊，請參閱[將 SELECT 或 EXECUTE 權限授與 SYS 物件](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.CommonDBATasks.html#Appendix.Oracle.CommonDBATasks.TransferPrivileges)。

```
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_VIEWS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_TAB_PARTITIONS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_INDEXES', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_OBJECTS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_TABLES', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_USERS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_CATALOG', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_CONSTRAINTS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_CONS_COLUMNS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_TAB_COLS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_IND_COLUMNS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_LOG_GROUPS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$ARCHIVED_LOG', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOG', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGFILE', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$DATABASE', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$THREAD', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$PARAMETER', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$NLS_PARAMETERS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$TIMEZONE_NAMES', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$TRANSACTION', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$CONTAINERS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_REGISTRY', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('OBJ$', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_ENCRYPTED_COLUMNS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_LOGS', 'dms_user', 'SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_CONTENTS','dms_user','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_LOGMNR', 'dms_user', 'EXECUTE');

-- (as of Oracle versions 12.1 and higher)
exec rdsadmin.rdsadmin_util.grant_sys_object('REGISTRY$SQLPATCH', 'dms_user', 'SELECT');

-- (for Amazon RDS Active Dataguard Standby (ADG))
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$STANDBY_LOG', 'dms_user', 'SELECT'); 

-- (for transparent data encryption (TDE))

exec rdsadmin.rdsadmin_util.grant_sys_object('ENC$', 'dms_user', 'SELECT'); 
               
-- (for validation with LOB columns)
exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_CRYPTO', 'dms_user', 'EXECUTE');
                    
-- (for binary reader)
exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_DIRECTORIES','dms_user','SELECT'); 
                    
-- Required when the source database is Oracle Data guard, and Oracle Standby is used in the latest release of DMS version 3.4.6, version 3.4.7, and higher.

exec rdsadmin.rdsadmin_util.grant_sys_object('V_$DATAGUARD_STATS', 'dms_user', 'SELECT');
```

如需使用 Amazon RDS Active Dataguard Standby (ADG) 搭配 AWS DMS 的詳細資訊，請參閱 [在 中使用 Amazon RDS Oracle Standby （僅供讀取複本） 作為搭配適用於 CDC 的 Binary Reader 的來源 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.StandBy)。

如需搭配 Oracle TDE 使用的詳細資訊 AWS DMS，請參閱 [支援使用 Oracle 做為 來源的加密方法 AWS DMS](#CHAP_Source.Oracle.Encryption)。

#### 處理 Oracle Standby 之開啟交易的先決條件
<a name="CHAP_Source.Oracle.Amazon-Managed.Privileges.Standby"></a>

使用 3.4.6 版和更新 AWS DMS 版本時，請執行下列步驟來處理 Oracle Standby 的開啟交易。

1. 在主要資料庫 `DMS_USER` 上建立名為 `AWSDMS_DBLINK` 的資料庫連結，將使用資料庫連結來連線至主要資料庫。請注意，資料庫連結是從待命執行個體執行，以查詢主要資料庫上執行的開啟交易。請參閱以下範例。

   ```
   CREATE PUBLIC DATABASE LINK AWSDMS_DBLINK 
      CONNECT TO DMS_USER IDENTIFIED BY DMS_USER_PASSWORD
      USING '(DESCRIPTION=
               (ADDRESS=(PROTOCOL=TCP)(HOST=PRIMARY_HOST_NAME_OR_IP)(PORT=PORT))
               (CONNECT_DATA=(SERVICE_NAME=SID))
             )';
   ```

1. 確認已如下列範例所示，使用 `DMS_USER` 來建立資料庫連結的連線。

   ```
   select 1 from dual@AWSDMS_DBLINK
   ```

### 設定 AWS的 受管 Oracle 來源 AWS DMS
<a name="CHAP_Source.Oracle.Amazon-Managed.Configuration"></a>

使用 AWS受管 Oracle 資料庫做為來源之前 AWS DMS，請為 Oracle 資料庫執行下列任務：
+ 啟用自動備份。如需詳細資訊，請參閱《Amazon RDS 使用者指南》**中的[啟用自動備份](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithAutomatedBackups.html#USER_WorkingWithAutomatedBackups.Enabling)。
+ 設定補充記錄。
+ 設定存檔。封存 Amazon RDS for Oracle 資料庫執行個體的重做日誌 AWS DMS ，可讓 使用 Oracle LogMiner 或 Binary Reader 擷取日誌資訊。

**若要設定封存**

1. 執行 `rdsadmin.rdsadmin_util.set_configuration` 命令以設定封存。

   例如，若要將封存的還原日誌保留 24 小時，請執行下列命令。

   ```
   exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',24);
   commit;
   ```
**注意**  
需要遞交命令，變更才會生效。

1. 請確定儲存體有足夠的空間可供封存的還原日誌在指定的保留期間使用。例如，如果保留期間為 24 小時，請計算一般交易處理小時內累積的封存還原日誌總大小，再將該值乘以 24。將此計算的 24 小時總計與可用儲存空間進行比較，並決定您的儲存空間是否足以處理完整的 24 小時交易處理。

**若要設定補充記錄**

1. 請執行下列命令以啟用資料庫層級的補充記錄。

   ```
   exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD');
   ```

1. 請執行下列命令以啟用主索引鍵補充記錄。

   ```
   exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD','PRIMARY KEY');
   ```

1. (選用) 在資料表層級啟用金鑰層級補充記錄。

   啟用金鑰層級補充記錄時，來源資料庫會產生一小部分開銷。因此，如果您僅遷移資料表的子集，建議您在資料表層級啟用金鑰層級補充記錄。若要在資料表層級啟用金鑰層級補充記錄，請執行下列命令。

   ```
   alter table table_name add supplemental log data (PRIMARY KEY) columns;
   ```

### 設定 CDC 任務以將 Binary Reader 與 的 RDS for Oracle 來源搭配使用 AWS DMS
<a name="CHAP_Source.Oracle.Amazon-Managed.CDC"></a>

您可以設定 AWS DMS 使用適用於 CDC 的 Binary Reader 存取來源 Amazon RDS for Oracle 執行個體重做日誌。

**注意**  
若要使用 Oracle LogMiner，具備最低限度的使用者帳戶權限就夠了。如需詳細資訊，請參閱[的 受管 Oracle AWS來源上所需的使用者帳戶權限 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.Privileges)。

若要使用 AWS DMS Binary Reader，請 AWS DMS 根據您的版本指定 Oracle 來源端點的其他設定和額外連線屬性。

以下版本的 Amazon RDS for Oracle 中提供 Binary Reader 支援：
+ Oracle 11.2：11.2.0.4V11 版和更高版本
+ Oracle 12.1：12.1.0.2.V7 版和更高版本
+ Oracle 12.2：所有版本
+ Oracle 18.0：所有版本
+ Oracle 19.0：所有版本

**使用 Binary Reader 設定 CDC**

1. 以主要使用者身分登入 Amazon RDS for Oracle 來源資料庫，然後執行下列預存程序以建立伺服器層級的目錄。

   ```
   exec rdsadmin.rdsadmin_master_util.create_archivelog_dir;
   exec rdsadmin.rdsadmin_master_util.create_onlinelog_dir;
   ```

1. 授予以下 Oracle 使用者帳戶權限，此權限會用來存取 Oracle 來源端點。

   ```
   GRANT READ ON DIRECTORY ONLINELOG_DIR TO dms_user;
   GRANT READ ON DIRECTORY ARCHIVELOG_DIR TO dms_user;
   ```

1. 在 Amazon RDS Oracle 來源端點上，設定額外的連線屬性：
   + 對於 RDS Oracle 11.2 和 12.1 版，請進行以下設定。

     ```
     useLogminerReader=N;useBfile=Y;accessAlternateDirectly=false;useAlternateFolderForOnline=true;
     oraclePathPrefix=/rdsdbdata/db/{$DATABASE_NAME}_A/;usePathPrefix=/rdsdbdata/log/;replacePathPrefix=true;
     ```
   + 對於 RDS Oracle 12.2、18.0 和 19.0 版，請進行以下設定。

     ```
     useLogminerReader=N;useBfile=Y;
     ```

**注意**  
請確保多個屬性設定的分號分隔符號 (;) 後沒有空格 (例如 `oneSetting;thenAnother`)。

如需設定 CDC 任務的詳細資訊，請參閱[Oracle 來源資料庫的 CDC 組態](#CHAP_Source.Oracle.CDC.Configuration)。

### 在 中使用 Amazon RDS Oracle Standby （僅供讀取複本） 作為搭配適用於 CDC 的 Binary Reader 的來源 AWS DMS
<a name="CHAP_Source.Oracle.Amazon-Managed.StandBy"></a>

在 AWS DMS中使用 Binary Reader 進行 CDC 時，請確認使用 Amazon RDS for Oracle Standby 作為來源的以下先決條件：
+ 使用 Oracle 主要使用者來設定 Binary Reader。
+ 確定 AWS DMS 目前僅支援使用 Oracle Active Data Guard Standby。

執行此作業之後，請使用下列程序，在使用 Binary Reader 進行 CDC 時，使用 RDS for Oracle Standby 作為來源。

**在使用 Binary Reader 進行 CDC 時，將 RDS for Oracle Standby 設定為來源**

1. 以主要使用者身分登入 RDS for Oracle 主要執行個體。

1. 依照 Amazon RDS 使用者指南中的說明執行下列預存程序，以建立伺服器層級目錄。

   ```
   exec rdsadmin.rdsadmin_master_util.create_archivelog_dir;
   exec rdsadmin.rdsadmin_master_util.create_onlinelog_dir;
   ```

1. 識別在步驟 2 中建立的目錄。

   ```
   SELECT directory_name, directory_path FROM all_directories
   WHERE directory_name LIKE ( 'ARCHIVELOG_DIR_%' )
           OR directory_name LIKE ( 'ONLINELOG_DIR_%' )
   ```

   例如，上述程式碼會顯示類似下列的目錄清單。  
![\[Table showing directory names and their corresponding paths for archive and online logs.\]](http://docs.aws.amazon.com/zh_tw/dms/latest/userguide/images/datarep-rds-server-level-directories.png)

1. 將先前目錄的 `Read` 權限授予用來存取 Oracle Standby 的 Oracle 使用者帳戶。

   ```
   GRANT READ ON DIRECTORY ARCHIVELOG_DIR_A TO dms_user;
   GRANT READ ON DIRECTORY ARCHIVELOG_DIR_B TO dms_user;
   GRANT READ ON DIRECTORY ONLINELOG_DIR_A TO dms_user;
   GRANT READ ON DIRECTORY ONLINELOG_DIR_B TO dms_user;
   ```

1. 在主要執行個體上執行封存日誌切換。這樣做可確保對 `ALL_DIRECTORIES` 所做的變更也會移植到 Oracle Standby。

1. 在 Oracle Standby 上執行 `ALL_DIRECTORIES` 查詢，以確認已套用變更。

1. 使用 管理主控台或 AWS Command Line Interface () 建立 Oracle Standby 的 AWS DMS 來源端點AWS CLI。建立端點時，請指定下列額外連線屬性。

   ```
   useLogminerReader=N;useBfile=Y;archivedLogDestId=1;additionalArchivedLogDestId=2
   ```

1. 建立端點之後，請在主控台的**建立端點**頁面上使用**測試端點連線**，或使用 AWS CLI `test-connection`命令來驗證已建立連線。

## 使用 Oracle 做為 來源的限制 AWS DMS
<a name="CHAP_Source.Oracle.Limitations"></a>

使用 Oracle 資料庫做為 AWS DMS來源時，有下列限制：
+ AWS DMS 支援 3.5.0 版和更新 AWS DMS 版本的 Oracle Extended 資料類型。
+ AWS DMS 不支援長物件名稱 （超過 30 個位元組）。
+ AWS DMS 不支援以函數為基礎的索引。
+ 如果您管理補充記錄，並在任何資料欄上執行轉換，請確定已啟用所有欄位和資料欄的補充記錄。如需設定補充記錄的相關資訊，請參閱下列主題：
  + 對於自我管理的 Oracle 來源資料庫，請參閱[設定補充記錄](#CHAP_Source.Oracle.Self-Managed.Configuration.SupplementalLogging)。
  + 如需 AWS受管 Oracle 來源資料庫，請參閱 [設定 AWS的 受管 Oracle 來源 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.Configuration)。
+ AWS DMS 不支援多租戶容器根資料庫 (CDB\$1ROOT)。其確實支援使用 Binary Reader 的 PDB。
+ AWS DMS 不支援延遲限制。
+ AWS DMS 3.5.3 版及更高版本完全支援安全 LOBs。
+ AWS DMS 支援所有支援的 Oracle 第 `rename table table-name to new-table-name` 11 版及更高版本的語法。任何 Oracle 10 版來源資料庫皆不支援此語法。
+ AWS DMS 不會複寫 DDL 陳述式 的結果`ALTER TABLE ADD column data_type DEFAULT default_value`。不會將 `default_value` 複寫至目標，而是將新的資料欄設定為 `NULL`。
+ 使用 3 AWS DMS .4.7 版或更新版本時，若要複寫分割區或子分割區操作所產生的變更，請在啟動 DMS 任務之前執行下列動作。
  + 手動建立分割資料表結構 (DDL)；
  + 確保 Oracle 來源和 Oracle 目標上的 DDL 是相同的；
  + 設定額外的連線屬性 `enableHomogenousPartitionOps=true`。

  如需 `enableHomogenousPartitionOps` 的相關資訊，請參閱 [使用 Oracle 做為 來源時的端點設定 AWS DMS](#CHAP_Source.Oracle.ConnectionAttrib)。此外，請注意，在 FULL\$1CDC 任務上，DMS 不會複寫在快取變更中擷取的資料變更。在該使用案例中，請在 Oracle 目標上重新建立資料表結構，然後重新載入有問題的資料表。

  3.4.7 AWS DMS 版之前：

  DMS 不會複寫分割區或子分割區操作 (`ADD`、`EXCHANGE`、 `DROP`和 ) 所產生的資料變更`TRUNCATE`。這類更新可能會在複寫期間造成下列錯誤：
  + 對於 `ADD` 操作，更新和刪除新增資料可能會引發「0 則資料列受影響」警告。
  + 對於 `DROP` 和 `TRUNCATE` 操作，新插入可能會導致「複寫」錯誤。
  + `EXCHANGE` 操作可能會導致「0 行受影響」警告和「重複」錯誤。

  若要複寫由分割區或子分割區操作所產生的變更，請重新載入有問題的資料表。新增空白分割區之後，新增的分割區上的操作會像平常一樣複寫到目標。
+ AWS DMS 3.4 之前的 版本不支援在來源上執行 `CREATE TABLE AS`陳述式所導致的目標資料變更。不過，會在目標上建立新的資料表。
+ AWS DMS 不會擷取 Oracle `DBMS_REDEFINITION`套件所做的變更，例如資料表中繼資料和 `OBJECT_ID` 欄位。
+ 啟用有限大小 LOB 模式時，Oracle 來源上的空 BLOB/CLOB 資料欄會複寫為 NULL 值。啟用完整 LOB 模式時，它們會複寫為空字串 (' ')。
+ 使用 Oracle 11 LogMiner 擷取變更時，字符串長度大於 1982 的 CLOB 資料行上的更新將遺失，且不會更新目標。
+ 在變更資料擷取 (CDC) 期間， AWS DMS 不支援批次更新定義為主索引鍵的數值資料欄。
+ AWS DMS 不支援特定`UPDATE`命令。下列範例是不支援的 `UPDATE` 命令。

  ```
  UPDATE TEST_TABLE SET KEY=KEY+1;
  ```

  這裡，`TEST_TABLE` 是資料表名稱，而 `KEY` 是定義為主索引鍵的數值資料行。
+ AWS DMS 不支援載入 LONG 和 LONG RAW 資料欄的完整 LOB 模式。相反地，您可以使用有限 LOB 模式，將這些資料類型遷移至 Oracle 目標。在有限的 LOB 模式中， 會將任何您設定為長於 64 KB 的 LONG 或 LONG RAW 資料欄的資料 AWS DMS 截斷為 64 KB。
+ AWS DMS 不支援載入 XMLTYPE 資料欄的完整 LOB 模式。相反地，您可以使用有限的 LOB 模式，將 XMLTYPE 資料欄遷移至 Oracle 目標。在有限 LOB 模式中，DMS 會截斷任何大於使用者定義之「LOB 大小上限」變數的資料。「LOB 大小上限」的建議值上限為 100MB。
+ AWS DMS 不會複寫名稱包含撇號的資料表。
+ AWS DMS 支援具體化視觀表的 CDC。但是 DMS 不支援任何其他檢視的 CDC。
+ AWS DMS 對於具有溢位區段的索引組織資料表， 不支援 CDC。
+ AWS DMS 不支援將 `enableHomogenousPartitionOps` 設為 ，依參考分割之資料表`Drop Partition`的操作`true`。
+ 當您使用 Oracle LogMiner 存取重做日誌時， AWS DMS 具有下列限制：
  + 僅限 Oracle 12， AWS DMS 不會將任何變更複寫至 LOB 資料欄。
  + AWS DMS 使用 Oracle LogMiner 時不支援複寫中的 XA 交易。
  + Oracle LogMiner 不支援可插入資料庫 (PDB) 的連線。若要連線到 PDB，請使用 Binary Reader 存取重做日誌。
  + 不支援 SHRINK SPACE 操作。
+ 當您使用 Binary Reader 時， AWS DMS 具有下列限制：
  + 它不支援資料表叢集。
  + 其支援僅資料表層級的 `SHRINK SPACE` 操作。這個層級包括完整的資料表、分割區和子分割區。
  + 它不支援使用索引鍵壓縮對索引組織資料表進行變更。
  + 它不支援在原始裝置上實作線上重做日誌。
  + Binary Reader 僅支援自我管理 Oracle 資料庫的 TDE，因為 RDS for Oracle 不支援 TDE 加密金鑰的錢包密碼擷取。
+ AWS DMS 不支援使用 Oracle Automatic Storage Management (ASM) 代理連線到 Amazon RDS Oracle 來源。
+ AWS DMS 不支援虛擬資料欄。
+ AWS DMS 不支援以 ROWID 資料欄為基礎的`ROWID`資料類型或具體化檢視。

  AWS DMS 部分支援 Oracle 具體化檢視。對於完全載入，DMS 可以執行 Oracle 具體化視觀表的完全載入複本。DMS 會將具體化視觀表作為基礎資料表複製到目標系統，並忽略具體化視觀表中的任何 ROWID 資料欄。對於進行中複寫 (CDC)，DMS 會嘗試將變更複寫到具體化視觀表資料，但結果可能不理想。特別是，如果「具體化視觀表」經過完整重新整理，DMS 會針對所有資料列複寫個別的刪除，然後針對所有資料列複寫個別插入。這是一個非常耗費資源的練習，對於具有大量資料列的具體化視觀表的效能可能不佳。對於具體化視觀表進行快速重新整理的進行中複寫，DMS 會嘗試處理並複寫快速重新整理資料變更。在任一情況下，DMS 都會略過具體化視觀表中的任何 ROWID 資料欄。
+ AWS DMS 不會載入或擷取全域暫存資料表。
+ 對於使用複寫的 S3 目標，請在每個資料欄上啟用補充記錄，以便來源資料列更新可以擷取每個資料欄值。範例如下：`alter table yourtablename add supplemental log data (all) columns;`。
+ 無法在目標上複寫資料列的更新，其具有包含 `null` 的複合唯一索引鍵。
+ AWS DMS 不支援在相同的來源端點上使用多個 Oracle TDE 加密金鑰。每個端點只能有一個 TDE 加密金鑰名稱「`securityDbEncryptionName`」的屬性，而此金鑰只能有一個 TDE 密碼。
+ 從 Amazon RDS for Oracle 複寫時，只有加密的資料表空間和使用 Oracle LogMiner 時才支援 TDE。
+ AWS DMS 不支援快速連續的多個資料表重新命名操作。
+ 使用 Oracle 19.0 做為來源時， AWS DMS 不支援下列功能：
  + 資料保護 DML 重新導向
  + 分割混合式資料表
  + 僅限結構描述的 Oracle 帳戶
+ AWS DMS 不支援遷移 或 類型的資料表`BIN$`或檢視`DR$`。
+ 從 Oracle 18.x 開始， AWS DMS 不支援從 Oracle Express Edition (Oracle Database XE) 進行變更資料擷取 (CDC)。
+ 從 CHAR 資料欄遷移資料時，DMS 會截斷任何結尾空格。
+ AWS DMS 不支援從應用程式容器複寫。
+ AWS DMS 不支援執行 Oracle Flashback Database 和還原點，因為這些操作會影響 Oracle Redo Log 檔案的一致性。
+ 在 3.5.3 AWS DMS 版之前，下列情況下不支援具有平行執行選項的直接載入`INSERT`程序：
  + 包含 255 個以上資料欄的未壓縮資料表
  + 資料列大小超過 8K
  + Exadata HCC 資料表
  + 在 Big Endian 平台上執行的資料庫
+ 不含主索引鍵或唯一索引鍵的來源資料表需要啟用 ALL COLUMN 補充記錄。其會建立更多還原日誌活動，並且可能會增加 DMS CDC 延時。
+ AWS DMS 不會從來源資料庫中的隱藏資料欄遷移資料。若要在遷移範圍中包含這些資料欄，請使用 `ALTER TABLE` 陳述式將這些資料欄設為可見。
+ 對於所有 Oracle 版本， AWS DMS 不會複寫 `XMLTYPE`和 LOB 資料欄`UPDATE`的操作結果。
+ AWS DMS 不支援從具有暫時有效性限制的資料表複寫。
+ 如果 Oracle 來源在完全載入任務期間無法使用，即使資料遷移仍不完整， 仍 AWS DMS 可能會在多次重新連線嘗試後將任務標記為已完成。在此案例中，目標資料表僅包含連線遺失之前遷移的記錄，可能會建立來源與目標系統之間的資料不一致。若要確保資料完整性，您必須完全重新啟動完全載入任務，或重新載入受連線中斷影響的特定資料表。

## Oracle 端點的 SSL 支援
<a name="CHAP_Security.SSL.Oracle"></a>

AWS DMS Oracle 端點支援 `none`和 SSL 模式的 `verify-ca` SSL V3。若要搭配 Oracle 端點使用 SSL，上傳適用於端點的 Oracle 錢包，而不是 .pem 憑證檔案。

**Topics**
+ [為 Oracle SSL 使用現有憑證](#CHAP_Security.SSL.Oracle.Existing)
+ [為 Oracle SSL 使用自我簽署的憑證](#CHAP_Security.SSL.Oracle.SelfSigned)

### 為 Oracle SSL 使用現有憑證
<a name="CHAP_Security.SSL.Oracle.Existing"></a>

若要使用現有的 Oracle 用戶端安裝從 CA 憑證檔案建立 Oracle 錢包，請執行下列步驟。

**使用 Oracle SSL 的現有 Oracle 用戶端安裝搭配 AWS DMS**

1. 執行下列命令，將 `ORACLE_HOME` 系統變數設為您的 `dbhome_1` 目錄位置。

   ```
   prompt>export ORACLE_HOME=/home/user/app/user/product/12.1.0/dbhome_1                        
   ```

1. 附加 `$ORACLE_HOME/lib` 至 `LD_LIBRARY_PATH` 系統變數。

   ```
   prompt>export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib                        
   ```

1. 在 `$ORACLE_HOME/ssl_wallet` 建立 Oracle 錢包的目錄。

   ```
   prompt>mkdir $ORACLE_HOME/ssl_wallet
   ```

1. 將 CA 憑證 `.pem` 檔案放在 `ssl_wallet` 目錄中。若是使用 Amazon RDS，您可以下載由 Amazon RDS 託管之 `rds-ca-2015-root.pem` 根 CA 憑證檔案。如需下載此檔案的相關資訊，請參閱《Amazon RDS 使用者指南》**中的[使用 SSL/TLS 加密與資料庫執行個體的連線](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html)。

1. 如果您的 CA 憑證包含多個 PEM 檔案 （例如 Amazon RDS 全域或區域套件），您必須將其分割成單獨的檔案，並使用下列 bash 指令碼將其新增至 Oracle 錢包。此指令碼需要兩個參數輸入：CA 憑證的路徑和先前建立的 Oracle 錢包資料夾的路徑。

   ```
   #!/usr/bin/env bash
   
   certnum=$(grep -c BEGIN <(cat $1))
   
   cnt=0
   temp_cert=""
   while read line
   do
   if [ -n "$temp_cert" -a "$line" == "-----BEGIN CERTIFICATE-----" ]
   then
   cnt=$(expr $cnt + 1)
   printf "\rImporting certificate # $cnt of $certnum"
   orapki wallet add -wallet "$2" -trusted_cert -cert <(echo -n "${temp_cert}") -auto_login_only 1>/dev/null 2>/dev/null
   temp_cert=""
   fi
   temp_cert+="$line"$'\n'
   done < <(cat $1)
   
   cnt=$(expr $cnt + 1)
   printf "\rImporting certificate # $cnt of $certnum"
   orapki wallet add -wallet "$2" -trusted_cert -cert <(echo -n "${temp_cert}") -auto_login_only 1>/dev/null 2>/dev/null
   echo ""
   ```

當您完成上述步驟時，您就可以透過指定 certificate-wallet 參數，來使用 `ImportCertificate` API 呼叫匯入錢包檔案。如果您在建立或修改 Oracle 端點時選取 `verify-ca` 做為 SSL 模式，您就可以接著使用匯入的錢包憑證。

**注意**  
 Oracle 錢包是二進位檔案。 AWS DMS 會依原狀接受這些檔案。

### 為 Oracle SSL 使用自我簽署的憑證
<a name="CHAP_Security.SSL.Oracle.SelfSigned"></a>

若要針對 Oracle SSL 使用自我簽署憑證，請執行下列步驟 (假設 Oracle 錢包密碼為 `oracle123`)。

**搭配 使用 Oracle SSL 的自我簽署憑證 AWS DMS**

1. 建立您要用來處理自簽憑證的目錄。

   ```
   mkdir -p /u01/app/oracle/self_signed_cert
   ```

1. 變更為您在上一個步驟中建立的目錄。

   ```
   cd /u01/app/oracle/self_signed_cert
   ```

1. 建立根金鑰。

   ```
   openssl genrsa -out self-rootCA.key 2048
   ```

1. 使用您在上一個步驟中建立的根金鑰來自簽根憑證。

   ```
   openssl req -x509 -new -nodes -key self-rootCA.key 
           -sha256 -days 3650 -out self-rootCA.pem
   ```

   使用以下輸入參數。
   + `Country Name (2 letter code) [XX]`，例如：`AU`
   + `State or Province Name (full name) []`，例如：`NSW`
   + `Locality Name (e.g., city) [Default City]`，例如：`Sydney`
   + `Organization Name (e.g., company) [Default Company Ltd]`，例如：`AmazonWebService`
   + `Organizational Unit Name (e.g., section) []`，例如：`DBeng`
   + `Common Name (e.g., your name or your server's hostname) []`，例如：`aws`
   + `Email Address []`，例如：abcd.efgh@amazonwebservice.com

1. 建立 Oracle 資料庫的 Oracle 錢包目錄。

   ```
   mkdir -p /u01/app/oracle/wallet
   ```

1. 建立新的 Oracle 錢包。

   ```
   orapki wallet create -wallet "/u01/app/oracle/wallet" -pwd oracle123 -auto_login_local
   ```

1. 將根憑證新增至 Oracle 錢包。

   ```
   orapki wallet add -wallet "/u01/app/oracle/wallet" -pwd oracle123 -trusted_cert 
   -cert /u01/app/oracle/self_signed_cert/self-rootCA.pem
   ```

1. 列出 Oracle 錢包的內容。此清單應該包含根憑證。

   ```
   orapki wallet display -wallet /u01/app/oracle/wallet -pwd oracle123
   ```

   例如，這可能會顯示類似以下內容。

   ```
   Requested Certificates:
   User Certificates:
   Trusted Certificates:
   Subject:        CN=aws,OU=DBeng,O= AmazonWebService,L=Sydney,ST=NSW,C=AU
   ```

1. 使用 ORAPKI 公用程式來產生憑證簽署請求 (CSR)。

   ```
   orapki wallet add -wallet "/u01/app/oracle/wallet" -pwd oracle123 
   -dn "CN=aws" -keysize 2048 -sign_alg sha256
   ```

1. 執行下列命令。

   ```
   openssl pkcs12 -in /u01/app/oracle/wallet/ewallet.p12 -nodes -out /u01/app/oracle/wallet/nonoracle_wallet.pem
   ```

   其輸出如下所示。

   ```
   Enter Import Password:
   MAC verified OK
   Warning unsupported bag type: secretBag
   ```

1. 放入 'dms' 做為通用名稱。

   ```
   openssl req -new -key /u01/app/oracle/wallet/nonoracle_wallet.pem -out certdms.csr
   ```

   使用以下輸入參數。
   + `Country Name (2 letter code) [XX]`，例如：`AU`
   + `State or Province Name (full name) []`，例如：`NSW`
   + `Locality Name (e.g., city) [Default City]`，例如：`Sydney`
   + `Organization Name (e.g., company) [Default Company Ltd]`，例如：`AmazonWebService`
   + `Organizational Unit Name (e.g., section) []`，例如：`aws`
   + `Common Name (e.g., your name or your server's hostname) []`，例如：`aws`
   + `Email Address []`，例如：abcd.efgh@amazonwebservice.com

   確保這與步驟 4 不同。您可以執行此操作，如範例所示，將組織單位名稱變更為不同的名稱。

   輸入要與憑證請求一起傳送的其他屬性。
   + `A challenge password []`，例如：`oracle123`
   + `An optional company name []`，例如：`aws`

1. 取得憑證簽章。

   ```
   openssl req -noout -text -in certdms.csr | grep -i signature
   ```

   這篇貼文的簽章金鑰是 `sha256WithRSAEncryption`。

1. 執行下列命令來產生憑證 (`.crt`) 檔案。

   ```
   openssl x509 -req -in certdms.csr -CA self-rootCA.pem -CAkey self-rootCA.key 
   -CAcreateserial -out certdms.crt -days 365 -sha256
   ```

   其顯示的輸出如下所示。

   ```
   Signature ok
   subject=/C=AU/ST=NSW/L=Sydney/O=awsweb/OU=DBeng/CN=aws
   Getting CA Private Key
   ```

1. 將憑證新增至錢包。

   ```
   orapki wallet add -wallet /u01/app/oracle/wallet -pwd oracle123 -user_cert -cert certdms.crt
   ```

1. 檢視錢包。其應有兩個項目。請參閱下列程式碼。

   ```
   orapki wallet display -wallet /u01/app/oracle/wallet -pwd oracle123
   ```

1. 設定 `sqlnet.ora` 檔案 (`$ORACLE_HOME/network/admin/sqlnet.ora`)。

   ```
   WALLET_LOCATION =
      (SOURCE =
        (METHOD = FILE)
        (METHOD_DATA =
          (DIRECTORY = /u01/app/oracle/wallet/)
        )
      ) 
   
   SQLNET.AUTHENTICATION_SERVICES = (NONE)
   SSL_VERSION = 1.0
   SSL_CLIENT_AUTHENTICATION = FALSE
   SSL_CIPHER_SUITES = (SSL_RSA_WITH_AES_256_CBC_SHA)
   ```

1. 停止 Oracle 接聽程式。

   ```
   lsnrctl stop
   ```

1. 在 `listener.ora` 檔案 (`$ORACLE_HOME/network/admin/listener.ora`) 中新增 SSL 項目。

   ```
   SSL_CLIENT_AUTHENTICATION = FALSE
   WALLET_LOCATION =
     (SOURCE =
       (METHOD = FILE)
       (METHOD_DATA =
         (DIRECTORY = /u01/app/oracle/wallet/)
       )
     )
   
   SID_LIST_LISTENER =
    (SID_LIST =
     (SID_DESC =
      (GLOBAL_DBNAME = SID)
      (ORACLE_HOME = ORACLE_HOME)
      (SID_NAME = SID)
     )
    )
   
   LISTENER =
     (DESCRIPTION_LIST =
       (DESCRIPTION =
         (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521))
         (ADDRESS = (PROTOCOL = TCPS)(HOST = localhost.localdomain)(PORT = 1522))
         (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
       )
     )
   ```

1. 設定 `tnsnames.ora` 檔案 (`$ORACLE_HOME/network/admin/tnsnames.ora`)。

   ```
   <SID>=
   (DESCRIPTION=
           (ADDRESS_LIST = 
                   (ADDRESS=(PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521))
           )
           (CONNECT_DATA =
                   (SERVER = DEDICATED)
                   (SERVICE_NAME = <SID>)
           )
   )
   
   <SID>_ssl=
   (DESCRIPTION=
           (ADDRESS_LIST = 
                   (ADDRESS=(PROTOCOL = TCPS)(HOST = localhost.localdomain)(PORT = 1522))
           )
           (CONNECT_DATA =
                   (SERVER = DEDICATED)
                   (SERVICE_NAME = <SID>)
           )
   )
   ```

1. 重新啟動 Oracle 接聽程式。

   ```
   lsnrctl start
   ```

1. 顯示 Oracle 接聽程式狀態。

   ```
   lsnrctl status
   ```

1. 使用 sqlplus 和 SSL tnsnames 項目來測試從 localhost 到資料庫的 SSL 連線。

   ```
   sqlplus -L ORACLE_USER@SID_ssl
   ```

1. 驗證您已使用 SSL 成功連線。

   ```
   SELECT SYS_CONTEXT('USERENV', 'network_protocol') FROM DUAL;
   
   SYS_CONTEXT('USERENV','NETWORK_PROTOCOL')
   --------------------------------------------------------------------------------
   tcps
   ```

1. 將目錄變更為包含自簽憑證的目錄。

   ```
   cd /u01/app/oracle/self_signed_cert
   ```

1. 建立新的用戶端 Oracle 錢包 AWS DMS 以供 使用。

   ```
   orapki wallet create -wallet ./ -auto_login_only
   ```

1. 將自簽根憑證新增至 Oracle 錢包。

   ```
   orapki wallet add -wallet ./ -trusted_cert -cert self-rootCA.pem -auto_login_only
   ```

1. 列出 Oracle 錢包的內容 AWS DMS 以供 使用。此清單應該包含自簽根憑證。

   ```
   orapki wallet display -wallet ./
   ```

   其輸出如下所示。

   ```
   Trusted Certificates:
   Subject:        CN=aws,OU=DBeng,O=AmazonWebService,L=Sydney,ST=NSW,C=AU
   ```

1. 上傳您剛建立的 Oracle 錢包 AWS DMS。

## 支援使用 Oracle 做為 來源的加密方法 AWS DMS
<a name="CHAP_Source.Oracle.Encryption"></a>

在下表中，您可以找到使用 Oracle 來源資料庫時 AWS DMS 支援的透明資料加密 (TDE) 方法。


| 重做日誌存取方法 | TDE 資料表空間 | TDE 資料行 | 
| --- | --- | --- | 
| Oracle LogMiner | 是 | 是 | 
| Binary Reader | 是 | 是 | 

AWS DMS 在資料欄層級和資料表空間層級上使用 Binary Reader 時， 支援 Oracle TDE。若要搭配 使用 TDE 加密 AWS DMS，請先識別存放 TDE 加密金鑰和 TDE 密碼的 Oracle 錢包位置。然後為 Oracle 來源端點識別正確的 TDE 加密金鑰和密碼。

**識別並指定 TDE 加密的加密金鑰和密碼**

1. 執行下列查詢，以尋找 Oracle 資料庫主機上的 Oracle 加密錢包。

   ```
   SQL> SELECT WRL_PARAMETER FROM V$ENCRYPTION_WALLET;
   
   WRL_PARAMETER
   --------------------------------------------------------------------------------
   /u01/oracle/product/12.2.0/dbhome_1/data/wallet/
   ```

   在此處，`/u01/oracle/product/12.2.0/dbhome_1/data/wallet/` 便是指錢包的位置。

1. 取得非 CDB 或 CDB 來源的主金鑰 ID，如下所示：

   1. 對於非 CDB 來源，請執行下列查詢以擷取主加密金鑰 ID：

      ```
      SQL>  select rownum, key_id, activation_time from v$encryption_keys;
      
      ROWNUM KEY_ID                                                 ACTIVATION_TIME
      ------ ------------------------------------------------------ ---------------
           1 AeKask0XZU+NvysflCYBEVwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   04-SEP-24 10.20.56.605200 PM +00:00
           2 AV7WU9uhoU8rv8daE/HNnSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   10-AUG-21 07.52.03.966362 PM +00:00
           3 AckpoJ/f+k8xvzJ+gSuoVH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA   14-SEP-20 09.26.29.048870 PM +00:00
      ```

      如果您計劃從過去某個時間點開始 CDC，啟用時間很有用。例如，使用上述結果，您可以使用 ROWNUM 2 中的主金鑰 ID，從 10-AUG-21 07.52.03 PM 到 14-SEP-20 09.26.29 PM 之間的某個時間點開始 CDC。當任務在 2014-SEP-20 日下午 09.26.29 當天或之後發生重做失敗時，您必須修改來源端點、在 ROWNUM 3 中提供主金鑰 ID，然後繼續任務。

   1. 對於 CDB 來源 DMS 需要 CDB\$1ROOT 主加密金鑰。連線至 CDB\$1ROOT 並執行下列查詢：

      ```
      SQL> select rownum, key_id, activation_time from v$encryption_keys where con_id = 1;
      
      ROWNUM KEY_ID                                               ACTIVATION_TIME
      ------ ---------------------------------------------------- -----------------------------------
           1 Aa2E/Vwb5U+zv5hCncS5ErMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 29-AUG-24 12.51.19.699060 AM +00:00
      ```

1. 從命令行列出來源 Oracle 資料庫主機上的加密錢包項目。

   ```
   $ mkstore -wrl /u01/oracle/product/12.2.0/dbhome_1/data/wallet/ -list
   Oracle Secret Store entries:
   ORACLE.SECURITY.DB.ENCRYPTION.AWGDC9glSk8Xv+3bVveiVSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
   ORACLE.SECURITY.DB.ENCRYPTION.AY1mRA8OXU9Qvzo3idU4OH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
   ORACLE.SECURITY.DB.ENCRYPTION.MASTERKEY
   ORACLE.SECURITY.ID.ENCRYPTION.
   ORACLE.SECURITY.KB.ENCRYPTION.
   ORACLE.SECURITY.KM.ENCRYPTION.AY1mRA8OXU9Qvzo3idU4OH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
   ```

   尋找內含您在步驟 2 (`AWGDC9glSk8Xv+3bVveiVSg`) 中找到之主金鑰 ID 的項目。此項目是 TDE 加密金鑰名稱。

1. 檢視您於之前步驟中找到的項目詳細資訊。

   ```
   $ mkstore -wrl /u01/oracle/product/12.2.0/dbhome_1/data/wallet/ -viewEntry ORACLE.SECURITY.DB.ENCRYPTION.AWGDC9glSk8Xv+3bVveiVSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
   Oracle Secret Store Tool : Version 12.2.0.1.0
   Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved.
   Enter wallet password:
   ORACLE.SECURITY.DB.ENCRYPTION.AWGDC9glSk8Xv+3bVveiVSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA = AEMAASAASGYs0phWHfNt9J5mEMkkegGFiD4LLfQszDojgDzbfoYDEACv0x3pJC+UGD/PdtE2jLIcBQcAeHgJChQGLA==
   ```

   輸入錢包密碼以查看結果。

   在這裡，`'='` 右邊的值是 TDE 密碼。

1. 透過設定 `securityDbEncryptionName` 額外的連線屬性，指定 Oracle 來源端點的 TDE 加密金鑰名稱。

   ```
   securityDbEncryptionName=ORACLE.SECURITY.DB.ENCRYPTION.AWGDC9glSk8Xv+3bVveiVSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
   ```

1. 在主控台上提供此金鑰的相關 TDE 密碼，作為 Oracle 來源**密碼**值的一部份。使用下列順序格式化以 TDE 密碼值結尾的逗號分隔密碼值。

   ```
   Oracle_db_password,ASM_Password,AEMAASAASGYs0phWHfNt9J5mEMkkegGFiD4LLfQszDojgDzbfoYDEACv0x3pJC+UGD/PdtE2jLIcBQcAeHgJChQGLA==
   ```

   無論您的 Oracle 資料庫組態為何，請依此順序指定密碼值。例如，如果您使用的是 TDE，但 Oracle 資料庫並未使用 ASM，請依照下列逗號分隔順序指定密碼值。

   ```
   Oracle_db_password,,AEMAASAASGYs0phWHfNt9J5mEMkkegGFiD4LLfQszDojgDzbfoYDEACv0x3pJC+UGD/PdtE2jLIcBQcAeHgJChQGLA==
   ```

如果您指定的 TDE 登入資料不正確， AWS DMS 遷移任務不會失敗。不過，任務也不會讀取或套用持續複寫變更至目標資料庫。開始任務後，請監控主控台遷移任務頁面上的**資料表統計資料**，以確定變更已複寫。

如果 DBA 在任務執行時變更 Oracle 資料庫的 TDE 憑證值，則任務會失敗。錯誤訊息包含新的 TDE 加密金鑰名稱。若要指定新值並重新開始任務，請使用上述程序。

**重要**  
您無法操控在 Oracle Automatic Storage Management (ASM) 位置中建立的 TDE 錢包，因為 `cp`、`mv`、`orapki` 和 `mkstore` 這類作業系統層級命令會損毀在 ASM 位置儲存的錢包檔案。此限制僅適用於在 ASM 位置儲存的 TDE 錢包檔案，但不適用於在本機作業系統目錄中儲存的 TDE 錢包檔案。  
若要使用 OS 層級命令操作在 ASM 中儲存的 TDE 錢包，請如下所示，建立本機金鑰存放區，並將 ASM 金鑰存放區合併至本機金鑰存放區：  
建立本機金鑰存放區。  

   ```
   ADMINISTER KEY MANAGEMENT create keystore file system wallet location identified by wallet password;
   ```
將 ASM 金鑰存放區合併至本機金鑰存放區中。  

   ```
   ADMINISTER KEY MANAGEMENT merge keystore ASM wallet location identified by wallet password into existing keystore file system wallet location identified by wallet password with backup;
   ```
然後，若要列出加密錢包項目和 TDE 密碼，請對本機金鑰存放區執行步驟 3 和 4。

## 支援使用 Oracle 做為 來源的壓縮方法 AWS DMS
<a name="CHAP_Source.Oracle.Compression"></a>

在下表中，您可以找到使用 Oracle 來源資料庫時 AWS DMS 支援哪些壓縮方法。如下表所示，壓縮支援取決於您的 Oracle 資料庫版本，以及是否將 DMS 設定為使用 Oracle LogMiner 來存取重做日誌。


| 版本 | 基本 | OLTP |  HCC (來自 Oracle 11g R2 或更新版本)  | 其他 | 
| --- | --- | --- | --- | --- | 
| Oracle 10 | 否 | N/A | 不適用 | 否 | 
| Oracle 11 或更新版本：Oracle LogMiner | 是 | 是 | 是  | 是：透過 Oracle LogMiner 支援的任何壓縮方法。 | 
| Oracle 11 或更新版本：Binary Reader | 是 | 是 | 是：如需詳細資訊，請參閱下列注意事項。 | 是 | 

**注意**  
當 Oracle 來源端點設定為使用 Binary Reader 時，僅支援全負載任務的 HCC 壓縮方法的 Query Low 層級。

## 使用 Oracle 作為 來源複寫巢狀資料表 AWS DMS
<a name="CHAP_Source.Oracle.NestedTables"></a>

AWS DMS 支援複寫包含巢狀資料表或已定義類型的資料欄的 Oracle 資料表。若要啟用此功能，請將下列額外連線屬性的設定新增至 Oracle 來源端點。

```
allowSelectNestedTables=true;
```

AWS DMS 從 Oracle 巢狀資料表將目標資料表建立為目標上的一般父資料表和子資料表，而無唯一限制。若要存取目標上的正確資料，請加入父資料表和子資料表。若要執行此操作，請先手動在目標子資料表中的 `NESTED_TABLE_ID` 資料行上建立非唯一索引。然後，您可以使用 `ON` 子句中的 `NESTED_TABLE_ID` 資料行，搭配對應至子資料表名稱的父資料行。此外，建立這類索引可改善更新或刪除目標子資料表資料時的效能 AWS DMS。如需範例，請參閱 [目標上父項和子項資料表的聯結範例](#CHAP_Source.Oracle.NestedTables.JoinExample)。

建議您設定任務在完全載入完成後停止。然後，針對目標上的所有複寫的子資料表，建立這些非唯一的索引，並繼續任務。

如果已擷取的巢狀資料表新增至現有的父資料表 （已擷取或未擷取）， 會正確 AWS DMS 處理它。不過，不會建立對應的目標資料表的非唯一索引。在這種情況下，如果目標子資料表變得非常大，效能可能會受到影響。在這種情況下，建議您停止任務、建立索引，然後繼續任務。

將巢狀資料表複寫到目標之後，讓 DBA 在父資料表和對應的子資料表上執行聯結，以扁平化資料。

### 將 Oracle 巢狀資料表複寫為來源的事前準備
<a name="CHAP_Source.Oracle.NestedTables.Prerequisites"></a>

請確定您複寫所有複寫的巢狀資料的父資料表。在資料表映射中包含父資料表 （包含巢狀資料表欄的資料表） 和子 AWS DMS 資料表 （即巢狀）。

### 支援的 Oracle 巢狀資料表類型做為來源
<a name="CHAP_Source.Oracle.NestedTables.Types"></a>

AWS DMS 支援下列 Oracle 巢狀資料表類型做為來源：
+ 資料類型
+ 使用者定義的物件

### Oracle 巢狀資料表做為來源的 AWS DMS 支援限制
<a name="CHAP_Source.Oracle.NestedTables.Limitations"></a>

AWS DMS 支援 Oracle 巢狀資料表做為來源時有下列限制：
+ AWS DMS 僅支援一個層級的資料表巢狀化。
+ AWS DMS 資料表映射不會檢查是否已選取父資料表和子資料表或資料表進行複寫。也就是說，可以選擇沒有子資料表的父資料表或沒有父資料表的子資料表。

### 如何將 Oracle 巢狀資料表 AWS DMS 複寫為來源
<a name="CHAP_Source.Oracle.NestedTables.HowReplicated"></a>

AWS DMS 會將父資料表和巢狀資料表複寫到目標，如下所示：
+ AWS DMS 會建立與來源相同的父資料表。然後就能將父項中的巢狀資料表定義為 `RAW(16)`，並在其 `NESTED_TABLE_ID` 資料行中包含對父系巢狀資料表的參考。
+ AWS DMS 會建立與巢狀來源相同的子資料表，但具有名為 的額外資料欄`NESTED_TABLE_ID`。此資料行與對應父項巢狀資料行的類型和值相同，且具有相同的意義。

### 目標上父項和子項資料表的聯結範例
<a name="CHAP_Source.Oracle.NestedTables.JoinExample"></a>

若要扁平化父項資料表，請在父項和子項資料表之間執行關連，如下列範例所示：

1. 建立 `Type` 資料表。

   ```
   CREATE OR REPLACE TYPE NESTED_TEST_T AS TABLE OF VARCHAR(50);
   ```

1. 建立有句如前述定義的 `NESTED_TEST_T` 類型資訊行的父項資料表。

   ```
   CREATE TABLE NESTED_PARENT_TEST (ID NUMBER(10,0) PRIMARY KEY, NAME NESTED_TEST_T) NESTED TABLE NAME STORE AS NAME_KEY;
   ```

1. 使用具有 `NAME_KEY` 子項資料表的聯結來扁平化資料表 `NESTED_PARENT_TEST`，其中子項資料表中的 `CHILD.NESTED_TABLE_ID` 符合 `PARENT.NAME`。

   ```
   SELECT … FROM NESTED_PARENT_TEST PARENT, NAME_KEY CHILD WHERE CHILD.NESTED_
   TABLE_ID = PARENT.NAME;
   ```

## 使用 Oracle 做為 來源時，在 Oracle ASM 上存放 REDO AWS DMS
<a name="CHAP_Source.Oracle.REDOonASM"></a>

對於產生高 REDO 的 Oracle 來源而言，在 Oracle ASM 上存放 REDO 可以提升效能，尤其是在 RAC 組態中，因為您可以設定 DMS，將 ASM REDO 讀取分散至所有 ASM 節點。

若要運用此組態，請使用 `asmServer` 連線屬性。例如，下列連線字串會將 DMS REDO 讀取分散到 3 個 ASM 節點：

```
asmServer=(DESCRIPTION=(CONNECT_TIMEOUT=8)(ENABLE=BROKEN)(LOAD_BALANCE=ON)(FAILOVER=ON)
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=asm_node1_ip_address)(PORT=asm_node1_port_number))
(ADDRESS=(PROTOCOL=tcp)(HOST=asm_node2_ip_address)(PORT=asm_node2_port_number))
(ADDRESS=(PROTOCOL=tcp)(HOST=asm_node3_ip_address)(PORT=asm_node3_port_number)))
(CONNECT_DATA=(SERVICE_NAME=+ASM)))
```

使用 NFS 儲存 Oracle REDO 時，請務必確定已套用適用的 DNFS (直接 NFS) 用戶端修補程式，特別是任何處理 Oracle 錯誤 25224242 的修補程式。如需其他資訊，請檢閱下列有關直接 NFS 用戶端相關修補程式 ([直接 NFS 用戶端的建議修補程式](https://support.oracle.com/knowledge/Oracle Cloud/1495104_1.html)) 的 Oracle 發行集。

此外，若要改善 NFS 讀取效能，建議您如下列範例所示，增加 NFS 磁碟區 `fstab` 中的 `rsize` 和 `wsize` 值。

```
NAS_name_here:/ora_DATA1_archive /u09/oradata/DATA1 nfs rw,bg,hard,nointr,tcp,nfsvers=3,_netdev,
timeo=600,rsize=262144,wsize=262144
```

另外，請如下方式調整 `tcp-max-xfer-size` 值：

```
vserver nfs modify -vserver vserver -tcp-max-xfer-size 262144
```

## 使用 Oracle 做為 來源時的端點設定 AWS DMS
<a name="CHAP_Source.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 作為來源搭配使用的端點設定。


| 名稱 | 描述 | 
| --- | --- | 
| AccessAlternateDirectly |  將此屬性設定為 false，以使用 Binary Reader 擷取作為來源之 Amazon RDS for Oracle 的變更資料。這會通知 DMS 執行個體不透過任何使用直接檔案存取的指定路徑字首替換來存取重做日誌。如需詳細資訊，請參閱[設定 CDC 任務以將 Binary Reader 與 的 RDS for Oracle 來源搭配使用 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.CDC)。 預設值：true  有效值：true/false 範例：`--oracle-settings '{"AccessAlternateDirectly": false}'`  | 
|  `AdditionalArchivedLogDestId`  |  在主要-待命設定中設定具有 `ArchivedLogDestId` 的此屬性。使用 Oracle Data Guard 資料庫作為來源時，此屬性在切換時很有用。在此情況下， AWS DMS 需要知道要從哪個目的地取得封存重做日誌，才能讀取變更。之所以需要這麼做是因為在切換後，之前的主要執行個體現在是待命執行個體。 雖然 AWS DMS 支援使用 Oracle `RESETLOGS`選項來開啟資料庫，`RESETLOGS`除非必要，否則永遠不要使用 。如需 `RESETLOGS` 的相關資訊，請參閱《Oracle 資料庫備份與復原使用者指南》**中的 [RMAN 資料修復概念](https://docs.oracle.com/en/database/oracle/oracle-database/19/bradv/rman-data-repair-concepts.html#GUID-1805CCF7-4AF2-482D-B65A-998192F89C2B)。 有效值：封存目的地 ID 範例：`--oracle-settings '{"AdditionalArchivedLogDestId": 2}'`  | 
|  `AddSupplementalLogging`  |  設定此屬性，以設定 Oracle 資料庫的資料表層級補充記錄。此屬性會根據資料表中繼資料，在針對遷移工作選取的所有資料表上啟用下列其中一項作業： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/dms/latest/userguide/CHAP_Source.Oracle.html) 預設值：false  有效值：true/false  範例：`--oracle-settings '{"AddSupplementalLogging": false}'`  如果使用此選項，您仍需要啟用前文所介紹的資料庫層級補充記錄。   | 
|  `AllowSelectNestedTables`  |  將此屬性設定為 true 以啟用包含巢狀資料表或已定義類型欄位的 Oracle 資料表的複寫。如需詳細資訊，請參閱[使用 Oracle 作為 來源複寫巢狀資料表 AWS DMS](#CHAP_Source.Oracle.NestedTables)。 預設值：false  有效值：true/false 範例：`--oracle-settings '{"AllowSelectNestedTables": true}'`  | 
|  `ArchivedLogDestId`  |  指定封存的重做日誌之目的地 ID。此值應該與 v\$1archived\$1log 檢視中 dest\$1id 資料行的數字相同。如果您使用其他還原日誌目的地，建議您使用 `AdditionalArchivedLogDestId` 屬性指定其他目的地 ID。這樣做可確保一開始就存取正確的日誌，提升效能。 預設值：1 有效值：數值  範例：`--oracle-settings '{"ArchivedLogDestId": 1}'`  | 
|  `ArchivedLogsOnly`  |  當此欄位設定為 Y 時， AWS DMS 只會存取封存的重做日誌。如果封存的重做日誌僅存放在 Oracle ASM 上，則需要授予 AWS DMS 使用者帳戶 ASM 權限。 預設值：N  有效值：Y/N  範例：`--oracle-settings '{"ArchivedLogsOnly": Y}'`  | 
|  `asmUsePLSQLArray` (僅 ECA)  |  使用 BinaryReader 擷取來源變更時，請使用此額外連線屬性 (ECA)。此設定可讓 DMS 在每個單一讀取執行緒的 ASM 層級緩衝 50 次讀取，同時使用 `parallelASMReadThreads` 屬性控制執行緒數目。當您設定此屬性時， AWS DMS 二進位讀取器會使用匿名 PL/SQL 區塊來擷取重做資料，並將其作為大型緩衝區傳回至複寫執行個體。這樣可以減少往返來源的次數。這可大幅改善來源擷取效能，但會導致 ASM 執行個體上的 PGA 記憶體耗用量升高。如果記憶體目標不夠，則可能會出現穩定性問題。您可以使用下列公式，來預估單一 DMS 任務的 ASM 執行個體 PGA 記憶體使用總量：`number_of_redo_threads * parallelASMReadThreads * 7 MB` 預設值：false 有效值：true/false ECA 範例：`asmUsePLSQLArray=true;`  | 
|  `ConvertTimestampWithZoneToUTC`  |  將此屬性設為 `true` 可將「TIMESTAMP WITH TIME ZONE」和「TIMESTAMP WITH LOCAL TIME ZONE」資料欄的時間戳記值轉換為 UTC。依預設，此屬性的值為「false」，而且會使用來源資料庫時區複寫資料。 預設值：false 有效值：true/false 範例：`--oracle-settings '{"ConvertTimestampWithZoneToUTC": true}'`  | 
|  `EnableHomogenousPartitionOps`  |  將此屬性設為 `true`，可針對 Oracle *同質*遷移啟用 Oracle 分割區和子分割區 DDL 操作的複寫。 請注意，此功能和增強功能已在 3.4.7 AWS DMS 版中推出。 預設值：false 有效值：true/false 範例：`--oracle-settings '{"EnableHomogenousPartitionOps": true}'`  | 
|  `EnableHomogenousTablespace`  |  設定此屬性可啟用同質資料表空間複寫，並在目標上相同資料表空間下建立現有的資料表或索引。 預設值：false 有效值：true/false 範例：`--oracle-settings '{"EnableHomogenousTablespace": true}'`  | 
|  `EscapeCharacter`  |  將此屬性設為逸出字元。此逸出字元可讓資料表對應運算式中的單一萬用字元發揮如同一般字元的作用。如需詳細資訊，請參閱[資料表映射中的萬用字元](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Wildcards.md)。 預設值：Null  有效值：萬用字元以外的任何字元 範例：`--oracle-settings '{"EscapeCharacter": "#"}'` 您只能針對資料表名稱使用 `escapeCharacter`。其不會從結構描述名稱或資料欄名稱逸出字元。  | 
|  `ExposeViews`  |  使用此屬性從檢視提取資料一次，但您無法將其用於進行中複寫。當您從檢視擷取資料時，檢視會顯示為目標結構描述上的資料表。 預設值：false 有效值：true/false 範例：`--oracle-settings '{"ExposeViews": true}'`  | 
|  `ExtraArchivedLogDestIds`  |  為一個或多個封存的重做日誌指定一個或多個目的地的 ID。這些 ID 是 v\$1archived\$1log 檢視中 dest\$1id 資料欄的值。在主要到單一設定或主要到多個待命設定中，搭配使用此設定和 ArchivedLogDestId 額外連線屬性。 使用 Oracle Data Guard 資料庫作為來源時，此設定在切換時很有幫助。在此情況下， AWS DMS 需要從哪些目的地取得封存重做日誌以讀取變更的相關資訊。 AWS DMS 需要此資訊，因為在切換前一個主要執行個體之後是待命執行個體。 有效值：封存目的地 ID 範例：`--oracle-settings '{"ExtraArchivedLogDestIds": 1}'`  | 
|  `FailTasksOnLobTruncation`  |  當設為 `true` 時，如果 LOB 資料行的實際大小大於指定的 `LobMaxSize`，此屬性會導致任務失敗。 如果任務設為有限 LOB 模式，且此選項設為 `true`，則任務會失敗，而不是截斷 LOB 資料。 預設值：false  有效值：布林值  範例：`--oracle-settings '{"FailTasksOnLobTruncation": true}'`  | 
|  `filterTransactionsOfUser` (僅 ECA)  |  使用此額外連線屬性 (ECA)，可讓 DMS 在使用 LogMiner 複寫 Oracle 中的資料時，忽略來自指定使用者的交易。您可以傳遞逗號分隔的使用者名稱值，但這些字母必須是全大寫。 ECA 範例：`filterTransactionsOfUser=USERNAME;`  | 
|  `NumberDataTypeScale`  |  指定小數位數。您可以選取小數位數上限 38，或者可以針對 FLOAT 選取 -1，或是針對 VARCHAR 選取 -2。根據預設，NUMBER 資料類型會轉換為精確度為 38、小數位數為 10。 預設值：10  有效值：-2 到 38 (VARCHAR 為 -2、FLOAT 為 -1) 範例：`--oracle-settings '{"NumberDataTypeScale": 12}'`  選取精確度組合 -1 (FLOAT) 或 -2 (VARCHAR)。DMS 支援 Oracle 支援的任何精確度-小數位數組合。如果精確度為 39 或以上，請選取 -2 (VARCHAR)。Oracle 資料庫的 NumberDataTypeScale 設定僅用於 NUMBER 資料類型 (沒有明確的精確度和小數位數定義)。您必須注意，不正確設定此設定時，可能會發生精確度損失。   | 
|  `OpenTransactionWindow`  |   提供以分鐘為單位的時間範圍，以檢查僅限 CDC 任務的任何開啟交易。 當您將 `OpenTransactionWindow` 設定為 1 或更高版本時，DMS 會使用 `SCN_TO_TIMESTAMP`將 SCN 值轉換為時間戳記值。由於 Oracle 資料庫限制，如果您指定太舊的 SCN 做為 CDC 起點，SCN\$1TO\$1TIMESTAMP 將會失敗並發生錯誤`ORA-08181`，而且您無法啟動僅限 CDC 的任務。 預設值：0  有效值：從 0 到 240 的整數 範例：`openTransactionWindow=15;`  | 
| OraclePathPrefix | 將此字串屬性設定為所需值，以使用 Binary Reader 擷取作為來源之 Amazon RDS for Oracle 的變更資料。這個值會指定存取重做日誌所用的預設 Oracle 根。如需詳細資訊，請參閱[設定 CDC 任務以將 Binary Reader 與 的 RDS for Oracle 來源搭配使用 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.CDC)。預設值：無 有效值：/rdsdbdata/db/ORCL\$1A/ 範例：`--oracle-settings '{"OraclePathPrefix": "/rdsdbdata/db/ORCL_A/"}'`  | 
| ParallelASMReadThreads |  設定此屬性來變更 DMS 為使用 Oracle Automatic Storage Management (ASM) 執行變更資料擷取 (CDC) 而設定的執行緒數目。您可以指定介於 2 (預設值) 與 8 (最大值) 之間的整數值。使用此屬性與 `ReadAheadBlocks` 屬性搭配。如需詳細資訊，請參閱[設定 CDC 任務以將 Binary Reader 與 的 RDS for Oracle 來源搭配使用 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.CDC)。 預設值：2  有效值：從 2 到 8 的整數 範例：`--oracle-settings '{"ParallelASMReadThreads": 6;}'`  | 
| ReadAheadBlocks |  設定此屬性來變更 DMS 為使用 Oracle Automatic Storage Management (ASM) 和非 ASM NAS 儲存體執行 CDC 而設定的預先讀取區塊數目。您可以指定介於 1000 （預設值） 和 2，000，000 （最大值） 之間的整數值。使用此屬性與 `ParallelASMReadThreads` 屬性搭配。如需詳細資訊，請參閱[設定 CDC 任務以將 Binary Reader 與 的 RDS for Oracle 來源搭配使用 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.CDC)。 預設值：1000  有效值：從 1000 到 2，000，000 的整數 範例：`--oracle-settings '{"ReadAheadBlocks": 150000}'`  | 
|  `ReadTableSpaceName`  |  當設為 `true` 時，此屬性支援資料表空間複寫。 預設值：false  有效值：布林值  範例：`--oracle-settings '{"ReadTableSpaceName": true}'`  | 
| ReplacePathPrefix | 將此屬性設定為 true，以使用 Binary Reader 擷取作為來源之 Amazon RDS for Oracle 的變更資料。此設定會通知 DMS 執行個體使用指定的 UsePathPrefix 設定來取代預設的 Oracle 根，以存取重做日誌。如需詳細資訊，請參閱[設定 CDC 任務以將 Binary Reader 與 的 RDS for Oracle 來源搭配使用 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.CDC)。預設值：false 有效值：true/false 範例：`--oracle-settings '{"ReplacePathPrefix": true}'`  | 
|  `RetryInterval`  |  指定重新傳送查詢之前，系統要等待的秒數。 預設值：5  有效值：從 1 開始的數值  範例：`--oracle-settings '{"RetryInterval": 6}'`  | 
|  `SecurityDbEncryptionName`  |  指定用於 Oracle 來源資料庫中資料行和資料表空間的透明資料加密 (TDE) 的金鑰名稱。如需在 Oracle 來源端點上設定此屬性及其關聯密碼的詳細資訊，請參閱 [支援使用 Oracle 做為 來源的加密方法 AWS DMS](#CHAP_Source.Oracle.Encryption)。 預設值：””  有效值：字串  範例：`--oracle-settings '{"SecurityDbEncryptionName": "ORACLE.SECURITY.DB.ENCRYPTION.Adg8m2dhkU/0v/m5QUaaNJEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"}'`  | 
|  `SpatialSdo2GeoJsonFunctionName`  |  針對移轉至 PostgreSQL 目標的 Oracle 版本 12.1 或較早來源，請使用此屬性將 SDO\$1GEOMETRY 轉換為 GEOJSON 格式。 根據預設， 會 AWS DMS 呼叫使用者必須存在且可存取的`SDO2GEOJSON`自訂 函數 AWS DMS 。或者，您也可以建立自己的自訂函數，模仿 `SDOGEOJSON` 的操作並設定 `SpatialSdo2GeoJsonFunctionName` 進行呼叫。 預設值：SDO2GEOJSON 有效值：字串  範例：`--oracle-settings '{"SpatialSdo2GeoJsonFunctionName": "myCustomSDO2GEOJSONFunction"}'`  | 
|  `StandbyDelayTime`  |  使用此屬性指定以分鐘為單位的備用系統同步延遲時間。如果來源是 Active Data Guard 待命資料庫，請使用此屬性指定主要資料庫和待命資料庫之間的時間延遲。 在 中 AWS DMS，您可以建立 Oracle CDC 任務，該任務使用 Active Data Guard 待命執行個體作為複寫進行中變更的來源。這麼做讓您不必再連線到可能負責生產的作用中資料庫。 預設值：0  有效值：數值  範例：`--oracle-settings '{"StandbyDelayTime": 1}'` **注意：**使用 DMS 3.4.6、3.4.7 及更高版本時，可選擇使用此連線設定。在最新版本的 DMS 3.4.6 和 3.4.7 版中，`dms_user` 應該具有 `V_$DATAGUARD_STATS` 的 `select` 許可，可允許 DMS 計算待命延遲時間。  | 
| UseAlternateFolderForOnline | 將此屬性設定為 true，以使用 Binary Reader 擷取作為來源之 Amazon RDS for Oracle 的變更資料。這會通知 DMS 執行個體使用任何指定的字首替換來存取所有線上重做日誌。如需詳細資訊，請參閱[設定 CDC 任務以將 Binary Reader 與 的 RDS for Oracle 來源搭配使用 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.CDC)。預設值：false 有效值：true/false 範例：`--oracle-settings '{"UseAlternateFolderForOnline": true}'`  | 
| UseBfile |  將此屬性設定為 Y，以使用 Binary Reader 公用程式擷取變更資料。將 `UseLogminerReader` 設定為 N 以便將此屬性設定為 Y。若要搭配使用 Binary Reader 和作為來源的 Amazon RDS for Oracle，您需要設定額外屬性。如需此設定和使用 Oracle Automatic Storage Management (ASM) 的詳細資訊，請參閱[使用 Oracle LogMiner 或 AWS DMS Binary Reader for CDC](#CHAP_Source.Oracle.CDC)。 附註：將此值設定為額外連線屬性 (ECA) 時，有效值為「Y」和「N」。將此值設為端點設定時，有效值為 `true` 和 `false`。 預設值：N  有效值：Y/N (將此值設為 ECA 時)；true /false (將此值設為端點設定時)。 範例：`--oracle-settings '{"UseBfile": Y}'`  | 
|  `UseLogminerReader`  |  將此屬性設定為 Y，使用 LogMiner 公用程式 (預設) 擷取變更資料。如果要 AWS DMS 將重做日誌存取為二進位檔案，請將此選項設為 N。將此選項設為 N 時，請同時新增設定 useBfile =Y。如需此設定值和使用 Oracle Automatic Storage Management (ASM) 的相關資訊，請參閱[使用 Oracle LogMiner 或 AWS DMS Binary Reader for CDC](#CHAP_Source.Oracle.CDC)。 附註：將此值設定為額外連線屬性 (ECA) 時，有效值為「Y」和「N」。將此值設為端點設定時，有效值為 `true` 和 `false`。 預設值：Y  有效值：Y/N (將此值設為 ECA 時)；true /false (將此值設為端點設定時)。 範例：`--oracle-settings '{"UseLogminerReader": Y}'`  | 
| UsePathPrefix | 將此字串屬性設定為所需值，以使用 Binary Reader 擷取作為來源之 Amazon RDS for Oracle 的變更資料。這個值會指定取代預設 Oracle 根所用的路徑字首，以存取重做日誌。如需詳細資訊，請參閱[設定 CDC 任務以將 Binary Reader 與 的 RDS for Oracle 來源搭配使用 AWS DMS](#CHAP_Source.Oracle.Amazon-Managed.CDC)。預設值：無 有效值：/rdsdbdata/log/ 範例：`--oracle-settings '{"UsePathPrefix": "/rdsdbdata/log/"}'`  | 

## Oracle 的來源資料類型
<a name="CHAP_Source.Oracle.DataTypes"></a>

的 Oracle 端點 AWS DMS 支援大多數 Oracle 資料類型。下表顯示使用 時支援的 Oracle 來源資料類型， AWS DMS 以及與 AWS DMS 資料類型的預設映射。

**注意**  
除了 LONG 和 LONG RAW 資料類型之外，從 Oracle 來源複寫到 Oracle 目標 (同質複寫**) 時，所有來源和目標資料類型都是相同的。但 LONG 的資料類型將對應到 CLOB，而 LONG RAW 資料類型將對應到 BLOB。

如需如何檢視從目標映射的資料類型資訊，請參閱您要使用的目標端點一節。

如需 AWS DMS 資料類型的詳細資訊，請參閱 [AWS Database Migration Service 的資料類型](CHAP_Reference.DataTypes.md)。


|  Oracle 資料類型  |  AWS DMS 資料類型  | 
| --- | --- | 
|  BINARY\$1FLOAT  |  REAL4  | 
|  BINARY\$1DOUBLE  |  REAL8  | 
|  BINARY  |  BYTES  | 
|  FLOAT (P)  |  如果精確度小於或等於 24，請使用 REAL4。 如果精確度大於 24，請使用 REAL8。  | 
|  NUMBER (P,S)  |  當小數位數大於 0 時，請使用 NUMERIC。 當小數位數為 0 時： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/dms/latest/userguide/CHAP_Source.Oracle.html) 當小數位數小於 0 時，請使用 REAL8。 | 
|  DATE  |  DATETIME  | 
|  INTERVAL\$1YEAR TO MONTH  |  STRING (使用間隔 year\$1to\$1month 指示)  | 
|  INTERVAL\$1DAY TO SECOND  |  STRING (使用間隔 day\$1to\$1second 指示)  | 
|  TIMESTAMP  |  DATETIME  | 
|  TIMESTAMP WITH TIME ZONE  |  STRING (使用 timestamp\$1with\$1timezone 指示)  | 
|  TIMESTAMP WITH LOCAL TIME ZONE  |  STRING (使用 timestamp\$1with\$1local\$1 timezone 指示)  | 
|  CHAR  |  STRING  | 
|  VARCHAR2  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/dms/latest/userguide/CHAP_Source.Oracle.html)  | 
|  NCHAR  |  WSTRING  | 
|  NVARCHAR2  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/dms/latest/userguide/CHAP_Source.Oracle.html)  | 
|  RAW  |  BYTES  | 
|  REAL  |  REAL8  | 
|  BLOB  |  BLOB 若要搭配 使用此資料類型 AWS DMS，您必須針對特定任務啟用 BLOB 資料類型的使用。 僅在包含主索引鍵的資料表中 AWS DMS 支援 BLOB 資料類型。  | 
|  CLOB  |  CLOB 若要搭配 使用此資料類型 AWS DMS，您必須針對特定任務啟用 CLOB 資料類型的使用。在 CDC 期間， 僅在包含主索引鍵的資料表中 AWS DMS 支援 CLOB 資料類型。  | 
|  NCLOB  |  NCLOB 若要搭配 使用此資料類型 AWS DMS，您必須針對特定任務啟用使用 NCLOB 資料類型。在 CDC 期間， 僅在包含主索引鍵的資料表中 AWS DMS 支援 NCLOB 資料類型。  | 
|  LONG  |  CLOB 批次最佳化套用模式 (TurboStream CDC 模式) 中不支援 LONG 資料類型。 若要搭配此資料類型使用 AWS DMS，請為特定任務啟用 LOBs。 在 CDC 或完全載入期間， 僅 AWS DMS 支援具有主索引鍵的資料表中的 LOB 資料類型。 此外， AWS DMS 不支援載入 LONG 資料欄的完整 LOB 模式。相反地，您可以使用有限 LOB 模式，將 LONG 資料欄遷移至 Oracle 目標。在有限的 LOB 模式中， 會將任何您設定為長於 64 KB 的 LONG 資料欄的資料 AWS DMS 截斷為 64 KB。如需 中 LOB 支援的詳細資訊 AWS DMS，請參閱 [設定 AWS DMS 任務中來源資料庫的 LOB 支援](CHAP_Tasks.LOBSupport.md)  | 
|  LONG RAW  |  BLOB 批次最佳化套用模式 (TurboStream CDC 模式) 中不支援 LONG RAW 資料類型。 若要搭配此資料類型使用 AWS DMS，請為特定任務啟用 LOBs。 在 CDC 或完全載入期間， 僅 AWS DMS 支援具有主索引鍵的資料表中的 LOB 資料類型。 此外， AWS DMS 不支援載入 LONG RAW 資料欄的完整 LOB 模式。相反地，您可以使用有限 LOB 模式，將 LONG RAW 資料欄遷移至 Oracle 目標。在有限 LOB 模式中， AWS DMS 會將長度超過 64 KB、您設為 LONG RAW 資料欄的任何資料截斷為 64 KB。如需 中 LOB 支援的詳細資訊 AWS DMS，請參閱 [設定 AWS DMS 任務中來源資料庫的 LOB 支援](CHAP_Tasks.LOBSupport.md)  | 
|  XMLTYPE  |  CLOB  | 
| SDO\$1GEOMETRY | BLOB (當 Oracle 到 Oracle 移轉時)CLOB (當 Oracle 到 PostgreSQL 遷移時) | 

不支援做為下列資料類型資料欄來源的 Oracle 資料表，也無法複寫。以這些資料類型複寫資料資料行會產生 null 資料行。
+ BFILE
+ ROWID
+ REF
+ UROWID
+ 使用者定義的資料類型
+ ANYDATA
+ VARRAY

**注意**  
不支援虛擬資料行。

### 移轉 Oracle 空間資料類型
<a name="CHAP_Source.Oracle.DataTypes.Spatial"></a>

*空間資料*可識別空間中，物件或位置的幾何圖形資訊。在 Oracle 資料庫中，空間物件的幾何描述儲存在類型為 SDO\$1GEOMETRY 的物件中。在此物件中，幾何描述儲存在使用者定義資料表的單一欄中的單一列中。

AWS DMS 支援將 Oracle 類型 SDO\$1GEOMETRY 從 Oracle 來源遷移至 Oracle 或 PostgreSQL 目標。

當您使用 遷移 Oracle 空間資料類型時 AWS DMS，請注意下列考量：
+ 移轉至 Oracle 目標時，請務必手動傳輸包含類型資訊的 USER\$1SDO\$1GEOM\$1METADATA 項目。
+ 從 Oracle 來源端點遷移至 PostgreSQL 目標端點時， 會 AWS DMS 建立目標資料欄。這些資料行具有預設幾何圖形和地理類型資訊，資訊中的 2D 維度和空間參考識別碼 (SRID) 等於零 (0)。例如，`GEOMETRY, 2, 0`。
+ 對於遷移至 PostgreSQL 目標的 Oracle 版本 12.1 或更早的來源，請使用 `SDO2GEOJSON` 函數或 `spatialSdo2GeoJsonFunctionName` 額外連線屬性，將 `SDO_GEOMETRY` 物件轉換為 `GEOJSON` 格式。如需詳細資訊，請參閱[使用 Oracle 做為 來源時的端點設定 AWS DMS](#CHAP_Source.Oracle.ConnectionAttrib)。
+ AWS DMS 僅支援完整 LOB 模式的 Oracle 空間資料欄遷移。 AWS DMS 不支援有限 LOB 或內嵌 LOB 模式。如需 LOB 模式的詳細資訊，請參閱[設定 AWS DMS 任務中來源資料庫的 LOB 支援](CHAP_Tasks.LOBSupport.md)。
+ 由於 AWS DMS 僅支援遷移 Oracle 空間資料欄的完整 LOB 模式，因此資料欄的資料表需要主索引鍵和唯一索引鍵。如果資料表沒有主索引鍵和唯一索引鍵，則會從遷移中略過資料表。

# 使用 Microsoft SQL Server 資料庫做為 的來源 AWS DMS
<a name="CHAP_Source.SQLServer"></a>

使用 從一或多個 Microsoft SQL Server 資料庫遷移資料 AWS DMS。使用 SQL Server 資料庫做為來源，您可以將資料遷移至另一個 SQL Server 資料庫，或遷移至其他 AWS DMS 支援的其中一個資料庫。

如需 AWS DMS 支援做為來源之 SQL Server 版本的資訊，請參閱 [的來源 AWS DMS](CHAP_Introduction.Sources.md)。

SQL Server 資料庫可安裝在您網路的任何電腦上。使用 AWS DMS需要有具有所選任務類型來源資料庫適當存取權限的 SQL Server 帳戶。如需詳細資訊，請參閱[SQL Server 任務的許可](#CHAP_Source.SQLServer.Permissions)。

AWS DMS 支援從 SQL Server 的具名執行個體遷移資料。建立來源端點時，您可以在伺服器名稱中使用以下符號。

```
IPAddress\InstanceName
```

例如，以下是正確的來源端點伺服器名稱。在此，名稱的第一部分是伺服器的 IP 地址，第二部分是 SQL Server 執行個體名稱 (在本範例中為 SQLTest)。

```
10.0.0.25\SQLTest
```

此外，取得您的 SQL Server 具名執行個體接聽的連接埠號碼，並使用它來設定 AWS DMS 來源端點。

**注意**  
連接埠 1433 是 Microsoft SQL 伺服器的預設值。但是，每次 SQL Server 啟動時都會變更的動態連接埠，以及用來透過防火牆連線至 SQL Server 的特定靜態連接埠號碼也經常使用。因此，當您建立 AWS DMS 來源端點時，想要知道 SQL Server 具名執行個體的實際連接埠號碼。

您可以使用 SSL 加密您 SQL Server 端點與複寫執行個體之間的連線。如需使用 SSL 搭配 SQL Server 端點的詳細資訊，請參閱[搭配 使用 SSL AWS Database Migration Service](CHAP_Security.SSL.md)。

您可以使用 CDC 從 SQL Server 資料庫進行持續遷移。如需為 CDC 設定來源 SQL 伺服器資料庫的詳細資訊，請參閱 [從 SQL Server 擷取持續複寫的資料變更](CHAP_Source.SQLServer.CDC.md)。

如需使用 SQL Server 來源資料庫和 的其他詳細資訊 AWS DMS，請參閱以下內容。

**Topics**
+ [使用 SQL Server 做為 來源的限制 AWS DMS](#CHAP_Source.SQLServer.Limitations)
+ [SQL Server 任務的許可](#CHAP_Source.SQLServer.Permissions)
+ [使用來自 SQL Server 來源進行中複寫 (CDC) 的先決條件](#CHAP_Source.SQLServer.Prerequisites)
+ [支援的 SQL Server 壓縮方法](#CHAP_Source.SQLServer.Compression)
+ [使用自我管理 SQL Server AlwaysOn 可用群組](#CHAP_Source.SQLServer.AlwaysOn)
+ [使用 SQL Server 做為 來源時的端點設定 AWS DMS](#CHAP_Source.SQLServer.ConnectionAttrib)
+ [SQL Server 的來源資料類型](#CHAP_Source.SQLServer.DataTypes)
+ [從 SQL Server 擷取持續複寫的資料變更](CHAP_Source.SQLServer.CDC.md)

## 使用 SQL Server 做為 來源的限制 AWS DMS
<a name="CHAP_Source.SQLServer.Limitations"></a>

使用 SQL Server 資料庫做為 AWS DMS來源時有下列限制：
+ 資料行的身分屬性不會遷移到目標資料庫資料行。
+ SQL Server 端點不支援使用具有稀疏資料欄的資料表。
+ 不支援 Windows 驗證。
+ 不複寫 SQL Server 計算欄位的變更。
+ 不支援時態資料表。
+ 不支援 SQL Server 分割區切換。
+ 使用 WRITETEXT 和 UPDATETEXT 公用程式時， AWS DMS 不會擷取套用至來源資料庫的事件。
+ 不支援以下資料處理語言 (DML) 模式。

  ```
  SELECT * INTO new_table FROM existing_table
  ```
+ 使用 SQL Server 做為來源時，不支援資料行層級的加密。
+ AWS DMS 不支援 SQL Server 2008 或 SQL Server 2008 R2 做為來源的伺服器層級稽核。這是因為 SQL Server 2008 和 2008 R2 的已知問題。例如，執行下列命令會導致 AWS DMS 失敗。

  ```
  USE [master]
  GO 
  ALTER SERVER AUDIT [my_audit_test-20140710] WITH (STATE=on)
  GO
  ```
+ 使用 SQL Server 做為來源時，完整 lob 模式不支援幾何和地理資料欄。請改用有限 lob 模式或將 `InlineLobMaxSize` 任務設定設為使用內嵌 lob 模式。
+ 在複寫任務中使用 Microsoft SQL Server 來源資料庫時，如果您移除任務，系統不會移除 SQL Server 複寫發布者定義。Microsoft SQL Server 系統管理員必須從 Microsoft SQL Server 中刪除這些定義。
+ 支援僅完全載入任務，從結構描述繫結和非結構描述繫結檢視遷移資料。
+ 不支援使用 sp\$1rename 重新命名資料表 (例如 `sp_rename 'Sales.SalesRegion', 'SalesReg;)`)
+ 不支援使用 sp\$1rename 重新命名欄 (例如 `sp_rename 'Sales.Sales.Region', 'RegID', 'COLUMN';`)
+ AWS DMS 不支援變更處理來設定和取消設定資料欄預設值 （搭配 `ALTER TABLE`陳述式使用 `ALTER COLUMN SET DEFAULT`子句）。
+ AWS DMS 不支援變更處理以設定資料欄 nullability （使用 `ALTER COLUMN [SET|DROP] NOT NULL`子句搭配 `ALTER TABLE` 陳述式）。
+ 使用 SQL Server 2012 和 SQL Server 2014，當使用 DMS 複寫搭配可用群組時，無法將分佈資料庫放置在可用群組中。SQL 2016 支援將分佈資料庫放置在可用群組，但在合併、雙向或對等式複寫拓撲所用的分佈資料庫除外。
+ 對於分割資料表， AWS DMS 不支援每個分割區的不同資料壓縮設定。
+ 將值插入至 SQL Server 空間資料類型 (GEOGRAPHY 和 GEOMETRY) 時，您可以忽略空間參考系統識別碼 (SRID) 屬性或指定不同的數字。使用空間資料類型複寫資料表時， 會將 SRID AWS DMS 取代為預設 SRID (GEOMETRY 為 0，GEOGRAPHY 為 4326)。
+ 如果未針對 MS-REPLICATION 或 MS-CDC 設定資料庫，您仍可擷取沒有主索引鍵的資料表，但系統只會擷取 INSERT/DELETE DML 事件。系統會忽略 UPDATE 和 TRUNCATE TABLE 事件。
+ 不支援 Columnstore 索引。
+ 不支援記憶體最佳化資料表 (使用記憶體內 OLTP)。
+ 使用包含多個資料行的主索引鍵複寫資料表時，不支援在完全載入期間更新主索引鍵資料行。
+ 不支援延遲耐久性。
+ 因為 RDS 執行備份的方式，`readBackupOnly=true` 端點設定 (額外的連線屬性) 不適用於 RDS for SQL Server 來源執行個體。
+ RDS 使用者沒有執行 SQL Server 預存程序 (`sp_repldone`) 的存取權，因此 `EXCLUSIVE_AUTOMATIC_TRUNCATION` 不適用於 Amazon RDS SQL Server 來源執行個體。
+ AWS DMS 不會擷取截斷的命令。
+ AWS DMS 不支援從開啟加速資料庫復原 (ADR) 的資料庫複寫。
+ AWS DMS 不支援在單一交易中擷取資料定義語言 (DDL) 和資料處理語言 (DML) 陳述式。
+ AWS DMS 不支援複寫資料層應用程式套件 (DACPAC)。
+ 包含主索引鍵或唯一索引以及更新多個資料列的 UPDATE 陳述式，可能會在您將變更套用至目標資料庫時造成衝突。例如，當目標資料庫將更新套用為 INSERT 和 DELETE 陳述式 (而不是單一 UPDATE 陳述式) 時，就可能會發生這種情況。使用批次最佳化套用模式時，資料表可能會遭忽略。使用交易式套用模式時，UPDATE 作業可能會導致違反限制。若要避免此問題，請重新載入相關資料表。或者，在「套用例外」控制資料表 (`dmslogs.awsdms_apply_exceptions`) 中找出有問題的記錄，然後在目標資料庫中手動編輯這些記錄。如需詳細資訊，請參閱[變更處理調校設定](CHAP_Tasks.CustomizingTasks.TaskSettings.ChangeProcessingTuning.md)。
+ AWS DMS 不支援資料表和結構描述的複寫，其中名稱包含下列集合中的特殊字元。

  `\\ -- \n \" \b \r ' \t ;` 
+ 不支援資料遮罩。在沒有遮罩的情況下 AWS DMS 遷移遮罩的資料。
+ AWS DMS 最多可複寫 32，767 個具有主索引鍵的資料表，每個資料表最多可複寫 1，000 個資料欄。這是因為 會為每個複寫資料表 AWS DMS 建立 SQL Server 複寫文章，而 SQL Server 複寫文章具有這些限制。
+ 使用變更資料擷取 (CDC) 時，您必須將組成唯一索引的所有資料欄定義為 `NOT NULL`。如果不符合此需求，則會導致 SQL Server 系統錯誤 22838。
+ 如果 SQL Server 從作用中交易日誌封存到備份日誌，或從作用中交易日誌截斷它們，您可能會遺失事件。

以下限制在存取備份交易日誌時適用：
+ 不支援加密備份。
+ 不支援儲存在 URL 或 Windows Azure 上的備份。
+ AWS DMS doe 不支援直接從其他共用資料夾的檔案層級直接處理交易日誌備份。
+ 對於 Amazon RDS for Microsoft SQL Server 以外的雲端 SQL Server 來源， 僅 AWS DMS 支援使用作用中交易日誌的持續複寫 (CDC)。您無法搭配 CDC 使用備份日誌。如果 SQL 伺服器將它們從作用中交易日誌封存到備份日誌，或在 DMS 讀取之前從作用中交易日誌截斷它們，您可能會遺失事件。
+ 對於 Amazon RDS for Microsoft SQL Server 來源， AWS DMS 3.5.2 及更新版本僅支援使用作用中交易日誌進行持續複寫 (CDC)，因為 DMS 無法使用 CDC 存取備份日誌。如果 RDS for SQL Server 從作用中交易日誌封存到備份日誌，或在 DMS 讀取之前從作用中交易日誌截斷它們，您可能會遺失事件。此限制不適用於 3.5.3 版及更高 AWS DMS 版本。
+ AWS DMS 不支援 Amazon RDS Proxy for SQL Server 的 CDC 做為來源。
+ 如果 SQL Server 來源在完全載入任務期間無法使用， AWS DMS 可能會在多次重新連線嘗試後將任務標記為已完成，即使資料遷移仍不完整。在此案例中，目標資料表僅包含連線遺失之前遷移的記錄，可能會建立來源與目標系統之間的資料不一致。若要確保資料完整性，您必須完全重新啟動完全載入任務，或重新載入受連線中斷影響的特定資料表。

## SQL Server 任務的許可
<a name="CHAP_Source.SQLServer.Permissions"></a>

**Topics**
+ [僅限完全載入任務的許可](#CHAP_Source.SQLServer.Permissions.FullLoad)
+ [具有進行中複寫任務的許可](#CHAP_Source.SQLServer.Permissions.Ongoing)

### 僅限完全載入任務的許可
<a name="CHAP_Source.SQLServer.Permissions.FullLoad"></a>

若要執行僅限完全載入任務，需要下列許可。請注意， AWS DMS 不會建立 `dms_user` 登入。如需建立 SQL Server 登入的相關資訊，請參閱 *Microsoft 文件*中的[建立資料庫使用者](https://learn.microsoft.com/en-us/sql/relational-databases/security/authentication-access/create-a-database-user?view=sql-server-ver16)主題。

```
USE db_name;
                
                CREATE USER dms_user FOR LOGIN dms_user; 
                ALTER ROLE [db_datareader] ADD MEMBER dms_user; 
                GRANT VIEW DATABASE STATE to dms_user;
                GRANT VIEW DEFINITION to dms_user;
                
                USE master;
                
                GRANT VIEW SERVER STATE TO dms_user;
```

### 具有進行中複寫任務的許可
<a name="CHAP_Source.SQLServer.Permissions.Ongoing"></a>

您可以使用 DMS 設定自我管理的 SQL Server 執行個體進行持續複寫，無論是否使用 `sysadmin`角色。對於無法授予`sysadmin`角色的 SQL Server 執行個體，請確定 DMS 使用者具有如下所述的權限。

**從自我管理 SQL Server 資料庫設定持續複寫的許可**

1. 使用 SQL Server Management Studio (SSMS) 或如先前中所述，使用密碼身分驗證建立新的 SQL Server 帳戶[僅限完全載入任務的許可](#CHAP_Source.SQLServer.Permissions.FullLoad)，例如 `self_managed_user`。

1. 執行下列`GRANT`命令：

   ```
   GRANT VIEW SERVER STATE TO self_managed_user;
   
   USE msdb;
       GRANT SELECT ON msdb.dbo.backupset TO self_managed_user;
       GRANT SELECT ON msdb.dbo.backupmediafamily TO self_managed_user;
       GRANT SELECT ON msdb.dbo.backupfile TO self_managed_user;
       
   USE db_name;
       CREATE USER self_managed_user FOR LOGIN self_managed_user;
       ALTER ROLE [db_owner] ADD MEMBER self_managed_user;
       GRANT VIEW DEFINITION to self_managed_user;
   ```

1. 除了上述許可之外，使用者還需要下列其中一項：
   + 使用者必須是`sysadmin`固定伺服器角色的成員
   + 組態和許可，如 [在可用群組環境中的 SQL Server 上設定進行中複寫：而不使用 sysadmin 角色](CHAP_Source.SQLServer.CDC.md#CHAP_SupportScripts.SQLServer.ag)或 中所述[在獨立 SQL Server 上設定進行中複寫：沒有 sysadmin 角色](CHAP_Source.SQLServer.CDC.md#CHAP_SupportScripts.SQLServer.standalone)，取決於您的來源組態。

#### 從雲端 SQL Server 資料庫設定持續複寫的許可
<a name="CHAP_Source.SQLServer.Permissions.Cloud"></a>

雲端託管 SQL Server 執行個體是在 Amazon RDS for Microsoft SQL Server、Azure SQL 受管執行個體或 DMS 支援的任何其他受管雲端 SQL Server 執行個體上執行的執行個體。

使用 SQL Server Management Studio (SSMS) 或如先前中所述，使用密碼身分驗證建立新的 SQL Server 帳戶[僅限完全載入任務的許可](#CHAP_Source.SQLServer.Permissions.FullLoad)，例如 `rds_user`。

執行下列授予命令。

```
GRANT VIEW SERVER STATE TO rds_user;
```

對於 Amazon RDS for Microsoft SQL Server 來源，DMS 3.5.3 版及更高版本支援讀取交易日誌備份。為了確保 DMS 能夠存取日誌備份，除了上述之外，還可以在 RDS SQL Server 來源上授予`master`使用者權限或下列權限：

```
USE msdb;
    GRANT EXEC ON msdb.dbo.rds_dms_tlog_download TO rds_user;
    GRANT EXEC ON msdb.dbo.rds_dms_tlog_read TO rds_user;
    GRANT EXEC ON msdb.dbo.rds_dms_tlog_list_current_lsn TO rds_user;
    GRANT EXEC ON msdb.dbo.rds_task_status TO rds_user;
    
USE db_name;
    CREATE USER rds_user FOR LOGIN rds_user;
    ALTER ROLE [db_owner] ADD MEMBER rds_user;
    GRANT VIEW DEFINITION to rds_user;
```

對於 Amazon Azure SQL 受管執行個體，請授予下列權限：

```
GRANT SELECT ON msdb.dbo.backupset TO rds_user;
GRANT SELECT ON msdb.dbo.backupmediafamily TO rds_user;
GRANT SELECT ON msdb.dbo.backupfile TO rds_user;
```

## 使用來自 SQL Server 來源進行中複寫 (CDC) 的先決條件
<a name="CHAP_Source.SQLServer.Prerequisites"></a>

您可以對內部部署或 Amazon EC2 的自我管理 SQL Server 資料庫，或 Amazon RDS 或 Microsoft Azure SQL 受管執行個體的雲端資料庫上，使用進行中複寫 (變更資料擷取，也就是 CDC)。

在 SQL Server 資料庫做為 AWS DMS時使用進行中複寫，會特別提出下列要求：
+ 您必須針對完整備份設定 SQL Server，而且必須先執行備份，再開始複寫資料。
+ 復原模型必須設定為 **Bulk logged (大量記錄)** 或 **Full (完整)**。
+ 不支援將 SQL Server 備份到多個磁碟。如果將備份定義為透過不同磁碟將資料庫備份寫入多個檔案，則 AWS DMS 無法讀取資料且 AWS DMS 任務失敗。
+ 針對自我管理 SQL Server 來源，當您移除任務時，不會移除 DMS CDC 任務使用的來源 SQL Server 複寫發布者定義。SQL Server 系統管理員必須從 SQL Server 刪除這些自我管理來源的定義。
+ 在 CDC 期間， AWS DMS 需要查詢 SQL Server 交易日誌備份以讀取變更。 AWS DMS 不支援使用*非*原生格式的第三方備份軟體建立的 SQL Server 交易日誌備份。若要支援*使用*原生格式並使用第三方備份軟體建立的交易日誌備份，請將 `use3rdPartyBackupDevice=Y` 連線屬性新增至來源端點。
+ 針對自我管理 SQL Server 來源，請注意，在近期建立的資料表發行前，SQL Server 不會擷取其變更。當資料表新增至 SQL Server 來源時， AWS DMS 管理建立發佈。不過，此程序可能需要幾分鐘。此延遲期間對新建立資料表的操作，不會擷取或複寫到目標。
+ AWS DMS 變更資料擷取需要在 SQL Server 中開啟完整交易記錄。若要在 SQL Server 中開啟完整交易記錄，請啟用 MS-REPLICATION 或 CHANGE DATA CAPTURE (CDC)。
+ 在 MS CDC 擷取作業處理這些變更前，都不會將 SQL Server *tlog* 項目標示為重複使用。
+ 不支援記憶體最佳化資料表的 CDC 操作。此限制適用於 SQL Server 2014 (初次引入功能的版本) 和更高版本。
+ AWS DMS 根據預設，變更資料擷取需要 Amazon EC2 或現場部署 SQL 伺服器上的分發資料庫做為來源。因此，請確定您已啟動分發者，同時為具有主索引鍵的資料表設定 MS 複寫。

## 支援的 SQL Server 壓縮方法
<a name="CHAP_Source.SQLServer.Compression"></a>

請注意， AWS DMS中下列與支援 SQL Server 壓縮方法的相關資訊：
+ AWS DMS 支援 SQL Server 2008 版及更新版本中的資料列/頁面壓縮。
+ AWS DMS 不支援 Vardecimal 儲存格式。
+ AWS DMS 不支援稀疏資料欄和單欄式結構壓縮。

## 使用自我管理 SQL Server AlwaysOn 可用群組
<a name="CHAP_Source.SQLServer.AlwaysOn"></a>

SQL Server Always On 可用群組功能提供高可用性和災難復原，可作為資料庫鏡像的企業級替代方案。

在 中 AWS DMS，您可以從單一主要或次要可用性群組複本遷移變更。

### 使用主要可用群組複本
<a name="CHAP_Source.SQLServer.AlwaysOn.Primary"></a>

 

**若要使用主要可用性群組做為 中的來源 AWS DMS，請執行下列動作：**

1. 啟用可用性複本之所有 SQL Server 執行個體的分佈選項。如需詳細資訊，請參閱[在自我管理的 SQL 伺服器上設定進行中複寫](CHAP_Source.SQLServer.CDC.md#CHAP_Source.SQLServer.CDC.MSCDC)。

1. 在 AWS DMS 主控台中，開啟 SQL Server 來源資料庫設定。針對**伺服器名稱**，指定為可用群組接聽程式設定的網域名稱服務 (DNS) 名稱或 IP 地址。

當您第一次啟動 AWS DMS 任務時，可能需要比平常更長的時間才能開始。較慢的原因是因為可用群組伺服器正在複寫資料表文章的建立。

### 使用次要可用群組複本
<a name="CHAP_Source.SQLServer.AlwaysOn.Secondary"></a>

**若要使用次要可用性群組做為 中的來源 AWS DMS，請執行下列動作：**

1. 使用與 AWS DMS 來源端點使用者所使用的相同登入資料來連線至個別複本。

1. 確保您的 AWS DMS 複寫執行個體可以解析所有現有複本的 DNS 名稱，並連接到它們。您可以使用下列 SQL 查詢來取得所有複本的 DNS 名稱。

   ```
   select ar.replica_server_name, ar.endpoint_url from sys.availability_replicas ar
   JOIN sys.availability_databases_cluster adc
   ON adc.group_id = ar.group_id AND adc.database_name = '<source_database_name>';
   ```

1. 建立來源端點時，請為端點的**伺服器名稱**或端點祕密的**伺服器地址**指定可用群組接聽程式的 DNS 名稱。如需可用群組接聽程式的詳細資訊，請參閱 SQL Server 文件中的[什麼是可用群組接聽程式？](https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/availability-group-listener-overview?view=sql-server-ver15)。

   您可以使用公有 DNS 伺服器或內部部署 DNS 伺服器，來解析可用群組接聽程式、主要複本和次要複本。若要使用內部部署 DNS 伺服器，請設定 Amazon Route 53 Resolver。如需詳細資訊，請參閱[使用自己的內部部署名稱伺服器](CHAP_BestPractices.md#CHAP_BestPractices.Rte53DNSResolver)。

1. 請將下列連線額外屬性新增至來源端點。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/dms/latest/userguide/CHAP_Source.SQLServer.html)

1. 啟用可用群組中所有複本上之分佈選項。將所有節點新增至分發者清單。如需詳細資訊，請參閱[設定分佈](CHAP_Source.SQLServer.CDC.md#CHAP_Source.SQLServer.CDC.MSCDC.Setup)。

1. 在主要讀寫複本上執行下列查詢，以啟用資料庫的發布功能。您只針對資料庫執行一次此查詢。

   ```
   sp_replicationdboption @dbname = N'<source DB name>', @optname = N'publish', @value = N'true';
   ```



#### 限制
<a name="CHAP_Source.SQLServer.AlwaysOn.Secondary.limitations"></a>

下列是使用次要可用群組複本的限制：
+ AWS DMS 使用唯讀可用性群組複本做為來源時， 不支援保護。如需詳細資訊，請參閱[使用 SQL Server 做為 來源時的端點設定 AWS DMS](#CHAP_Source.SQLServer.ConnectionAttrib)。
+ AWS DMS 使用唯讀可用性群組複本做為來源時， 不支援`setUpMsCdcForTables`額外的連線屬性。如需詳細資訊，請參閱[使用 SQL Server 做為 來源時的端點設定 AWS DMS](#CHAP_Source.SQLServer.ConnectionAttrib)。
+ AWS DMS 從 3.4.7 版開始， 可以使用自我管理次要可用性群組複本做為持續複寫 （變更資料擷取或 CDC) 的來源資料庫。不支援 Cloud SQL Server 異地同步備份僅供讀取複本。如果您使用舊版 AWS DMS，請確定您使用主要可用性群組複本做為 CDC 的來源資料庫。

#### 容錯移轉至其他節點
<a name="CHAP_Source.SQLServer.AlwaysOn.Secondary.failover"></a>

如果您將端點`ApplicationIntent`的額外連線屬性設定為 `ReadOnly`，您的 AWS DMS 任務會連線至具有最高唯讀路由優先順序的唯讀節點。然後，當優先順序最高的唯讀節點無法使用時，其會容錯移轉至可用群組中的其他唯讀節點。如果您未設定 `ApplicationIntent`，您的 AWS DMS 任務只會連線到可用性群組中的主要 （讀取/寫入） 節點。

## 使用 SQL Server 做為 來源時的端點設定 AWS DMS
<a name="CHAP_Source.SQLServer.ConnectionAttrib"></a>

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

下列資料表顯示您可以在將 SQL Server 作為來源搭配使用的端點設定。

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

## SQL Server 的來源資料類型
<a name="CHAP_Source.SQLServer.DataTypes"></a>

使用 SQL Server 做為 來源的資料遷移 AWS DMS 支援大多數 SQL Server 資料類型。下表顯示使用 時支援的 SQL Server 來源資料類型， AWS DMS 以及來自 AWS DMS 資料類型的預設映射。

如需如何檢視從目標映射的資料類型資訊，請參閱您要使用的目標端點一節。

如需 AWS DMS 資料類型的詳細資訊，請參閱 [AWS Database Migration Service 的資料類型](CHAP_Reference.DataTypes.md)。


|  SQL Server 資料類型  |  AWS DMS 資料類型  | 
| --- | --- | 
|  BIGINT  |  INT8  | 
|  BIT  |  BOOLEAN  | 
|  DECIMAL  |  NUMERIC  | 
|  INT  |  INT4  | 
|  MONEY  |  NUMERIC  | 
|  NUMERIC (p,s)  |  NUMERIC   | 
|  SMALLINT  |  INT2  | 
|  SMALLMONEY  |  NUMERIC  | 
|  TINYINT  |  UINT1  | 
|  REAL  |  REAL4  | 
|  FLOAT  |  REAL8  | 
|  DATETIME  |  DATETIME  | 
|  DATETIME2 (SQL Server 2008 和更高版本)  |  DATETIME  | 
|  SMALLDATETIME  |  DATETIME  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  DATETIMEOFFSET  |  WSTRING  | 
|  CHAR  |  STRING  | 
|  VARCHAR  |  STRING  | 
|  VARCHAR (max)  |  CLOB TEXT 若要搭配 使用此資料類型 AWS DMS，您必須針對特定任務啟用 CLOB 資料類型的使用。 針對 SQL Server 資料表，即使未變更 SQL Server 中 LOB 資料欄值的 UPDATE 陳述式， 也會 AWS DMS 更新目標中的 LOB 資料欄。 在 CDC 期間， 僅在包含主索引鍵的資料表中 AWS DMS 支援 CLOB 資料類型。  | 
|  NCHAR  |  WSTRING  | 
|  NVARCHAR (長度)  |  WSTRING  | 
|  NVARCHAR (max)  |  NCLOB NTEXT 若要搭配 使用此資料類型 AWS DMS，您必須針對特定任務啟用 SupportLobs。如需啟用 Lob 支援的詳細資訊，請參閱[設定 AWS DMS 任務中來源資料庫的 LOB 支援](CHAP_Tasks.LOBSupport.md)。 針對 SQL Server 資料表，即使未變更 SQL Server 中 LOB 資料欄值的 UPDATE 陳述式， 也會 AWS DMS 更新目標中的 LOB 資料欄。 在 CDC 期間， 僅在包含主索引鍵的資料表中 AWS DMS 支援 CLOB 資料類型。  | 
|  BINARY  |  BYTES  | 
|  VARBINARY  |  BYTES  | 
|  VARBINARY (max)  |  BLOB IMAGE 針對 SQL Server 資料表，即使未變更 SQL Server 中 LOB 資料欄值的 UPDATE 陳述式， 也會 AWS DMS 更新目標中的 LOB 資料欄。 若要搭配 使用此資料類型 AWS DMS，您必須針對特定任務啟用 BLOB 資料類型的使用。 AWS DMS 僅在包含主索引鍵的資料表中支援 BLOB 資料類型。  | 
|  TIMESTAMP  |  BYTES  | 
|  UNIQUEIDENTIFIER  |  STRING  | 
|  HIERARCHYID   |  複寫到 SQL Server 目標端點時請使用 HIERARCHYID。 複寫到所有其他目標端點時使用 WSTRING (250)。  | 
|  XML  |  NCLOB 針對 SQL Server 資料表，即使未變更 SQL Server 中 LOB 資料欄值的 UPDATE 陳述式， 也會 AWS DMS 更新目標中的 LOB 資料欄。 若要搭配 使用此資料類型 AWS DMS，您必須針對特定任務啟用使用 NCLOB 資料類型。 在 CDC 期間， 僅在包含主索引鍵的資料表中 AWS DMS 支援 NCLOB 資料類型。  | 
|  GEOMETRY  |  複寫到支援此資料類型的目標端點時，請使用 GEOMETRY。 複寫到不支援此資料類型的目標端點時，請使用 CLOB。  | 
|  GEOGRAPHY  |  複寫到支援此資料類型的目標端點時，請使用 GEOGRAPHY。 複寫到不支援此資料類型的目標端點時，請使用 CLOB。  | 

AWS DMS 不支援包含具有下列資料類型之欄位的資料表。
+ CURSOR
+ SQL\$1VARIANT
+ TABLE

**注意**  
使用者定義的資料類型是否受支援，依其基本類型而定。例如，以 DATETIME 為基礎的使用者定義資料類型，視為 DATETIME 資料類型處理。

# 從 SQL Server 擷取持續複寫的資料變更
<a name="CHAP_Source.SQLServer.CDC"></a>

本主題說明如何在 SQL Server 來源上設定 CDC 複寫。

**Topics**
+ [在內部部署或 Amazon EC2 上擷取自我管理 SQL Server 的資料變更](#CHAP_Source.SQLServer.CDC.Selfmanaged)
+ [設定雲端 SQL Server 資料庫執行個體的進行中複寫](#CHAP_Source.SQLServer.Configuration)

## 在內部部署或 Amazon EC2 上擷取自我管理 SQL Server 的資料變更
<a name="CHAP_Source.SQLServer.CDC.Selfmanaged"></a>

若要從來源 Microsoft SQL Server 資料庫擷取變更，請確定資料庫已設定為完整備份。在完整復原模式或大量記錄模式下設定資料庫。

對於自我管理的 SQL Server 來源， AWS DMS 會使用下列項目：

**MS-Replication**  
針對具有主索引鍵的資料表擷取變更。您可以為來源 SQL Server 執行個體上的 AWS DMS 端點使用者提供 sysadmin 權限，以自動設定此項目。或者，您可以遵循本節中的步驟來準備來源，並使用沒有 AWS DMS 端點 sysadmin 權限的使用者。

**MS-CDC**  
針對不具有主索引鍵的資料表擷取變更。必須在資料庫層級啟用 MS-CDC，而且是針對所有資料表個別啟用。

設定 SQL Server 資料庫進行中複寫 (CDC) 時，您可以執行下列其中一項：
+ 使用 sysadmin 角色設定進行中複寫。
+ 設定進行中複寫不使用 sysadmin 角色。

**注意**  
您可以使用下列指令碼來尋找沒有主索引鍵或唯一索引鍵的所有資料表：  

```
USE [DBname]
SELECT SCHEMA_NAME(schema_id) AS schema_name, name AS table_name
FROM sys.tables
WHERE OBJECTPROPERTY(object_id, 'TableHasPrimaryKey') = 0
        AND  OBJECTPROPERTY(object_id, 'TableHasUniqueCnst') = 0
ORDER BY schema_name, table_name;
```

### 在自我管理的 SQL 伺服器上設定進行中複寫
<a name="CHAP_Source.SQLServer.CDC.MSCDC"></a>

本節包含的相關資訊說明的是，在使用或不使用 sysadmin 角色的自我管理 SQL 伺服器上如何設定進行中複寫。

**Topics**
+ [在自我管理的 SQL Server 上設定進行中複寫：使用 sysadmin 角色](#CHAP_Source.SQLServer.CDC.MSCDC.Sysadmin)
+ [在獨立 SQL Server 上設定進行中複寫：沒有 sysadmin 角色](#CHAP_SupportScripts.SQLServer.standalone)
+ [在可用群組環境中的 SQL Server 上設定進行中複寫：而不使用 sysadmin 角色](#CHAP_SupportScripts.SQLServer.ag)

#### 在自我管理的 SQL Server 上設定進行中複寫：使用 sysadmin 角色
<a name="CHAP_Source.SQLServer.CDC.MSCDC.Sysadmin"></a>

AWS DMS SQL Server 的持續複寫對具有主索引鍵的資料表使用原生 SQL Server 複寫，並為沒有主索引鍵的資料表變更資料擷取 (CDC)。

在設定進行中複寫之前，請參閱[使用來自 SQL Server 來源進行中複寫 (CDC) 的先決條件](CHAP_Source.SQLServer.md#CHAP_Source.SQLServer.Prerequisites)。

對於具有主索引鍵的資料表， 通常 AWS DMS 可以在來源上設定所需的成品。不過，針對自我管理的 SQL Server 來源執行個體，必須先手動設定 SQL Server 分佈。執行此操作後，具有 sysadmin 許可的 AWS DMS 來源使用者可以自動為具有主索引鍵的資料表建立發佈。

若要檢查是否已設定分發，請執行下列命令。

```
sp_get_distributor
```

如果資料欄分佈的結果是 `NULL`，則表示尚未設定分佈。您可以使用下列程序設定分佈。<a name="CHAP_Source.SQLServer.CDC.MSCDC.Setup"></a>

**設定分佈**

1. 使用 SQL Server Management Studio (SSMS) 工具連線至 SQL Server 來源資料庫。

1. 開啟**複寫**資料夾的內容 (按一下滑鼠右鍵) 選單，然後選擇**設定分佈**。[設定分佈精靈] 隨即顯示。

1. 按照精靈的指示輸入預設值，然後建立分佈。<a name="CHAP_Source.SQLServer.CDC.MSCDC.Setup.CDC"></a>

**設定 CDC**

AWS DMS 如果您未使用唯讀複本， 3.4.7 版和更新版本可以自動為您的資料庫和所有資料表設定 MS CDC。若要使用此功能，請將 `SetUpMsCdcForTables` ECA 設定為 true。如需 ECA 的相關資訊，請參閱[端點設定](CHAP_Source.SQLServer.md#CHAP_Source.SQLServer.ConnectionAttrib)。

對於 3.4.7 AWS DMS 以前的 版本，或作為來源的唯讀複本，請執行下列步驟：

1. 對於沒有主索引鍵的資料表，請為資料庫設定 MS-CDC。若要這麼做，請使用已指派 sysadmin 角色的帳戶，並執行下列命令。

   ```
   use [DBname]
   EXEC sys.sp_cdc_enable_db
   ```

1. 接下來，為每個來源資料表設定 MS-CDC。針對有唯一索引鍵、但沒有主索引鍵的每個資料表，執行以下查詢以設定 MS-CDC。

   ```
   exec sys.sp_cdc_enable_table
   @source_schema = N'schema_name',
   @source_name = N'table_name',
   @index_name = N'unique_index_name',
   @role_name = NULL,
   @supports_net_changes = 1
   GO
   ```

1. 針對沒有主索引鍵、也沒有唯一索引鍵的每個資料表，執行以下查詢以設定 MS-CDC。

   ```
   exec sys.sp_cdc_enable_table
   @source_schema = N'schema_name',
   @source_name = N'table_name',
   @role_name = NULL
   GO
   ```

如需設定特定資料表 MS-CDC 的詳細資訊，請參閱 [SQL Server 文件](https://msdn.microsoft.com/en-us/library/cc627369.aspx)。

#### 在獨立 SQL Server 上設定進行中複寫：沒有 sysadmin 角色
<a name="CHAP_SupportScripts.SQLServer.standalone"></a>

此章節描述如何設定獨立 SQL Server 資料庫來源的進行中複寫，此資料庫不需要使用者帳戶擁有 sysadmin 權限。

**注意**  
執行本節中的步驟後，非系統管理員 DMS 使用者將會擁有執行下列動作的權限：  
從線上交易記錄檔讀取變更
從交易記錄備份檔讀取變更的磁碟存取權
新增或變更 DMS 使用的出版物
將文章新增至出版物

1. 如 [從 SQL Server 擷取持續複寫的資料變更](#CHAP_Source.SQLServer.CDC) 中所述，設定用於複寫的 Microsoft SQL Server。

1. 在來源資料庫上啟用 MS-REPLICATION。此操作可以手動完成，也可以透過以 sysadmin 使用者身分執行任務一次來完成。

1. 使用下列指令碼在來源資料庫上建立 `awsdms` 結構描述：

   ```
   use master
   go
   create schema awsdms
   go
   
   
   -- Create the table valued function [awsdms].[split_partition_list] on the Master database, as follows:
   USE [master]
   GO
   
   set ansi_nulls on
   go
   
   set quoted_identifier on
   go
   
   if (object_id('[awsdms].[split_partition_list]','TF')) is not null
   
   drop function [awsdms].[split_partition_list];
   
   go
   
   create function [awsdms].[split_partition_list]
   
   (
   
   @plist varchar(8000), --A delimited list of partitions
   
   @dlm nvarchar(1) --Delimiting character
   
   )
   
   returns @partitionsTable table --Table holding the BIGINT values of the string fragments
   
   (
   
   pid bigint primary key
   
   )   
   
   as
   
   begin
   
   declare @partition_id bigint;
   
   declare @dlm_pos integer;
   
   declare @dlm_len integer;
   
   set @dlm_len = len(@dlm);
   
   while (charindex(@dlm,@plist)>0)
   
   begin
   
   set @dlm_pos = charindex(@dlm,@plist);
   
   set @partition_id = cast( ltrim(rtrim(substring(@plist,1,@dlm_pos-1))) as bigint);
   
   insert into @partitionsTable (pid) values (@partition_id)
   
   set @plist = substring(@plist,@dlm_pos+@dlm_len,len(@plist));
   
   end
   
   set @partition_id = cast (ltrim(rtrim(@plist)) as bigint);
   
   insert into @partitionsTable (pid) values ( @partition_id );
   
   return
   
   end
   
   GO
   ```

1. 使用下列指令碼在 Master 資料庫上建立 `[awsdms].[rtm_dump_dblog]` 程序：

   ```
   use [MASTER]
   
   go
   
   if (object_id('[awsdms].[rtm_dump_dblog]','P')) is not null drop procedure [awsdms].[rtm_dump_dblog];
   go
   
   
   set ansi_nulls on
   go
   
   set quoted_identifier on
   GO
   
   
   
   CREATE procedure [awsdms].[rtm_dump_dblog]
   
   (
   
   @start_lsn varchar(32),
   
   @seqno integer,
   
   @filename varchar(260),
   
   @partition_list varchar(8000), -- A comma delimited list: P1,P2,... Pn
   
   @programmed_filtering integer,
   
   @minPartition bigint,
   
   @maxPartition bigint
   
   )
   
   as begin
   
   declare @start_lsn_cmp varchar(32); -- Stands against the GT comparator
   
   SET NOCOUNT ON -- – Disable "rows affected display"
   
   set @start_lsn_cmp = @start_lsn;
   
   if (@start_lsn_cmp) is null
   
   set @start_lsn_cmp = '00000000:00000000:0000';
   
   if (@partition_list is null)
   
   begin
   
   RAISERROR ('Null partition list waspassed',16,1);
   
   return
   
   end
   
   if (@start_lsn) is not null
   
   set @start_lsn = '0x'+@start_lsn;
   
   if (@programmed_filtering=0)
   
   
   
   SELECT
   
   [Current LSN],
   
   [operation],
   
   [Context],
   
   [Transaction ID],
   
   [Transaction Name],
   
   [Begin Time],
   
   [End Time],
   
   [Flag Bits],
   
   [PartitionID],
   
   [Page ID],
   
   [Slot ID],
   
   [RowLog Contents 0],
   
   [Log Record],
   
   [RowLog Contents 1]
   
   FROM
   
   fn_dump_dblog (
   
   @start_lsn, NULL, N'DISK', @seqno, @filename,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default)
   
   where [Current LSN] collate SQL_Latin1_General_CP1_CI_AS > @start_lsn_cmp collate SQL_Latin1_General_CP1_CI_AS
   
   and
   
   (
   
   ( [operation] in ('LOP_BEGIN_XACT','LOP_COMMIT_XACT','LOP_ABORT_XACT') )
   
   or
   
   ( [operation] in ('LOP_INSERT_ROWS','LOP_DELETE_ROWS','LOP_MODIFY_ROW')
   
   and
   
   ( ( [context] in ('LCX_HEAP','LCX_CLUSTERED','LCX_MARK_AS_GHOST') ) or ([context] = 'LCX_TEXT_MIX' and (datalength([RowLog Contents 0]) in (0,1))))
   
   and [PartitionID] in ( select * from master.awsdms.split_partition_list (@partition_list,','))
   
   )
   
   or
   
   ([operation] = 'LOP_HOBT_DDL')
   
   )
   
   
   else
   
   
   SELECT
   
   [Current LSN],
   
   [operation],
   
   [Context],
   
   [Transaction ID],
   
   [Transaction Name],
   
   [Begin Time],
   
   [End Time],
   
   [Flag Bits],
   
   [PartitionID],
   
   [Page ID],
   
   [Slot ID],
   
   [RowLog Contents 0],
   
   [Log Record],
   
   [RowLog Contents 1] -- After Image
   
   FROM
   
   fn_dump_dblog (
   
   @start_lsn, NULL, N'DISK', @seqno, @filename,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default)
   
   where [Current LSN] collate SQL_Latin1_General_CP1_CI_AS > @start_lsn_cmp collate SQL_Latin1_General_CP1_CI_AS
   
   and
   
   (
   
   ( [operation] in ('LOP_BEGIN_XACT','LOP_COMMIT_XACT','LOP_ABORT_XACT') )
   
   or
   
   ( [operation] in ('LOP_INSERT_ROWS','LOP_DELETE_ROWS','LOP_MODIFY_ROW')
   
   and
   
   ( ( [context] in ('LCX_HEAP','LCX_CLUSTERED','LCX_MARK_AS_GHOST') ) or ([context] = 'LCX_TEXT_MIX' and (datalength([RowLog Contents 0]) in (0,1))))
   
   and ([PartitionID] is not null) and ([PartitionID] >= @minPartition and [PartitionID]<=@maxPartition)
   
   )
   
   or
   
   ([operation] = 'LOP_HOBT_DDL')
   
   )
   
   
   
   SET NOCOUNT OFF -- Re-enable "rows affected display"
   
   end
   
   GO
   ```

1. 使用下列指令碼在 Master 資料庫上建立憑證：

   ```
   Use [master]
   Go
   
   CREATE CERTIFICATE [awsdms_rtm_dump_dblog_cert] ENCRYPTION BY PASSWORD = N'@5trongpassword'
   
   WITH SUBJECT = N'Certificate for FN_DUMP_DBLOG Permissions';
   ```

1. 使用下列指令碼從憑證建立登入：

   ```
   Use [master]
   Go
   
   CREATE LOGIN awsdms_rtm_dump_dblog_login FROM CERTIFICATE [awsdms_rtm_dump_dblog_cert];
   ```

1. 使用下列指令碼將登入新增至 sysadmin 伺服器角色：

   ```
   ALTER SERVER ROLE [sysadmin] ADD MEMBER [awsdms_rtm_dump_dblog_login];
   ```

1. 透過以下指令碼，使用該憑證將簽章新增至 [master].[awsdms].[rtm\$1dump\$1dblog]：

   ```
   Use [master]
   GO
   ADD SIGNATURE
   TO [master].[awsdms].[rtm_dump_dblog] BY CERTIFICATE [awsdms_rtm_dump_dblog_cert] WITH PASSWORD = '@5trongpassword';
   ```
**注意**  
如果您重新建立預存程序，則需要再次新增簽章。

1. 使用下列指令碼，在 Master 資料庫上建立 [awsdms].[rtm\$1position\$11st\$1timestamp]：

   ```
   use [master]
       if object_id('[awsdms].[rtm_position_1st_timestamp]','P') is not null
       DROP PROCEDURE [awsdms].[rtm_position_1st_timestamp];
       go
       create procedure [awsdms].[rtm_position_1st_timestamp]
       (
       @dbname                sysname,      -- Database name
       @seqno                 integer,      -- Backup set sequence/position number within file
       @filename              varchar(260), -- The backup filename
       @1stTimeStamp          varchar(40)   -- The timestamp to position by
       ) 
       as begin
   
       SET NOCOUNT ON       -- Disable "rows affected display"
   
       declare @firstMatching table
       (
       cLsn varchar(32),
       bTim datetime
       )
   
       declare @sql nvarchar(4000)
       declare @nl                       char(2)
       declare @tb                       char(2)
       declare @fnameVar                 nvarchar(254) = 'NULL'
   
       set @nl  = char(10); -- New line
       set @tb  = char(9)   -- Tab separator
   
       if (@filename is not null)
       set @fnameVar = ''''+@filename +''''
   
       set @sql='use ['+@dbname+'];'+@nl+
       'select top 1 [Current LSN],[Begin Time]'+@nl+
       'FROM fn_dump_dblog (NULL, NULL, NULL, '+ cast(@seqno as varchar(10))+','+ @fnameVar+','+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default)'+@nl+
       'where operation=''LOP_BEGIN_XACT''' +@nl+
       'and [Begin Time]>= cast('+''''+@1stTimeStamp+''''+' as datetime)'+@nl
   
       --print @sql
       delete from  @firstMatching 
       insert into @firstMatching  exec sp_executesql @sql    -- Get them all
   
       select top 1 cLsn as [matching LSN],convert(varchar,bTim,121) as [matching Timestamp] from @firstMatching;
   
       SET NOCOUNT OFF      -- Re-enable "rows affected display"
   
       end
       GO
   ```

1. 使用下列指令碼在 Master 資料庫上建立憑證：

   ```
   Use [master]
   Go
   CREATE CERTIFICATE [awsdms_rtm_position_1st_timestamp_cert]
   ENCRYPTION BY PASSWORD = '@5trongpassword'
   WITH SUBJECT = N'Certificate for FN_POSITION_1st_TIMESTAMP Permissions';
   ```

1. 使用下列指令碼從憑證建立登入：

   ```
   Use [master]
   Go
   CREATE LOGIN awsdms_rtm_position_1st_timestamp_login FROM CERTIFICATE [awsdms_rtm_position_1st_timestamp_cert];
   ```

1. 使用下列指令碼將登入新增至 sysadmin 角色：

   ```
   ALTER SERVER ROLE [sysadmin] ADD MEMBER [awsdms_rtm_position_1st_timestamp_login];
   ```

1. 使用下列指令碼，使用該憑證將簽章新增至 [master].[awsdms].[rtm\$1position\$11st\$1timestamp]：

   ```
   Use [master]
       GO
       ADD SIGNATURE
       TO [master].[awsdms].[rtm_position_1st_timestamp]
       BY CERTIFICATE [awsdms_rtm_position_1st_timestamp_cert]
       WITH PASSWORD = '@5trongpassword';
   ```

1. 使用下列指令碼，授與 DMS 使用者執行新預存程序的存取權：

   ```
   use master
   go
   GRANT execute on [awsdms].[rtm_position_1st_timestamp] to dms_user;
   ```

1. 在下列每個資料庫中建立具有下列許可和角色的使用者：
**注意**  
您應該在每個複本上建立具有相同 SID 的 dmsnosysadmin 使用者帳戶。下列 SQL 查詢可協助驗證每個複本上的 dmsnosysadmin 帳戶 SID 值。如需建立使用者的相關資訊，請參閱 [Microsoft SQL 伺服器說明文件](https://learn.microsoft.com/en-us/sql/)中的 [CREATE USER (Transact-SQL)](https://learn.microsoft.com/en-us/sql/t-sql/statements/create-user-transact-sql)。如需針對 Azure SQL 資料庫建立 SQL 使用者帳戶的詳細資訊，請參閱[作用中異地複寫](https://learn.microsoft.com/en-us/azure/azure-sql/database/active-geo-replication-overview)。

   ```
   use master
   go
   grant select on sys.fn_dblog to [DMS_user]
   grant view any definition to [DMS_user]
   grant view server state to [DMS_user]--(should be granted to the login).
   grant execute on sp_repldone to [DMS_user]
   grant execute on sp_replincrementlsn to [DMS_user]
   grant execute on sp_addpublication to [DMS_user]
   grant execute on sp_addarticle to [DMS_user]
   grant execute on sp_articlefilter to [DMS_user]
   grant select on [awsdms].[split_partition_list] to [DMS_user]
   grant execute on [awsdms].[rtm_dump_dblog] to [DMS_user]
   ```

   ```
   use msdb
   go
   grant select on msdb.dbo.backupset to self_managed_user
   grant select on msdb.dbo.backupmediafamily to self_managed_user
   grant select on msdb.dbo.backupfile to self_managed_user
   ```

   在來源資料庫上執行下列指令碼：

   ```
   use Source_DB
       Go
       EXEC sp_addrolemember N'db_owner', N'DMS_user'
   ```

1. 最後，將額外連線屬性 (ECA) 新增至來源 SQL Server 端點：

   ```
   enableNonSysadminWrapper=true;
   ```

#### 在可用群組環境中的 SQL Server 上設定進行中複寫：而不使用 sysadmin 角色
<a name="CHAP_SupportScripts.SQLServer.ag"></a>

本節描述如何在可用性群組環境中設定 SQL Server 資料庫來源的持續複寫，此資料庫不要求使用者帳戶須擁有 sysadmin 權限。

**注意**  
執行本節中的步驟後，非系統管理員 DMS 使用者將會擁有執行下列動作的權限：  
從線上交易記錄檔讀取變更
從交易記錄備份檔讀取變更的磁碟存取權
新增或變更 DMS 使用的出版物
將文章新增至出版物

**在可用群組環境中不使用 sysadmin 使用者的情況下設定進行中複寫**

1. 如 [從 SQL Server 擷取持續複寫的資料變更](#CHAP_Source.SQLServer.CDC) 中所述，設定用於複寫的 Microsoft SQL Server。

1. 在來源資料庫上啟用 MS-REPLICATION。此操作可以手動完成，也可以透過使用 sysadmin 使用者執行任務一次來完成。
**注意**  
您應該將 MS-REPLICATION 分發者設定為本機，或以允許透過關聯的連結伺服器存取非 sysadmin 使用者的方式進行。

1. 如果已啟用**在單一任務內專用 sp\$1repldone** 端點選項，請停止 MS-REPLICATION 日誌讀取器作業。

1. 在每個複本上執行以下步驟：

   1. 在主資料庫中建立 `[awsdms]`[awsdms] 結構描述：

      ```
      CREATE SCHEMA [awsdms]
      ```

   1. 在 Master 資料庫上建立 `[awsdms].[split_partition_list]` 資料表值函數：

      ```
      USE [master]
      GO
      
      SET ansi_nulls on
      GO
        
      SET quoted_identifier on
      GO
      
      IF (object_id('[awsdms].[split_partition_list]','TF')) is not null
        DROP FUNCTION [awsdms].[split_partition_list];
      GO
      
      CREATE FUNCTION [awsdms].[split_partition_list] 
      ( 
        @plist varchar(8000),    --A delimited list of partitions    
        @dlm nvarchar(1)    --Delimiting character
      ) 
      RETURNS @partitionsTable table --Table holding the BIGINT values of the string fragments
      (
        pid bigint primary key
      ) 
      AS 
      BEGIN
        DECLARE @partition_id bigint;
        DECLARE @dlm_pos integer;
        DECLARE @dlm_len integer;  
        SET @dlm_len = len(@dlm);
        WHILE (charindex(@dlm,@plist)>0)
        BEGIN 
          SET @dlm_pos = charindex(@dlm,@plist);
          SET @partition_id = cast( ltrim(rtrim(substring(@plist,1,@dlm_pos-1))) as bigint);
          INSERT into @partitionsTable (pid) values (@partition_id)
          SET @plist = substring(@plist,@dlm_pos+@dlm_len,len(@plist));
        END 
        SET @partition_id = cast (ltrim(rtrim(@plist)) as bigint);
        INSERT into @partitionsTable (pid) values (  @partition_id  );
        RETURN
      END
      GO
      ```

   1. 在 Master 資料庫上建立 `[awsdms].[rtm_dump_dblog]` 程序：

      ```
      USE [MASTER] 
      GO
      
      IF (object_id('[awsdms].[rtm_dump_dblog]','P')) is not null
        DROP PROCEDURE [awsdms].[rtm_dump_dblog]; 
      GO
      
      SET ansi_nulls on
      GO 
      
      SET quoted_identifier on 
      GO
                                          
      CREATE PROCEDURE [awsdms].[rtm_dump_dblog]
      (
        @start_lsn            varchar(32),
        @seqno                integer,
        @filename             varchar(260),
        @partition_list       varchar(8000), -- A comma delimited list: P1,P2,... Pn
        @programmed_filtering integer,
        @minPartition         bigint,
        @maxPartition         bigint
      ) 
      AS 
      BEGIN
      
        DECLARE @start_lsn_cmp varchar(32); -- Stands against the GT comparator
      
        SET NOCOUNT ON  -- Disable "rows affected display"
      
        SET @start_lsn_cmp = @start_lsn;
        IF (@start_lsn_cmp) is null
          SET @start_lsn_cmp = '00000000:00000000:0000';
      
        IF (@partition_list is null)
          BEGIN
            RAISERROR ('Null partition list was passed',16,1);
            return
            --set @partition_list = '0,';    -- A dummy which is never matched
          END
      
        IF (@start_lsn) is not null
          SET @start_lsn = '0x'+@start_lsn;
      
        IF (@programmed_filtering=0)
          SELECT
            [Current LSN],
            [operation],
            [Context],
            [Transaction ID],
            [Transaction Name],
            [Begin Time],
            [End Time],
            [Flag Bits],
            [PartitionID],
            [Page ID],
            [Slot ID],
            [RowLog Contents 0],
            [Log Record],
            [RowLog Contents 1] -- After Image
          FROM
            fn_dump_dblog (
              @start_lsn, NULL, N'DISK', @seqno, @filename,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default)
          WHERE 
            [Current LSN] collate SQL_Latin1_General_CP1_CI_AS > @start_lsn_cmp collate SQL_Latin1_General_CP1_CI_AS -- This aims for implementing FN_DBLOG based on GT comparator.
            AND
            (
              (  [operation] in ('LOP_BEGIN_XACT','LOP_COMMIT_XACT','LOP_ABORT_XACT') )
              OR
              (  [operation] in ('LOP_INSERT_ROWS','LOP_DELETE_ROWS','LOP_MODIFY_ROW')
                AND
                ( ( [context]   in ('LCX_HEAP','LCX_CLUSTERED','LCX_MARK_AS_GHOST') ) or ([context] = 'LCX_TEXT_MIX') )
                AND       
                [PartitionID] in ( select * from master.awsdms.split_partition_list (@partition_list,','))
              )
            OR
            ([operation] = 'LOP_HOBT_DDL')
          )
          ELSE
            SELECT
              [Current LSN],
              [operation],
              [Context],
              [Transaction ID],
              [Transaction Name],
              [Begin Time],
              [End Time],
              [Flag Bits],
              [PartitionID],
              [Page ID],
              [Slot ID],
              [RowLog Contents 0],
              [Log Record],
              [RowLog Contents 1] -- After Image
            FROM
              fn_dump_dblog (
                @start_lsn, NULL, N'DISK', @seqno, @filename,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default)
            WHERE [Current LSN] collate SQL_Latin1_General_CP1_CI_AS > @start_lsn_cmp collate SQL_Latin1_General_CP1_CI_AS -- This aims for implementing FN_DBLOG based on GT comparator.
            AND
            (
              (  [operation] in ('LOP_BEGIN_XACT','LOP_COMMIT_XACT','LOP_ABORT_XACT') )
              OR
              (  [operation] in ('LOP_INSERT_ROWS','LOP_DELETE_ROWS','LOP_MODIFY_ROW')
                AND
                ( ( [context]   in ('LCX_HEAP','LCX_CLUSTERED','LCX_MARK_AS_GHOST') ) or ([context] = 'LCX_TEXT_MIX') )
                AND ([PartitionID] is not null) and ([PartitionID] >= @minPartition and [PartitionID]<=@maxPartition)
              )
              OR
              ([operation] = 'LOP_HOBT_DDL')
            )
            SET NOCOUNT OFF -- Re-enable "rows affected display"
      END
      GO
      ```

   1. 在 Master 資料庫上建立憑證：

      ```
      USE [master]
      GO
      CREATE CERTIFICATE [awsdms_rtm_dump_dblog_cert]
        ENCRYPTION BY PASSWORD = N'@hardpassword1'
        WITH SUBJECT = N'Certificate for FN_DUMP_DBLOG Permissions'
      ```

   1. 從憑證建立登入：

      ```
      USE [master]
      GO
      CREATE LOGIN awsdms_rtm_dump_dblog_login FROM CERTIFICATE
        [awsdms_rtm_dump_dblog_cert];
      ```

   1. 將登入新增至 sysadmin 伺服器角色：

      ```
      ALTER SERVER ROLE [sysadmin] ADD MEMBER [awsdms_rtm_dump_dblog_login];
      ```

   1. 透過此憑證，將簽章新增至 [master].[awsdms].[rtm\$1dump\$1dblog] 程序：

      ```
      USE [master]
      GO
      
      ADD SIGNATURE
        TO [master].[awsdms].[rtm_dump_dblog]
        BY CERTIFICATE [awsdms_rtm_dump_dblog_cert]
        WITH PASSWORD = '@hardpassword1';
      ```
**注意**  
如果您重新建立預存程序，則需要再次新增簽章。

   1. 在 Master 資料庫上建立 `[awsdms].[rtm_position_1st_timestamp]` 程序：

      ```
      USE [master]
      IF object_id('[awsdms].[rtm_position_1st_timestamp]','P') is not null
        DROP PROCEDURE [awsdms].[rtm_position_1st_timestamp];
      GO
      CREATE PROCEDURE [awsdms].[rtm_position_1st_timestamp]
      (
        @dbname                sysname,      -- Database name
        @seqno                 integer,      -- Backup set sequence/position number within file
        @filename              varchar(260), -- The backup filename
        @1stTimeStamp          varchar(40)   -- The timestamp to position by
      ) 
      AS 
      BEGIN
        SET NOCOUNT ON       -- Disable "rows affected display"
      
        DECLARE @firstMatching table
        (
          cLsn varchar(32),
          bTim datetime
        )
        DECLARE @sql nvarchar(4000)
        DECLARE @nl                       char(2)
        DECLARE @tb                       char(2)
        DECLARE @fnameVar                 sysname = 'NULL'
      
        SET @nl  = char(10); -- New line
        SET @tb  = char(9)   -- Tab separator
      
        IF (@filename is not null)
          SET @fnameVar = ''''+@filename +''''
        SET @filename = ''''+@filename +''''
        SET @sql='use ['+@dbname+'];'+@nl+
          'SELECT TOP 1 [Current LSN],[Begin Time]'+@nl+
          'FROM fn_dump_dblog (NULL, NULL, NULL, '+ cast(@seqno as varchar(10))+','+ @filename +','+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default)'+@nl+
          'WHERE operation=''LOP_BEGIN_XACT''' +@nl+
          'AND [Begin Time]>= cast('+''''+@1stTimeStamp+''''+' as datetime)'+@nl
      
          --print @sql
          DELETE FROM @firstMatching 
          INSERT INTO @firstMatching  exec sp_executesql @sql    -- Get them all
          SELECT TOP 1 cLsn as [matching LSN],convert(varchar,bTim,121) AS[matching Timestamp] FROM @firstMatching;
      
          SET NOCOUNT OFF      -- Re-enable "rows affected display"
      
      END
      GO
      ```

   1. 在 Master 資料庫上建立憑證：

      ```
      USE [master]
      GO
      CREATE CERTIFICATE [awsdms_rtm_position_1st_timestamp_cert]
        ENCRYPTION BY PASSWORD = N'@hardpassword1'
        WITH SUBJECT = N'Certificate for FN_POSITION_1st_TIMESTAMP Permissions';
      ```

   1. 從憑證建立登入：

      ```
      USE [master]
      GO
      CREATE LOGIN awsdms_rtm_position_1st_timestamp_login FROM CERTIFICATE
        [awsdms_rtm_position_1st_timestamp_cert];
      ```

   1. 將登入新增至 sysadmin 伺服器角色：

      ```
      ALTER SERVER ROLE [sysadmin] ADD MEMBER [awsdms_rtm_position_1st_timestamp_login];
      ```

   1. 使用憑證將簽章新增至 `[master].[awsdms].[rtm_position_1st_timestamp]` 程序：

      ```
      USE [master]
      GO
      ADD SIGNATURE
        TO [master].[awsdms].[rtm_position_1st_timestamp]
        BY CERTIFICATE [awsdms_rtm_position_1st_timestamp_cert]
        WITH PASSWORD = '@hardpassword1';
      ```
**注意**  
如果您重新建立預存程序，則需要再次新增簽章。

   1. 在下列每個資料庫中建立具有下列許可/角色的使用者：
**注意**  
您應該在每個複本上建立具有相同 SID 的 dmsnosysadmin 使用者帳戶。下列 SQL 查詢可協助驗證每個複本上的 dmsnosysadmin 帳戶 SID 值。如需建立使用者的相關資訊，請參閱 [Microsoft SQL 伺服器說明文件](https://learn.microsoft.com/en-us/sql/)中的 [CREATE USER (Transact-SQL)](https://learn.microsoft.com/en-us/sql/t-sql/statements/create-user-transact-sql)。如需針對 Azure SQL 資料庫建立 SQL 使用者帳戶的詳細資訊，請參閱[作用中異地複寫](https://learn.microsoft.com/en-us/azure/azure-sql/database/active-geo-replication-overview)。

      ```
      SELECT @@servername servername, name, sid, create_date, modify_date
        FROM sys.server_principals
        WHERE name = 'dmsnosysadmin';
      ```

   1. 在每個複本的主資料庫上授予許可：

      ```
      USE master
      GO 
      
      GRANT select on sys.fn_dblog to dmsnosysadmin;
      GRANT view any definition to dmsnosysadmin;
      GRANT view server state to dmsnosysadmin -- (should be granted to the login).
      GRANT execute on sp_repldone to dmsnosysadmin;
      GRANT execute on sp_replincrementlsn to dmsnosysadmin;
      GRANT execute on sp_addpublication to dmsnosysadmin;
      GRANT execute on sp_addarticle to dmsnosysadmin;
      GRANT execute on sp_articlefilter to dmsnosysadmin;
      GRANT select on [awsdms].[split_partition_list] to dmsnosysadmin;
      GRANT execute on [awsdms].[rtm_dump_dblog] to dmsnosysadmin;
      GRANT execute on [awsdms].[rtm_position_1st_timestamp] to dmsnosysadmin;
      ```

   1. 在每個複本上 msdb 資料庫授予許可：

      ```
      USE msdb
      GO
      GRANT select on msdb.dbo.backupset TO self_managed_user
      GRANT select on msdb.dbo.backupmediafamily TO self_managed_user
      GRANT select on msdb.dbo.backupfile TO self_managed_user
      ```

   1. 將 `db_owner` 角色新增至 `dmsnosysadmin` 來源資料庫。由於資料庫已同步處理，因此您只能在主要複本上新增角色。

      ```
      use <source DB>
      GO 
      EXEC sp_addrolemember N'db_owner', N'dmsnosysadmin'
      ```

## 設定雲端 SQL Server 資料庫執行個體的進行中複寫
<a name="CHAP_Source.SQLServer.Configuration"></a>

本節說明如何在雲端託管的 SQL Server 資料庫執行個體上設定 CDC。雲端託管的 SQL 伺服器執行個體是在 Amazon RDS for SQL Server、Azure SQL 受管執行個體或任何其他受管雲端 SQL Server 執行個體上執行的執行個體。如需每種資料庫類型之進行中複寫限制的相關資訊，請參閱[使用 SQL Server 做為 來源的限制 AWS DMS](CHAP_Source.SQLServer.md#CHAP_Source.SQLServer.Limitations)。

在設定進行中複寫之前，請參閱[使用來自 SQL Server 來源進行中複寫 (CDC) 的先決條件](CHAP_Source.SQLServer.md#CHAP_Source.SQLServer.Prerequisites)。

與自我管理的 Microsoft SQL Server 來源不同，Amazon RDS for SQL Server 不支援 MS-Replication。因此， AWS DMS 需要對具有或沒有主索引鍵的資料表使用 MS-CDC。

Amazon RDS 不會授予 sysadmin 權限，以設定 AWS DMS 用於來源 SQL Server 執行個體中持續變更的複寫成品。請務必如下列程序所示，為 Amazon RDS 執行個體開啟 MS-CDC (使用主要使用者權限)。

**在雲端 SQL Server 資料庫執行個體上啟用 MS-CDC**

1. 在資料庫層級執行以下其中一種查詢。

   如果是 RDS for SQL Server 資料庫執行個體，請使用此查詢。

   ```
   exec msdb.dbo.rds_cdc_enable_db 'DB_name'
   ```

   對於 Azure SQL 受管資料庫執行個體，請使用此查詢。

   ```
   USE DB_name 
   GO 
   EXEC sys.sp_cdc_enable_db 
   GO
   ```

1. 針對有主索引鍵的每個資料表，執行以下查詢以啟用 MS-CDC。

   ```
   exec sys.sp_cdc_enable_table
   @source_schema = N'schema_name',
   @source_name = N'table_name',
   @role_name = NULL,
   @supports_net_changes = 1
   GO
   ```

   針對有唯一索引鍵、但沒有主索引鍵的每個資料表，執行以下查詢以啟用 MS-CDC。

   ```
   exec sys.sp_cdc_enable_table
   @source_schema = N'schema_name',
   @source_name = N'table_name',
   @index_name = N'unique_index_name',
   @role_name = NULL,
   @supports_net_changes = 1
   GO
   ```

    針對沒有主索引鍵、也沒有唯一索引鍵的每個資料表，執行以下查詢以啟用 MS-CDC。

   ```
   exec sys.sp_cdc_enable_table
   @source_schema = N'schema_name',
   @source_name = N'table_name',
   @role_name = NULL
   GO
   ```

1. 設定保留期間：
   + 對於使用 DMS 3.5.3 版及更高版本複寫的 RDS for SQL Server 執行個體，請確定保留期間設定為預設值 5 秒。如果您要從 DMS 3.5.2 及更新版本升級至 DMS 3.5.3 及更新版本，請在任務在新的或升級的執行個體上執行後變更輪詢間隔值。下列指令碼會將保留期間設定為 5 秒：

     ```
     use dbname
     EXEC sys.sp_cdc_change_job @job_type = 'capture' ,@pollinginterval = 5
     exec sp_cdc_stop_job 'capture'
     exec sp_cdc_start_job 'capture'
     ```
   + 參數 `@pollinginterval` 的測量單位為秒，建議值設定為 86399。這表示當 `@pollinginterval = 86399` 時，交易日誌會保留變更 86,399 秒 (一天)。此程序 `exec sp_cdc_start_job 'capture'` 會啟動設定。
**注意**  
對於某些版本的 SQL Server，如果將 `pollinginterval` 的值設定為超過 3599 秒，就會將值重設為預設值 (五秒)。發生這種情況時，T-Log 項目會被清除，然後 AWS DMS 才能讀取它們。若要判斷哪些 SQL Server 版本會受到這個已知問題的影響，請參閱[這篇 Microsoft 知識庫文章](https://support.microsoft.com/en-us/topic/kb4459220-fix-incorrect-results-occur-when-you-convert-pollinginterval-parameter-from-seconds-to-hours-in-sys-sp-cdc-scan-in-sql-server-dac8aefe-b60b-7745-f987-582dda2cfa78)。

     如果您將 Amazon RDS 與異地同步備份搭配使用，請確保您也將次要設定為具有正確的值，以防容錯移轉。

     ```
     exec rdsadmin..rds_set_configuration 'cdc_capture_pollinginterval' , <5 or preferred value>
     ```

**維護複 AWS DMS 寫任務停止超過一小時的保留期**
**注意**  
使用 DMS 3.5.3 及更高版本複寫 RDS for SQL Server 來源時，不需要下列步驟。

1. 使用以下命令，停止截斷交易日誌的任務。

   ```
   exec sp_cdc_stop_job 'capture'
   ```

1. 在 AWS DMS 主控台上尋找您的任務，並繼續任務。

1. 選擇**監控**索引標籤，接著勾選 `CDCLatencySource` 指標。

1. 一旦 `CDCLatencySource` 指標等於 0 (零) 並停在該階段，請使用下列命令重新開始截斷交易日誌的作業。

   ```
   exec sp_cdc_start_job 'capture'
   ```

請記得開始截斷 SQL Server 交易日誌的任務。否則，SQL Server 執行個體上的儲存空間可能會填滿。

### 使用 RDS for SQL Server 做為 來源時的建議設定 AWS DMS
<a name="CHAP_Source.SQLServer.Configuration.Settings"></a>

#### For AWS DMS 3.5.3 及更高版本
<a name="CHAP_Source.SQLServer.Configuration.Settings.353"></a>

**注意**  
對於您在發行 DMS 3.5.3 版之後建立或修改的端點，預設會啟用 RDS for SQL Server 日誌備份功能的初始版本。若要對現有端點使用此功能，請修改端點而不進行任何變更。

AWS DMS 3.5.3 版推出支援從日誌備份讀取。DMS 主要依賴從作用中交易日誌讀取來複寫事件。如果交易在 DMS 可以從作用中日誌中讀取之前進行備份，任務會隨需存取 RDS 備份，並從後續備份日誌中讀取，直到趕上作用中交易日誌為止。為了確保 DMS 可以存取日誌備份，請將 RDS 自動化備份保留期設定為至少一天。如需有關設定自動備份保留期的資訊，請參閱《*Amazon RDS 使用者指南*》中的[備份保留期](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ManagingAutomatedBackups.html#USER_WorkingWithAutomatedBackups.BackupRetention)。

存取日誌備份的 DMS 任務會使用 RDS 執行個體上的儲存體。請注意，任務只會存取複寫所需的日誌備份。Amazon RDS 會在幾個小時內移除這些下載的備份。此移除不會影響保留在 Amazon S3 或 Amazon RDS `RESTORE DATABASE`功能的 Amazon RDS 備份。如果您想要使用 DMS 複寫，建議您在 RDS for SQL Server 來源上配置額外的儲存空間。估算所需儲存量的一種方法是識別 DMS 將從中開始或繼續複寫的備份，並使用 RDS `tlog backup`中繼資料函數新增所有後續備份的檔案大小。如需 `tlog backup`函數的詳細資訊，請參閱《*Amazon RDS 使用者指南*》中的[列出可用的交易日誌備份](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER.SQLServer.AddlFeat.TransactionLogAccess.html#USER.SQLServer.AddlFeat.TransactionLogAccess.Listing)。

或者，您可以選擇根據 Amazon RDS 執行個體的 CloudWatch `FreeStorageSpace` 指標啟用儲存體自動擴展和/或觸發儲存體擴展。

強烈建議您不要在交易日誌備份中太早開始或繼續，因為這可能會導致 SQL Server 執行個體上的儲存體填滿。在這種情況下，建議啟動完全載入。從交易日誌備份複寫比從作用中交易日誌讀取還慢。如需詳細資訊，請參閱[RDS for SQL Server 的交易日誌備份處理](CHAP_Troubleshooting_Latency_Source_SQLServer.md#CHAP_Troubleshooting_Latency_Source_SQLServer_backup)。

請注意，存取日誌備份需要額外權限。如需詳細資訊，請參閱 中的詳細說明[從雲端 SQL Server 資料庫設定持續複寫的許可](CHAP_Source.SQLServer.md#CHAP_Source.SQLServer.Permissions.Cloud)。在任務開始複寫之前，請確定您授予這些權限。

#### For AWS DMS 3.5.2 及更新版本
<a name="CHAP_Source.SQLServer.Configuration.Settings.352"></a>

當您使用 Amazon RDS for SQL Server 做為來源時，MS-CDC 擷取任務依賴參數 `maxscans`和 `maxtrans`。這些參數會管理 MS-CDC 擷取對交易日誌執行的掃描數量上限，以及每次掃描處理的交易數量。

對於交易數目大於 `maxtrans*maxscans` 的資料庫，提高 `polling_interval` 值可能會導致作用中交易日誌記錄不斷累積。反過來，此累積會導致交易日誌變大。

請注意， AWS DMS 不依賴 MS-CDC 擷取任務。MS-CDC 擷取作業會將交易日誌項目標記為已處理。這可讓交易日誌備份作業從交易日誌中移除項目。

我們建議您監控交易日誌的大小，以及 MS-CDC 作業是否成功。如果 MS-CDC 任務失敗，交易日誌可能會過度增長並導致 AWS DMS 複寫失敗。您可以使用來源資料庫中的 `sys.dm_cdc_errors` 動態管理檢視，來監控 MS-CDC 擷取作業錯誤。您可以使用 `DBCC SQLPERF(LOGSPACE)` 管理命令來監控交易日誌大小。

**若要解決 MS-CDC 造成的交易日誌增加**

1. 檢查資料庫`Log Space Used %`的 AWS DMS 是否正在複寫，並驗證它是否持續增加。

   ```
   DBCC SQLPERF(LOGSPACE)
   ```

1. 識別封鎖交易日誌備份程序的項目。

   ```
   Select log_reuse_wait, log_reuse_wait_desc, name from sys.databases where name = db_name();
   ```

   如果 `log_reuse_wait_desc` 值等於 `REPLICATION`，則日誌備份保留是由 MS-CDC 中的延時所造成。

1. 增加 `maxtrans` 和 `maxscans` 參數值，以提高擷取作業所處理的事件數目。

   ```
   EXEC sys.sp_cdc_change_job @job_type = 'capture' ,@maxtrans = 5000, @maxscans = 20 
   exec sp_cdc_stop_job 'capture'
   exec sp_cdc_start_job 'capture'
   ```

若要解決此問題，請設定 `maxscans`和 的值，`maxtrans`讓 `maxtrans*maxscans` 等於每天從來源資料庫 AWS DMS 複寫之資料表所產生的平均事件數。

如果您將這些參數設定為高於建議值，擷取作業會處理交易日誌中的所有事件。如果您將這些參數設定為低於建議值，MS-CDC 延時會增加，而且交易日誌也會增加。

由於工作負載中的變更會產生不同數量的事件，因此找出 `maxscans` 和 `maxtrans` 適當的值可能很困難。在此情況下，建議您設定 MS-CDC 延時的監控。如需詳細資訊，請參閱 SQL Server 文件中的[監控程序](https://docs.microsoft.com/en-us/sql/relational-databases/track-changes/administer-and-monitor-change-data-capture-sql-server?view=sql-server-ver15#Monitor)。然後根據監控結果動態設定 `maxtrans` 和 `maxscans`。

如果 AWS DMS 任務找不到繼續或繼續任務所需的日誌序號 (LSNs)，則任務可能會失敗，並需要完全重新載入。

**注意**  
使用 從 RDS for SQL Server 來源 AWS DMS 複寫資料時，您可能會在 Amazon RDS 執行個體的停止啟動事件後嘗試繼續複寫時發生錯誤。這是因為 SQL Server 代理程式程序會在停止啟動事件之後重新啟動時，重新啟動擷取作業程序。這會略過 MS-CDC 輪詢間隔。  
因此，在交易磁碟區低於 MS-CDC 擷取任務處理的資料庫上，這可能會導致資料處理或標記為複寫和備份，然後 AWS DMS 可以從停止的位置繼續，導致下列錯誤：  

```
[SOURCE_CAPTURE ]E: Failed to access LSN '0000dbd9:0006f9ad:0003' in the backup log sets since BACKUP/LOG-s are not available. [1020465] (sqlserver_endpoint_capture.c:764)
```
若要緩解此問題，請依照先前的建議設定 `maxtrans` 和 `maxscans` 值。

# 使用 Microsoft Azure SQL 資料庫做為 的來源 AWS DMS
<a name="CHAP_Source.AzureSQL"></a>

使用 時 AWS DMS，您可以使用 Microsoft Azure SQL Database 做為來源，就像使用 SQL Server 一樣。 AWS DMS 支援做為來源，與在內部部署或 Amazon EC2 執行個體上執行之 SQL Server 支援的資料庫版本清單相同。

如需詳細資訊，請參閱[使用 Microsoft SQL Server 資料庫做為 的來源 AWS DMS](CHAP_Source.SQLServer.md)。

**注意**  
AWS DMS 不支援使用 Azure SQL Database 進行變更資料擷取操作 (CDC)。

# 使用 Microsoft Azure SQL 受管執行個體做為 的來源 AWS DMS
<a name="CHAP_Source.AzureMgd"></a>

使用 時 AWS DMS，您可以使用 Microsoft Azure SQL 受管執行個體做為來源，方法與 SQL Server 相同。 AWS DMS 支援做為來源的資料庫版本清單，與在內部部署或 Amazon EC2 執行個體上執行的 SQL Server 所支援的資料庫版本清單相同。

如需詳細資訊，請參閱[使用 Microsoft SQL Server 資料庫做為 的來源 AWS DMS](CHAP_Source.SQLServer.md)。

# 使用 Microsoft Azure Database for PostgreSQL 彈性伺服器做為 的來源 AWS DMS
<a name="CHAP_Source.AzureDBPostgreSQL"></a>

透過 AWS DMS，您可以使用 Microsoft Azure Database for PostgreSQL 彈性伺服器做為來源，方法與 PostgreSQL 大致相同。

如需有關 AWS DMS 支援 做為來源的 Microsoft Azure Database for PostgreSQL 彈性伺服器版本的資訊，請參閱 [的來源 AWS DMS](CHAP_Introduction.Sources.md)。

## 設定 Microsoft Azure for PostgreSQL 彈性伺服器，以進行邏輯複寫和解碼
<a name="CHAP_Source.AzureDBPostgreSQL.setup"></a>

您可以在資料庫遷移期間，在 Microsoft Azure Database for PostgreSQL 彈性伺服器中使用邏輯複寫和解碼功能。

如需邏輯解碼，DMS 會使用 `test_decoding` 或 `pglogical` 外掛程式。如果 `pglogical` 外掛程式在來源 PostgreSQL 資料庫上是可用的狀態，則 DMS 會使用 `pglogical` 建立複寫槽，否則會使用 `test_decoding` 外掛程式。

若要將 Microsoft Azure for PostgreSQL 彈性伺服器設為 DMS 的來源端點，請執行下列步驟：

1. 開啟入口網站上的伺服器參數頁面。

1. 將 `wal_level` 伺服器參數設為 `LOGICAL`。

1. 如果您要使用 `pglogical` 擴充功能，請將 `shared_preload_libraries` 和 `azure.extensions` 參數設為 `pglogical`。

1. 將 `max_replication_slots` 參數設為您計劃同時執行的 DMS 任務數目上限。在 Microsoft Azure 中，此參數的預設值為 10。此參數的最大值取決於 PostgreSQL 執行個體的可用記憶體，允許每 GB 記憶體介於 2 到 8 個複寫槽。

1. 將 `max_wal_senders` 參數設為大於 1 的值。`max_wal_senders` 參數設定可以同時執行的任務數量。預設值為 10。

1. 將 `max_worker_processes` 參數值設定為至少 16。否則，您可能會看到以下錯誤：

   ```
   WARNING: out of background worker slots.
   ```

1. 儲存變更。重新啟動伺服器以套用變更。

1. 確認 PostgreSQL 執行個體允許來自連線資源的網路流量。

1. 使用下列命令，授予現有使用者複寫許可，或建立具有複寫許可的新使用者。
   + 使用下列命令授予現有使用者複寫許可：

     ```
     ALTER USER <existing_user> WITH REPLICATION;
     ```
   + 使用下列命令建立具有複寫許可的新使用者：

     ```
     CREATE USER aws_dms_user PASSWORD 'aws_dms_user_password';
     GRANT azure_pg_admin to aws_dms_user;
     ALTER ROLE aws_dms_user REPLICATION LOGIN;
     ```

如需使用 PostgreSQL 進行邏輯複寫的詳細資訊，請參閱以下主題：
+ [使用邏輯複寫啟用變更資料擷取 (CDC)](CHAP_Source.PostgreSQL.md#CHAP_Source.PostgreSQL.Security)
+ [如何使用原生 CDC 起點，以設定 PostgreSQL 來源的 CDC 載入](CHAP_Source.PostgreSQL.md#CHAP_Source.PostgreSQL.v10)
+ [Azure Database for PostgreSQL 資料庫文件](https://learn.microsoft.com/en-us/azure/postgresql/)中的[適用於 PostgreSQL - 彈性伺服器的 Azure 資料庫中的邏輯複寫和邏輯解碼](https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/concepts-logical)。

# 使用 Microsoft Azure Database for MySQL 彈性伺服器做為 的來源 AWS DMS
<a name="CHAP_Source.AzureDBMySQL"></a>

透過 AWS DMS，您可以使用 Microsoft Azure Database for MySQL 彈性伺服器做為來源，方法與 MySQL 大致相同。

如需有關 AWS DMS 支援 做為來源的 Microsoft Azure Database for MySQL 彈性伺服器版本的資訊，請參閱 [的來源 AWS DMS](CHAP_Introduction.Sources.md)。

如需搭配 使用客戶受管 MySQL 相容資料庫的詳細資訊 AWS DMS，請參閱 [使用自我管理的 MySQL 相容資料庫做為 的來源 AWS DMS](CHAP_Source.MySQL.md#CHAP_Source.MySQL.CustomerManaged)。

## 使用 Azure MySQL 做為 來源的限制 AWS Database Migration Service
<a name="CHAP_Source.AzureDBMySQL.limitations"></a>
+ Azure MySQL 彈性伺服器系統變數的預設值`sql_generate_invisible_primary_key`為 `ON`，而伺服器會自動將產生的不可見主索引鍵 (GIPK) 新增至任何在沒有明確主索引鍵的情況下建立的資料表。 AWS DMS 不支援持續複寫具有 GIPK 限制的 MySQL 資料表。

# 使用 OCI MySQL Heatwave 做為 的來源 AWS DMS
<a name="CHAP_Source.heatwave"></a>

透過 AWS DMS，您可以使用 OCI MySQL Heatwave 做為來源，方法與 MySQL 大致相同。使用 OCI MySQL Heatwave 作為來源，需要進行一些額外的組態變更。

如需 AWS DMS 支援做為來源的 OCI MySQL Heatwave 版本的資訊，請參閱 [的來源 AWS DMS](CHAP_Introduction.Sources.md)。

## 設定用於邏輯複寫的 OCI MySQL Heatwave
<a name="CHAP_Source.heatwave.setup"></a>

若要將 OCI MySQL Heatwave 執行個體設定為 DMS 的來源端點，請執行下列動作：

1. 登入 OCI 主控台，然後開啟左上角的主漢堡選單 (≡)。

1. 選擇**資料庫**、**資料庫系統**。

1. 開啟**組態**選單。

1. 選擇**建立組態**。

1. 輸入組態名稱，例如 **dms\$1configuration**。

1. 選擇目前的 OCI MySQL Heatwave 執行個體的形狀。您可以在執行個體的**資料庫系統組態：形狀**區段下方的**資料庫系統組態**屬性索引標籤中找到該形狀。

1. 在**使用者變數**區段中，選取 `binlog_row_value_options` 系統變數。預設值為 `PARTIAL_JSON`。清除這個值。

1. 選擇**建立**按鈕。

1. 開啟 OCI MySQLHeatwave 執行個體，然後選擇**編輯**按鈕。

1. 在**組態**區段中，選擇**變更組態**按鈕，然後選擇您在步驟 4 中建立的形狀組態。

1. 當變更生效時，執行個體便已準備就緒，可進行邏輯複寫。

# 使用 Google Cloud for MySQL 做為 的來源 AWS DMS
<a name="CHAP_Source.GC"></a>

透過 AWS DMS，您可以使用 Google Cloud for MySQL 做為來源，方法與 MySQL 大致相同。

如需 AWS DMS 支援做為來源的 GCP MySQL 版本的資訊，請參閱 [的來源 AWS DMS](CHAP_Introduction.Sources.md)。

如需詳細資訊，請參閱[使用 MySQL 相容資料庫做為 的來源 AWS DMS](CHAP_Source.MySQL.md)。

**注意**  
3.4.6 AWS DMS 版提供 GCP MySQL 8.0 作為來源的支援。  
AWS DMS 不支援 MySQL 執行個體`verify-full`的 GCP SSL 模式。  
`Allow only SSL connections` 不支援 GCP MySQL 安全設定，因為它需要伺服器和用戶端憑證驗證。 AWS DMS 僅 支援伺服器憑證驗證。  
AWS DMS 支援`binlog_checksum`資料庫旗標的預設 GCP CloudSQL for MySQL 值 `CRC32` 。

# 使用 Google Cloud for PostgreSQL 做為 的來源 AWS DMS
<a name="CHAP_Source.GCPostgres"></a>

透過 AWS DMS，您可以使用 Google Cloud for PostgreSQL 做為來源，方法與自我管理的 PostgreSQL 資料庫大致相同。

如需 AWS DMS 支援做為來源的 GCP PostgreSQL 版本的資訊，請參閱 [的來源 AWS DMS](CHAP_Introduction.Sources.md)。

如需詳細資訊，請參閱[使用 PostgreSQL 資料庫做為 AWS DMS 來源](CHAP_Source.PostgreSQL.md)。

## 設定 Google Cloud for PostgreSQL 以進行邏輯複寫和解碼
<a name="CHAP_Source.GCPostgres.setup"></a>

您可以在資料庫遷移期間，在 Google Cloud SQL for PostgreSQL 中使用邏輯複寫和解碼功能。

如需邏輯解碼，DMS 會使用下列其中一個外掛程式：
+ `test_decoding`
+ `pglogical`

如果 `pglogical` 外掛程式在來源 PostgreSQL 資料庫上是可用的狀態，則 DMS 會使用 `pglogical` 建立複寫槽，否則會使用 `test_decoding` 外掛程式。

請注意下列有關搭配 使用邏輯解碼的事項 AWS DMS：

1. 使用 Google Cloud SQL for PostgreSQL 時，請將 `cloudsql.logical_decoding` 旗標設為 `on` 以啟用邏輯解碼。

1. 若要啟用 `pglogical`，請將 `cloudsql.enable_pglogical` 旗標設為 `on`，然後重新啟動資料庫。

1. 若要使用邏輯解碼功能，您可以建立具有 `REPLICATION` 屬性的 PostgreSQL 使用者。當您使用 `pglogical` 擴充功能時，使用者必須具備 `cloudsqlsuperuser` 角色。若要建立具有 `cloudsqlsuperuser` 角色的使用者，請執行下列動作：

   ```
   CREATE USER new_aws_dms_user WITH REPLICATION
   IN ROLE cloudsqlsuperuser LOGIN PASSWORD 'new_aws_dms_user_password';
   ```

   若要對現有使用者設定此屬性，請執行下列動作：

   ```
   ALTER USER existing_user WITH REPLICATION;
   ```

1. 將 `max_replication_slots` 參數設為您計劃同時執行的 DMS 任務數目上限。在 Google Cloud SQL 中，此參數的預設值為 10。此參數的最大值取決於 PostgreSQL 執行個體的可用記憶體，允許每 GB 記憶體介於 2 到 8 個複寫槽。

如需使用 PostgreSQL 進行邏輯複寫的詳細資訊，請參閱以下主題：
+ [使用邏輯複寫啟用變更資料擷取 (CDC)](CHAP_Source.PostgreSQL.md#CHAP_Source.PostgreSQL.Security)
+ [如何使用原生 CDC 起點，以設定 PostgreSQL 來源的 CDC 載入](CHAP_Source.PostgreSQL.md#CHAP_Source.PostgreSQL.v10)
+ 在 [Cloud SQL for PostgreSQL 文件](https://cloud.google.com/sql/docs/postgres)中[設定邏輯複寫和解碼](https://cloud.google.com/sql/docs/postgres/replication/configure-logical-replication)。

# 使用 PostgreSQL 資料庫做為 AWS DMS 來源
<a name="CHAP_Source.PostgreSQL"></a>

您可以使用 從一或多個 PostgreSQL 資料庫遷移資料 AWS DMS。使用 PostgreSQL 資料庫作為來源，您可以將資料遷移至其他 PostgreSQL 資料庫或其他受支援的資料庫之一。

如需 AWS DMS 支援做為來源的 PostgreSQL 版本的資訊，請參閱 [的來源 AWS DMS](CHAP_Introduction.Sources.md)。

AWS DMS 支援 PostgreSQL 用於這些類型的資料庫：
+ 現場部署資料庫
+ Amazon EC2 執行個體上的資料庫
+ Amazon RDS 資料庫執行個體上的資料庫
+ 以 Amazon Aurora PostgreSQL 相容版本為基礎的資料庫執行個體上的資料庫
+ 以 Amazon Aurora PostgreSQL 相容無伺服器版本為基礎的資料庫執行個體上的資料庫

**注意**  
DMS 支援 Amazon Aurora PostgreSQL：無伺服器 V1 僅作為完全載入的來源。但是您可以使用 Amazon Aurora PostgreSQL：無伺服器 V2 作為完全載入、完全載入 \$1 CDC 和僅限 CDC 任務的來源。

您可以使用 Secure Sockets Layer (SSL)，加密 PostgreSQL 端點與複寫執行個體之間的連線。如需使用 SSL 搭配 PostgreSQL 端點的詳細資訊，請參閱[搭配 使用 SSL AWS Database Migration Service](CHAP_Security.SSL.md)。

使用 PostgreSQL 作為來源時的額外安全要求，是指定的使用者帳戶必須是 PostgreSQL 資料庫中的註冊使用者。

若要將 PostgreSQL 資料庫設定為 AWS DMS 來源端點，請執行下列動作：
+ 建立具有適當許可的 PostgreSQL 使用者，以提供 PostgreSQL 來源資料庫的 AWS DMS 存取權。
**注意**  
如果 PostgreSQL 來源資料庫是自我管理的，請參閱 [在 中使用自我管理 PostgreSQL 資料庫做為來源 AWS DMS](#CHAP_Source.PostgreSQL.Prerequisites) 以取得詳細資訊。
如果 PostgreSQL 來源資料庫是由 Amazon RDS 管理，請參閱 [使用 AWS受管 PostgreSQL 資料庫做為 DMS 來源](#CHAP_Source.PostgreSQL.RDSPostgreSQL) 以取得詳細資訊。
+ 建立符合您所選的 PostgreSQL 資料庫組態的 PostgreSQL 來源端點。
+ 建立一個或一組遷移資料表的任務。

  如果要建立僅完全載入的任務，則不需要任何進一步的端點組態。

  建立用於變更資料擷取的任務 (僅限 CDC 或完全載入和 CDC 任務) 之前，請參閱 [使用自我管理 PostgreSQL 資料庫做為 AWS DMS 來源來啟用 CDC](#CHAP_Source.PostgreSQL.Prerequisites.CDC) 或 [使用 啟用具有 AWS受管 PostgreSQL 資料庫執行個體的 CDC AWS DMS](#CHAP_Source.PostgreSQL.RDSPostgreSQL.CDC)。

**Topics**
+ [在 中使用自我管理 PostgreSQL 資料庫做為來源 AWS DMS](#CHAP_Source.PostgreSQL.Prerequisites)
+ [使用 AWS受管 PostgreSQL 資料庫做為 DMS 來源](#CHAP_Source.PostgreSQL.RDSPostgreSQL)
+ [使用邏輯複寫啟用變更資料擷取 (CDC)](#CHAP_Source.PostgreSQL.Security)
+ [如何使用原生 CDC 起點，以設定 PostgreSQL 來源的 CDC 載入](#CHAP_Source.PostgreSQL.v10)
+ [使用 從 PostgreSQL 遷移至 PostgreSQL AWS DMS](#CHAP_Source.PostgreSQL.Homogeneous)
+ [使用 從 Babelfish for Amazon Aurora PostgreSQL 遷移 AWS DMS](#CHAP_Source.PostgreSQL.Babelfish)
+ [從 PostgreSQL 來源資料庫移除 AWS DMS 成品](#CHAP_Source.PostgreSQL.CleanUp)
+ [使用 PostgreSQL 資料庫作為 DMS 來源時的其他組態設定](#CHAP_Source.PostgreSQL.Advanced)
+ [作為 PostgreSQL 來源的僅供讀取複本](#CHAP_Source.PostgreSQL.ReadReplica)
+ [使用 `MapBooleanAsBoolean` PostgreSQL 端點設定](#CHAP_Source.PostgreSQL.ConnectionAttrib.Endpointsetting)
+ [使用 PostgreSQL 做為 DMS 來源時的端點設定和額外連線屬性 (ECAs)](#CHAP_Source.PostgreSQL.ConnectionAttrib)
+ [使用 PostgreSQL 資料庫作為 DMS 來源的限制](#CHAP_Source.PostgreSQL.Limitations)
+ [PostgreSQL 的來源資料類型](#CHAP_Source-PostgreSQL-DataTypes)

## 在 中使用自我管理 PostgreSQL 資料庫做為來源 AWS DMS
<a name="CHAP_Source.PostgreSQL.Prerequisites"></a>

使用自我管理的 PostgreSQL 資料庫做為來源，您可以將資料遷移至另一個 PostgreSQL 資料庫，或其中一個 支援的其他目標資料庫 AWS DMS。資料庫來源可以是在 Amazon EC2 執行個體上執行的內部部署資料庫或自我管理引擎。您可以使用資料庫執行個體來進行完全載入任務，以及變更資料擷取 (CDC) 任務。

### 使用自我管理 PostgreSQL 資料庫做為 AWS DMS 來源的先決條件
<a name="CHAP_Source.PostgreSQL.Prerequisites.SelfManaged"></a>

從自我管理的 PostgreSQL 來源資料庫遷移資料之前，請執行下列動作：
+ 請確定您使用的是 9.4.x 版或更高版本的 PostgreSQL 資料庫。
+ 對於完全載入加上 CDC 任務或僅 CDC 任務，請將超級使用者許可授予針對 PostgreSQL 來源資料庫指定的使用者帳戶。此使用者帳戶需要超級使用者許可，才能存取來源中的複寫特定功能。DMS 使用者帳戶需要所有資料欄的 SELECT 許可，才能成功遷移資料表。如果資料欄缺少許可，DMS 會使用一般 DMS 資料類型映射建立目標資料表，這會導致中繼資料差異和任務失敗。
+ 將 AWS DMS 複寫伺服器的 IP 地址新增至`pg_hba.conf`組態檔案，並啟用複寫和通訊端連線。範例如下。

  ```
              # Replication Instance
              host all all 12.3.4.56/00 md5
              # Allow replication connections from localhost, by a user with the
              # replication privilege.
              host replication dms 12.3.4.56/00 md5
  ```

  PostgreSQL 的 `pg_hba.conf` 組態文件控制用戶端身分驗證。(HBA 代表以主機為基礎的身分驗證。) 按照傳統做法，檔案會儲存在資料庫叢集的資料目錄中。
+ 如果您要使用 將資料庫設定為邏輯複寫的來源， AWS DMS 請參閱 [使用自我管理 PostgreSQL 資料庫做為 AWS DMS 來源來啟用 CDC](#CHAP_Source.PostgreSQL.Prerequisites.CDC)

**注意**  
有些 AWS DMS 交易會在 DMS 引擎再次使用它們之前閒置一段時間。透過使用 PostgreSQL 9.6 版和更高版本的參數 `idle_in_transaction_session_timeout`，可讓您將閒置交易變成逾時而失敗。使用 AWS DMS時不要結束閒置交易。

### 使用自我管理 PostgreSQL 資料庫做為 AWS DMS 來源來啟用 CDC
<a name="CHAP_Source.PostgreSQL.Prerequisites.CDC"></a>

AWS DMS 支援使用邏輯複寫進行變更資料擷取 (CDC)。若要啟用自我管理 PostgreSQL 來源資料庫的邏輯複寫，請在 `postgresql.conf` 組態檔中設定下列參數和值：
+ 設定 `wal_level = logical`。
+ 將 `max_replication_slots` 設為大於 1 的值。

  將 `max_replication_slots` 值設定為您想要執行的任務數量。例如，若要執行 5 項任務，則需要設定至少 5 個插槽。只要任務啟動並保持開啟，插槽立即自動開啟，即使任務不再執行。請務必手動刪除開啟的插槽。請注意，如果 DMS 建立了插槽，則 DMS 會在刪除任務時自動捨棄複寫插槽。
+ 將 `max_wal_senders` 設為大於 1 的值。

  `max_wal_senders` 參數設定可以同時執行的任務數量。
+ `wal_sender_timeout` 參數會將失效超過指定毫秒數的複寫連線結束。內部部署 PostgreSQL 資料庫的預設值為 60000 毫秒 (60 秒)。將值設定為 0 (零) 會停用逾時機制，而且是 DMS 的有效設定。

  將 `wal_sender_timeout` 設為非零值時，使用 CDC 的 DMS 任務至少需要 10000 毫秒 (10 秒)，如果值小於 10000，則會失敗。將值保持在 5 分鐘以內，以避免在 DMS 複寫執行個體的異地同步備份容錯移轉期間造成延遲。

某些參數是靜態值，您只能在伺服器啟動時進行設定。在重新啟動伺服器之前，會忽略其在組態檔 (針對自我管理的資料庫) 或資料庫參數群組 (針對 RDS for PostgreSQL 資料庫) 中對項目所做的任何變更。如需詳細資訊，請參閱 [PostgreSQL 文件](https://www.postgresql.org/docs/current/intro-whatis.html)。

如需啟用 CDC 的詳細資訊，請參閱[使用邏輯複寫啟用變更資料擷取 (CDC)](#CHAP_Source.PostgreSQL.Security)。

## 使用 AWS受管 PostgreSQL 資料庫做為 DMS 來源
<a name="CHAP_Source.PostgreSQL.RDSPostgreSQL"></a>

您可以使用 AWS受管 PostgreSQL 資料庫執行個體做為 的來源 AWS DMS。您可以使用 AWS受管的 PostgreSQL 來源，同時執行完全載入任務和變更資料擷取 (CDC) 任務。

### 使用 AWS受管 PostgreSQL 資料庫做為 DMS 來源的先決條件
<a name="CHAP_Source.PostgreSQL.RDSPostgreSQL.Prerequisites"></a>

從 AWS受管 PostgreSQL 來源資料庫遷移資料之前，請執行下列動作：
+ 我們建議您使用具有 PostgreSQL 資料庫執行個體最低必要許可的 AWS 使用者帳戶，做為 PostgreSQL 來源端點的使用者帳戶 AWS DMS。不建議使用主帳戶。此帳戶必須具有 `rds_superuser` 角色和 `rds_replication` 角色。授權來管理邏輯槽和利用邏輯槽來串流資料的 `rds_replication` 角色

  請務必從您使用之帳戶的主要使用者帳戶建立數個物件。如需建立這些物件的相關資訊，請參閱[不使用主要使用者帳戶遷移 Amazon RDS for PostgreSQL 資料庫](#CHAP_Source.PostgreSQL.RDSPostgreSQL.NonMasterUser)。
+ 如果來源資料庫位於虛擬私有雲端 (VPC) 中，請選取可提供資料庫所在之資料庫執行個體存取的 VPC 安全群組。DMS 複寫執行個體必須這樣做，才能成功連線到來源資料庫執行個體。當資料庫和 DMS 複寫執行個體位於相同的 VPC 中時，請將適當的安全群組新增至其本身的輸入規則。

**注意**  
有些 AWS DMS 交易會在 DMS 引擎再次使用它們之前閒置一段時間。透過使用 PostgreSQL 9.6 版和更高版本的參數 `idle_in_transaction_session_timeout`，可讓您將閒置交易變成逾時而失敗。使用 AWS DMS時不要結束閒置交易。

### 使用 啟用具有 AWS受管 PostgreSQL 資料庫執行個體的 CDC AWS DMS
<a name="CHAP_Source.PostgreSQL.RDSPostgreSQL.CDC"></a>

AWS DMS 當資料庫執行個體設定為使用邏輯複寫時， 支援 Amazon RDS PostgreSQL 資料庫上的 CDC。下表摘要說明每個 AWS受管 PostgreSQL 版本的邏輯複寫相容性。


|  PostgreSQL 版本  |  AWS DMS 完全載入支援   |  AWS DMS CDC 支援  | 
| --- | --- | --- | 
|  Aurora PostgreSQL 2.1 版 (與 PostgreSQL 10.5 版相容 (或更低版本))。  |  是  |  否  | 
|  Aurora PostgreSQL 2.2 版 (與 PostgreSQL 10.6 版 相容 (或更高版本))。  |  是  |  是  | 
|  與 PostgreSQL 10.21 相容 (或更高版本) 的 RDS for PostgreSQL  |  是  |  是  | 

**啟用 RDS PostgreSQL 資料庫執行個體的邏輯複寫**

1. 使用 PostgreSQL 資料庫執行個體 AWS 的主要使用者帳戶做為 PostgreSQL 來源端點的使用者帳戶。主要使用者帳戶擁有能讓它設定 CDC 所需要的角色。

   如果您使用主要使用者帳戶以外的帳戶，務必從主帳戶為您要使用的帳戶建立數個物件。如需詳細資訊，請參閱[不使用主要使用者帳戶遷移 Amazon RDS for PostgreSQL 資料庫](#CHAP_Source.PostgreSQL.RDSPostgreSQL.NonMasterUser)。

1. 將您資料庫叢集參數群組中的 `rds.logical_replication` 參數設為 1。此靜態參數需要重新啟動資料庫執行個體才會生效。套用此參數時， AWS DMS 會設定 `wal_level`、`max_wal_senders`、`max_replication_slots` 和 `max_connections` 參數。這些參數變更會產生更多 Write Ahead Log (WAL)，因此您應在使用邏輯複寫插槽時才設定 `rds.logical_replication` 參數。

1. `wal_sender_timeout` 參數會將失效超過指定毫秒數的複寫連線結束。受 AWS管 PostgreSQL 資料庫的預設值為 30000 毫秒 (30 秒）。將值設定為 0 (零) 會停用逾時機制，而且是 DMS 的有效設定。

   將 `wal_sender_timeout` 設為非零值時，使用 CDC 的 DMS 任務至少需要 10000 毫秒 (10 秒)，如果值介於 0 和 10000 之間，則會失敗。將值保持在 5 分鐘以內，以避免在 DMS 複寫執行個體的異地同步備份容錯移轉期間造成延遲。

1.  請確定資料庫叢集參數群組中的 `max_worker_processes` 參數值等於或大於 `max_logical_replication_workers`、`autovacuum_max_workers` 和 `max_parallel_workers` 的合併值總計。背景工作者程序的數量如果很多，可能會影響小型執行個體上的應用程式工作負載 因此，如果您將 `max_worker_processes` 設為高於預設值，請監控資料庫的效能。

1.  使用 Aurora PostgreSQL 做為具有 CDC 的來源時，請將 `synchronous_commit`設定為 `ON`。

**使用 PostgreSQL MultiAZ 資料庫叢集僅供讀取複本進行 CDC （持續複寫）**

1. 將資料庫 CLUSTER `sync_replication_slots` 參數群組中的 `rds.logical_replication`和 參數設定為 1。此靜態參數需要重新啟動資料庫執行個體才能生效。

1. 執行下列命令以在 Writer 上建立`awsdms_ddl_audit`資料表，並將 取代`objects_schema`為要使用的結構描述名稱：

   ```
   CREATE TABLE objects_schema.awsdms_ddl_audit
   (
     c_key    bigserial primary key,
     c_time   timestamp,    -- Informational
     c_user   varchar(64),  -- Informational: current_user
     c_txn    varchar(16),  -- Informational: current transaction
     c_tag    varchar(24),  -- Either 'CREATE TABLE' or 'ALTER TABLE' or 'DROP TABLE'
     c_oid    integer,      -- For future use - TG_OBJECTID
     c_name   varchar(64),  -- For future use - TG_OBJECTNAME
     c_schema varchar(64),  -- For future use - TG_SCHEMANAME. For now - holds current_schema
     c_ddlqry  text         -- The DDL query associated with the current DDL event
   );
   ```

1. 執行下列命令來建立 `awsdms_intercept_ddl`函數，並將 取代`objects_schema`為要使用的結構描述名稱：

   ```
   CREATE OR REPLACE FUNCTION objects_schema.awsdms_intercept_ddl()
     RETURNS event_trigger
   LANGUAGE plpgsql
   SECURITY DEFINER
     AS $$
     declare _qry text;
   BEGIN
     if (tg_tag='CREATE TABLE' or tg_tag='ALTER TABLE' or tg_tag='DROP TABLE' or tg_tag = 'CREATE TABLE AS') then
            SELECT current_query() into _qry;
            insert into objects_schema.awsdms_ddl_audit
            values
            (
            default,current_timestamp,current_user,cast(TXID_CURRENT()as varchar(16)),tg_tag,0,'',current_schema,_qry
            );
            delete from objects_schema.awsdms_ddl_audit;
   end if;
   END;
   $$;
   ```

1. 執行下列命令來建立`awsdms_intercept_ddl`事件觸發：

   ```
   CREATE EVENT TRIGGER awsdms_intercept_ddl ON ddl_command_end EXECUTE PROCEDURE objects_schema.awsdms_intercept_ddl();
   ```

   確保存取這些事件的所有使用者和角色都具有必要的 DDL 許可。例如：

   ```
   grant all on public.awsdms_ddl_audit to public;
   grant all on public.awsdms_ddl_audit_c_key_seq to public;
   ```

1. 在寫入器上建立複寫槽：

   ```
   SELECT * FROM pg_create_logical_replication_slot('dms_read_replica_slot', 'test_decoding', false, true);
   ```

1. 確保 複寫槽在 Reader 上可用：

   ```
   select * from pg_catalog.pg_replication_slots where slot_name = 'dms_read_replica_slot';
   
   slot_name            |plugin       |slot_type|datoid|database|temporary|active|active_pid|xmin|catalog_xmin|restart_lsn|confirmed_flush_lsn|wal_status|safe_wal_size|two_phase|inactive_since               |conflicting|invalidation_reason|failover|synced|
   ---------------------+-------------+---------+------+--------+---------+------+----------+----+------------+-----------+-------------------+----------+-------------+---------+-----------------------------+-----------+-------------------+--------+------+
   dms_read_replica_slot|test_decoding|logical  |     5|postgres|false    |false |          |    |3559        |0/180011B8 |0/180011F0         |reserved  |             |true     |2025-02-10 15:45:04.083 +0100|false      |                   |false   |false |
   ```

1. 為僅供讀取複本建立 DMS 來源端點，並透過額外連線屬性設定邏輯複寫槽名稱：

   ```
   slotName=dms_read_replica_slot;
   ```

1. 建立並啟動 CDC/FL\$1CDC 任務。
**注意**  
對於 CDC/FL\$1CDC 遷移，DMS 會將任務開始時間視為 CDC 開始位置。複寫槽中所有較舊LSNs 都會遭到忽略。

### 不使用主要使用者帳戶遷移 Amazon RDS for PostgreSQL 資料庫
<a name="CHAP_Source.PostgreSQL.RDSPostgreSQL.NonMasterUser"></a>

在某些情況下，您可能不會對您用來作為來源的 Amazon RDS PostgreSQL 資料庫執行個體使用主要使用者帳戶。在這些情況下，您會建立多個物件來擷取資料定義語言 (DDL) 事件。您要在主帳戶以外的帳戶中建立這些物件，然後在主要使用者帳戶中建立觸發。

**注意**  
如果在來源端點上將 `CaptureDdls` 端點設為 `false`，您即不必在來源資料庫中建立以下資料表和觸發程序。

請使用下列程序建立這些物件。

**建立物件**

1. 選擇要建立物件的結構描述。預設結構描述為 `public`。確認結構描述存在且可讓 `OtherThanMaster` 帳戶存取。

1. 使用主帳戶以外的使用者帳戶 (此處為 `OtherThanMaster` 帳戶) 登入 PostgreSQL 資料庫執行個體。

1. 執行以下命令建立資料表 `awsdms_ddl_audit`，以要使用之結構描述名稱取代以下程式碼中的 `objects_schema`。

   ```
   CREATE TABLE objects_schema.awsdms_ddl_audit
   (
     c_key    bigserial primary key,
     c_time   timestamp,    -- Informational
     c_user   varchar(64),  -- Informational: current_user
     c_txn    varchar(16),  -- Informational: current transaction
     c_tag    varchar(24),  -- Either 'CREATE TABLE' or 'ALTER TABLE' or 'DROP TABLE'
     c_oid    integer,      -- For future use - TG_OBJECTID
     c_name   varchar(64),  -- For future use - TG_OBJECTNAME
     c_schema varchar(64),  -- For future use - TG_SCHEMANAME. For now - holds current_schema
     c_ddlqry  text         -- The DDL query associated with the current DDL event
   );
   ```

1. 執行以下命令建立函數 `awsdms_intercept_ddl`，以要使用的結構描述名稱取代以下程式碼中的 `objects_schema`。

   ```
   CREATE OR REPLACE FUNCTION objects_schema.awsdms_intercept_ddl()
     RETURNS event_trigger
   LANGUAGE plpgsql
   SECURITY DEFINER
     AS $$
     declare _qry text;
   BEGIN
     if (tg_tag='CREATE TABLE' or tg_tag='ALTER TABLE' or tg_tag='DROP TABLE' or tg_tag = 'CREATE TABLE AS') then
            SELECT current_query() into _qry;
            insert into objects_schema.awsdms_ddl_audit
            values
            (
            default,current_timestamp,current_user,cast(TXID_CURRENT()as varchar(16)),tg_tag,0,'',current_schema,_qry
            );
            delete from objects_schema.awsdms_ddl_audit;
   end if;
   END;
   $$;
   ```

1. 登出 `OtherThanMaster` 帳戶，再以獲指派 `rds_superuser` 角色的帳戶登入。

1. 執行以下命令建立事件觸發 `awsdms_intercept_ddl`。

   ```
   CREATE EVENT TRIGGER awsdms_intercept_ddl ON ddl_command_end 
   EXECUTE PROCEDURE objects_schema.awsdms_intercept_ddl();
   ```

1. 請確定存取這些事件的所有使用者和角色都具有必要的 DDL 許可。例如：

   ```
   grant all on public.awsdms_ddl_audit to public;
   grant all on public.awsdms_ddl_audit_c_key_seq to public;
   ```

完成上述程序後，您可以使用 `OtherThanMaster` 帳戶建立 AWS DMS 來源端點。

**注意**  
這些事件由 `CREATE TABLE`、`ALTER TABLE` 和 `DROP TABLE` 陳述式觸發。

## 使用邏輯複寫啟用變更資料擷取 (CDC)
<a name="CHAP_Source.PostgreSQL.Security"></a>

您可以使用 PostgreSQL 的原生邏輯複寫功能，在進行適用於 PostgreSQL 來源的資料庫遷移期間啟用變更資料擷取 (CDC)。您可以將此功能與自我管理的 PostgreSQL 以及 Amazon RDS for PostgreSQL SQL 資料庫執行個體搭配使用。此方法可縮短停機時間，並協助確保目標資料庫與來源 PostgreSQL 資料庫保持同步。

AWS DMS 支援具有主索引鍵的 CDC for PostgreSQL 資料表。如果資料表沒有主索引鍵，預先寫入日誌 (WAL) 不會在資料庫資料列的影像之前包含 。在此情況下，DMS 無法更新此資料表。您可以在此使用其他組態設定，並使用資料表複本身分識別作為因應措施。但是，這種方法可能會產生額外的日誌。我們建議您僅在仔細測試之後，才使用資料表複本身分識別作為因應措施。如需詳細資訊，請參閱[使用 PostgreSQL 資料庫作為 DMS 來源時的其他組態設定](#CHAP_Source.PostgreSQL.Advanced)。

**注意**  
REPLICA IDENTITY FULL 支援邏輯解碼外掛程式，但不支援 pglogical 外掛程式。如需詳細資訊，請參閱 [pglogical 文件](https://github.com/2ndQuadrant/pglogical#primary-key-or-replica-identity-required)。

對於完全載入和僅限 CDC 和 CDC 的任務， AWS DMS 會使用邏輯複寫插槽來保留複寫的 WAL 日誌，直到日誌解碼為止。在完全載入和 CDC 任務或 CDC 任務的重新啟動 (非繼續) 時，會重新建立複寫插槽。

**注意**  
對於邏輯解碼，DMS 會擇一使用 test\$1decoding 或 pglogical 外掛程式。如果 pglogical 外掛程式在來源 PostgreSQL 資料庫上是可用的狀態，則 DMS 會使用 pglogical 建立複寫插槽，否則將使用 test\$1decoding 外掛程式。如需 test-decoding 外掛程式的詳細資訊，請參閱 [ PostgreSQL 文件](https://www.postgresql.org/docs/9.4/test-decoding.html)。  
如果將資料庫參數 `max_slot_wal_keep_size` 設為非預設值，且複寫插槽的 `restart_lsn` 落在目前 LSN 後面的次數超過大小，則 DMS 任務會因必要的 WAL 檔案移除而失敗。

### 設定 pglogical 外掛程式
<a name="CHAP_Source.PostgreSQL.Security.Pglogical"></a>

pglogical 外掛程式會實作為 PostgreSQL 擴充功能，是用於選擇性資料複寫的邏輯複寫系統和模型。下表說明支援 pglogical 外掛程式的來源 PostgreSQL 資料庫版本。


|  PostgreSQL 來源   |  支援 pglogical  | 
| --- | --- | 
|  自我管理的 PostgreSQL 9.4 版或更高版本  |  是  | 
|  Amazon RDS PostgreSQL 9.5 或更低版本  |  否  | 
|  Amazon RDS PostgreSQL 9.6 或更高版本  |  是  | 
|  Aurora PostgreSQL 1.x 到 2.5.x  |  否  | 
|  Aurora PostgreSQL 2.6.x 及更高版本  |  是  | 
|  Aurora PostgreSQL 3.3.x 及更高版本  |  是  | 

在設定 pglogical 以搭配 使用之前 AWS DMS，請先在 PostgreSQL 來源資料庫上啟用變更資料擷取 (CDC) 的邏輯複寫。
+ 如需在自我管理** PostgreSQL 來源資料庫上啟用 CDC 邏輯複寫的相關資訊，請參閱[使用自我管理 PostgreSQL 資料庫做為 AWS DMS 來源來啟用 CDC](#CHAP_Source.PostgreSQL.Prerequisites.CDC)
+ 如需在 *AWS受管* PostgreSQL 來源資料庫上啟用 CDC 邏輯複寫的相關資訊，請參閱[使用 啟用具有 AWS受管 PostgreSQL 資料庫執行個體的 CDC AWS DMS](#CHAP_Source.PostgreSQL.RDSPostgreSQL.CDC)。

在 PostgreSQL 來源資料庫上啟用邏輯複寫之後，請使用下列步驟設定 pglogical 以與 DMS 搭配使用。

**使用 pglogical 外掛程式在 PostgreSQL 來源資料庫上使用 進行邏輯複寫 AWS DMS**

1. 在來源 PostgreSQL 資料庫上建立 pglogical 擴充功能：

   1. 設定正確的參數：
      + 對於自我管理的 PostgreSQL 資料庫，請設定資料庫參數 `shared_preload_libraries= 'pglogical'`。
      + 對於 Amazon RDS 上的 PostgreSQL 和 Amazon Aurora PostgreSQL 相容版本資料庫，請在相同的 RDS 參數群組中將參數 `shared_preload_libraries` 設定為 `pglogical`。

   1. 重新啟動 PostgreSQL 來源資料庫。

   1. 在 PostgreSQL 資料庫上，執行命令 (`create extension pglogical;`)

1. 執行下列命令來確認 pglogical 是否安裝成功：

   `select * FROM pg_catalog.pg_extension`

您現在可以建立 AWS DMS 任務，為 PostgreSQL 來源資料庫端點執行變更資料擷取。

**注意**  
如果您沒有在 PostgreSQL 來源資料庫上啟用 pglogical，則預設情況下 AWS DMS 會使用 `test_decoding` 外掛程式。啟用 pglogical 進行邏輯解碼時， 預設 AWS DMS 會使用 pglogical。但是您可以設定額外的連接屬性 (`PluginName`) 以改用 `test_decoding` 外掛程式。

## 如何使用原生 CDC 起點，以設定 PostgreSQL 來源的 CDC 載入
<a name="CHAP_Source.PostgreSQL.v10"></a>

建立端點時，您可以將 `slotName` 額外連線屬性設定為現有邏輯複寫插槽的名稱，便可將原生 CDC 起點和 PostgreSQL 作為來源。此邏輯複寫插槽會保留從建立端點時開始的持續變更，因此它支援從前一個時間點進行複寫。

PostgreSQL 會將資料庫變更寫入 WAL 檔案，這只有在 AWS DMS 成功讀取邏輯複寫插槽的變更之後才會捨棄。使用邏輯複寫插槽可以保護已記錄的變更，使其免於接受複寫引擎使用之前遭到刪除。

不過，依照不同的變更速率和使用比率，保留在邏輯複寫插槽中的變更可能會提高的磁碟使用率。建議您在使用邏輯複寫插槽時，於來源 PostgreSQL 執行個體中設定空間使用量警示。如需設定 `slotName` 額外連線屬性的相關資訊，請參閱 [使用 PostgreSQL 做為 DMS 來源時的端點設定和額外連線屬性 (ECAs)](#CHAP_Source.PostgreSQL.ConnectionAttrib)。

下列程序更詳細說明這個方法。

**如何使用原生 CDC 起點，以設定 PostgreSQL 來源端點的 CDC 載入**

1. 識別您想要用作為起始點之先前複寫任務 (父項任務) 所使用的邏輯複寫插槽。然後查詢來源資料庫上的`pg_replication_slots`檢視，以確保此插槽沒有任何作用中的連線。如果是這樣，請在繼續之前解決並關閉。

   對於下列步驟，假設您的邏輯複寫插槽為 `abc1d2efghijk_34567890_z0yx98w7_6v54_32ut_1srq_1a2b34c5d67ef`。

1. 建立新的來源端點，包括下列額外的連線屬性設定：

   ```
   slotName=abc1d2efghijk_34567890_z0yx98w7_6v54_32ut_1srq_1a2b34c5d67ef;
   ```

1. 使用主控台 AWS CLI 或 AWS DMS API 建立新的僅限 CDC 任務。例如，您可以使用 CLI，執行以下 `create-replication-task` 命令。

   ```
   aws dms create-replication-task --replication-task-identifier postgresql-slot-name-test 
   --source-endpoint-arn arn:aws:dms:us-west-2:012345678901:endpoint:ABCD1EFGHIJK2LMNOPQRST3UV4 
   --target-endpoint-arn arn:aws:dms:us-west-2:012345678901:endpoint:ZYX9WVUTSRQONM8LKJIHGF7ED6 
   --replication-instance-arn arn:aws:dms:us-west-2:012345678901:rep:AAAAAAAAAAA5BB4CCC3DDDD2EE 
   --migration-type cdc --table-mappings "file://mappings.json" --cdc-start-position "4AF/B00000D0" 
   --replication-task-settings "file://task-pg.json"
   ```

   在上述命令中，會設定下列選項：
   + `source-endpoint-arn` 選項會設為您在步驟 2 中建立的新值。
   + `replication-instance-arn` 選項會設為與步驟 1 的父項任務相同的值。
   + `table-mappings` 和 `replication-task-settings` 選項會設為與步驟 1 中父項任務相同的值。
   + `cdc-start-position` 選項會設為起始位置值。若要尋找此起始位置，請查詢來源資料庫上的 `pg_replication_slots` 檢視，或檢視步驟 1 中父項任務的主控台詳細資訊。如需詳細資訊，請參閱[決定 CDC 原生起點](CHAP_Task.CDC.md#CHAP_Task.CDC.StartPoint.Native)。

   若要在使用 AWS DMS 主控台建立新的僅限 CDC 任務時啟用自訂 CDC 啟動模式，請執行下列動作：
   + 在**任務設定**區段中，針對**來源交易的 CDC 開始模式**，選擇**啟用自訂 CDC 開始模式**。
   + 對於**來源交易的自訂 CDC 起點**，請選擇**指定日誌序號**。指定系統變更編號，或選擇**指定復原檢查點**，然後提供復原檢查點。

   當此 CDC 任務執行時，如果指定的邏輯複寫槽不存在， 會 AWS DMS 引發錯誤。如果未使用 `cdc-start-position` 的有效設定建立任務，也會引發錯誤。

將原生 CDC 起點與 pglogical 外掛程式搭配使用時，您想要使用新的複寫插槽時，請先完成下列設定步驟，然後再建立 CDC 任務。

**使用先前未建立為另一個 DMS 任務一部分的新複寫插槽**

1. 如下所示建立複寫插槽：

   ```
   SELECT * FROM pg_create_logical_replication_slot('replication_slot_name', 'pglogical');
   ```

1. 資料庫建立複寫插槽之後，請取得並記下此插槽的 **restart\$1lsn** 和 **confirmed\$1flush\$1lsn** 值：

   ```
   select * from pg_replication_slots where slot_name like 'replication_slot_name';
   ```

   請注意，在複寫插槽之後建立的 CDC 任務的原生 CDC 開始位置不能早於 **confirmed\$1flush\$1lsn** 值。

   若要取得有關 **restart\$1lsn** 和 **confirmed\$1flush\$1lsn** 的相關資訊，請參閱 [pg\$1replication\$1slots](https://www.postgresql.org/docs/14/view-pg-replication-slots.html) 

1. 建立 pglogical 節點。

   ```
   SELECT pglogical.create_node(node_name := 'node_name', dsn := 'your_dsn_name');
   ```

1. 使用 `pglogical.create_replication_set` 函數建立兩個複寫集。第一個複寫集會追蹤具有主索引鍵之資料表的更新和刪除。第二個複寫集只會追蹤插入，名稱與第一個複寫集的名稱相同，但新增了前綴 'i'。

   ```
   SELECT pglogical.create_replication_set('replication_slot_name', false, true, true, false);
   SELECT pglogical.create_replication_set('ireplication_slot_name', true, false, false, true);
   ```

1. 將資料表新增至複寫集。

   ```
   SELECT pglogical.replication_set_add_table('replication_slot_name', 'schemaname.tablename', true);
   SELECT pglogical.replication_set_add_table('ireplication_slot_name', 'schemaname.tablename', true);
   ```

1. 建立來源端點時，請依照下列設定額外連線屬性 (ECA)。

   ```
   PluginName=PGLOGICAL;slotName=slot_name;
   ```

您現在可以使用新的複寫插槽，使用 PostgreSQL 原生起點建立僅限 CDC 的任務。如需 pglogical 外掛程式的詳細資訊，請參閱 [pglogical 3.7 文件](https://www.enterprisedb.com/docs/pgd/3.7/pglogical/)

## 使用 從 PostgreSQL 遷移至 PostgreSQL AWS DMS
<a name="CHAP_Source.PostgreSQL.Homogeneous"></a>

當您從 PostgreSQL 以外的資料庫引擎遷移至 PostgreSQL 資料庫時， 幾乎一律 AWS DMS 是最適合使用的遷移工具。但是，從 PostgreSQL 資料庫遷移到 PostgreSQL 資料庫時，PostgreSQL 工具會更有效率。

### 使用 PostgreSQL 原生工具遷移資料
<a name="CHAP_Source.PostgreSQL.Homogeneous.Native"></a>

在下列情況中，建議您使用 PostgreSQL 資料庫遷移工具，例如 `pg_dump`：
+ 您有一項從來源 PostgreSQL 資料庫遷移到目標 PostgreSQL 資料庫的同質遷移。
+ 您想要遷移整個資料庫。
+ 原生工具可讓您以最短的停機時間來遷移資料。

pg\$1dump 公用程式會使用 COPY 命令，建立 PostgreSQL 資料庫的結構描述和資料傾印。pg\$1dump 產生的傾印指令碼會將資料載入相同名稱的資料庫中，並重新建立資料表、索引和外部索引鍵。若要將資料還原至不同名稱的資料庫，請使用 `pg_restore` 命令和 `-d` 參數。

如果您要將資料從 EC2 上執行的 PostgreSQL 來源資料庫遷移到 Amazon RDS for PostgreSQL 的目標，您可以使用 pglogical 外掛程式。

如需將 PostgreSQL 資料庫匯入 Amazon RDS for PostgreSQL 或 Amazon Aurora PostgreSQL 相容版本的詳細資訊，請參閱 [https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Procedural.Importing.html](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Procedural.Importing.html)。

### 使用 DMS 將資料從 PostgreSQL 遷移至 PostgreSQL
<a name="CHAP_Source.PostgreSQL.Homogeneous.DMS"></a>

 AWS DMS 可以將資料從內部部署的來源 PostgreSQL 資料庫遷移到目標 Amazon RDS for PostgreSQL 或 Aurora PostgreSQL 執行個體。核心或基本 PostgreSQL 資料類型最常遷移成功。

**注意**  
將分區資料表從 PostgreSQL 來源複寫到 PostgreSQL 目標時，您不需要提及父資料表作為 DMS 任務中選擇條件的一部分。提及父資料表會導致目標上子資料表中的資料重複，而可能會導致 PK 違規。只要在資料表對應選擇條件中選取子資料表，就會自動填入父資料表。

來源資料庫上支援但目標上不支援的資料類型可能無法成功遷移。如果資料類型未知， 會將某些資料類型 AWS DMS 串流為字串。有些資料類型（如 XML 和 JSON），小型檔案移轉會成功，但大型文件會失敗。

執行資料類型遷移時，請注意下列事項：
+ 在某些情況下，PostgreSQL NUMERIC(p，s) 資料類型不會指定任何精確度和比例。對於版本 3.4.2 及更早版本的 DMS，DMS 根據預設會使用精確度 28 和小數位數 6，即 NUMERIC(28,6)。舉例來說，來源的值 0.611111104488373 會轉換為 PostgreSQL 目標的 0.611111。
+ 具有 ARRAY 資料類型的資料表必須有主索引鍵。缺少主索引鍵之 ARRAY 資料類型的資料表會在完全載入間暫停。

下表顯示來源 PostgreSQL 資料類型以及它們是否可成功遷移：


| 資料類型 | 遷移成功 | 部分遷移 | 不會遷移 | 說明 | 
| --- | --- | --- | --- | --- | 
| INTEGER | X |  |  |  | 
| SMALLINT | X |  |  |  | 
| BIGINT | X |  |  |  | 
| NUMERIC/DECIMAL(p,s) |  | X |  | 其中 0<p<39，且 0<s | 
| NUMERIC/DECIMAL |  | X |  | 其中 p>38 或 p=s=0 | 
| REAL | X |  |  |  | 
| DOUBLE | X |  |  |  | 
| SMALLSERIAL | X |  |  |  | 
| SERIAL | X |  |  |  | 
| BIGSERIAL | X |  |  |  | 
| MONEY | X |  |  |  | 
| CHAR |  | X |  | 沒有指定的精確度 | 
| CHAR(n) | X |  |  |  | 
| VARCHAR |  | X |  | 沒有指定的精確度 | 
| VARCHAR(n) | X |  |  |  | 
| TEXT | X |  |  |  | 
| BYTEA | X |  |  |  | 
| TIMESTAMP | X |  |  | 正無限大值和負無限大值分別截斷為 '9999-12-31 23:59:59' 和 '4713-01-01 00:00:00 BC'。 | 
| TIMESTAMP WITH TIME ZONE |  | X |  |  | 
| DATE | X |  |  |  | 
| TIME | X |  |  |  | 
| TIME WITH TIME ZONE | X |  |  |  | 
| INTERVAL |  | X |  |  | 
| BOOLEAN | X |  |  |  | 
| ENUM |  |  | X |  | 
| CIDR | X |  |  |  | 
| INET |  |  | X |  | 
| MACADDR |  |  | X |  | 
| TSVECTOR |  |  | X |  | 
| TSQUERY |  |  | X |  | 
| XML |  | X |  |  | 
| POINT | X |  |  | PostGIS 空間資料類型 | 
| LINE |  |  | X |  | 
| LSEG |  |  | X |  | 
| BOX |  |  | X |  | 
| PATH |  |  | X |  | 
| POLYGON | X |  |  | PostGIS 空間資料類型 | 
| CIRCLE |  |  | X |  | 
| JSON |  | X |  |  | 
| ARRAY | X |  |  | 需要主索引鍵 | 
| COMPOSITE |  |  | X |  | 
| RANGE |  |  | X |  | 
| LINESTRING | X |  |  | PostGIS 空間資料類型 | 
| MULTIPOINT | X |  |  | PostGIS 空間資料類型 | 
| MULTILINESTRING | X |  |  | PostGIS 空間資料類型 | 
| MULTIPOLYGON | X |  |  | PostGIS 空間資料類型 | 
| GEOMETRYCOLLECTION | X |  |  | PostGIS 空間資料類型 | 

### 遷移 PostGIS 空間資料類型
<a name="CHAP_Source.PostgreSQL.DataTypes.Spatial"></a>

*空間資料*可識別空間中，物件或位置的幾何圖形資訊。PostgreSQL 物件關聯式資料庫支援 PostGIS 空間資料類型。

遷移 PostgreSQL 空間資料物件之前，請確定 PostGIS 外掛程式可在全域層級啟用。這樣做可確保 為 PostgreSQL 目標資料庫執行個體 AWS DMS 建立確切的來源空間資料欄。

對於 PostgreSQL 到 PostgreSQL 同質遷移， AWS DMS 支援 PostGIS 幾何和地理 （地理座標） 資料物件類型和子類型的遷移，如下所示：
+  POINT 
+  LINESTRING 
+  POLYGON 
+  MULTIPOINT 
+  MULTILINESTRING 
+  MULTIPOLYGON 
+  GEOMETRYCOLLECTION 

## 使用 從 Babelfish for Amazon Aurora PostgreSQL 遷移 AWS DMS
<a name="CHAP_Source.PostgreSQL.Babelfish"></a>

您可以使用 將 Babelfish for Aurora PostgreSQL 來源資料表遷移至任何支援的目標端點 AWS DMS。

當您使用 DMS 主控台、API 或 CLI 命令建立 AWS DMS 來源端點時，請將來源設定為 **Amazon Aurora PostgreSQL**，並將資料庫名稱設定為 **babelfish\$1db**。在**端點設定**區段中，確定 **DatabaseMode** 設定為 **Babelfish**，**BabelfishDatabaseName** 設定為來源 Babelfish T-SQL 資料庫的名稱。不使用 Babelfish TCP 連接埠 **1433**，而是使用 Aurora PostgreSQL TCP 連接埠 **5432**。

您必須在遷移資料之前建立資料表，以確保 DMS 使用正確的資料類型和資料表中繼資料。如果您在執行遷移之前未在目標上建立資料表，DMS 可能會建立具有不正確資料類型和許可的資料表。

### 將轉換規則新增至遷移任務
<a name="CHAP_Source.PostgreSQL.Babelfish.Transform"></a>

當您為 Babelfish 來源建立遷移任務時，您需要包含轉換規則，以確保 DMS 使用預先建立的目標資料表。

如果您在定義 Babelfish for PostgreSQL 叢集時設定多資料庫遷移模式，請將重新命名結構描述名稱的轉換規則新增至 T-SQL 結構描述。例如，如果 T-SQL 結構描述名稱為 `dbo`，而 Babelfish for PostgreSQL 結構描述名稱為 `mydb_dbo`，`dbo`請使用轉換規則將結構描述重新命名為 。若要尋找 PostgreSQL 結構描述名稱，請參閱《*Amazon Aurora 使用者指南*》中的 [Babelfish 架構](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/babelfish-architecture.html)。

如果您使用單一資料庫模式，則不需要使用轉換規則來重新命名資料庫結構描述。PostgreSQL 結構描述名稱具有one-to-one映射。

下列轉換規則範例示範如何將結構描述名稱從`mydb_dbo`後重新命名為 `dbo`：

```
{
    "rules": [
        {
            "rule-type": "transformation",
            "rule-id": "566251737",
            "rule-name": "566251737",
            "rule-target": "schema",
            "object-locator": {
                "schema-name": "mydb_dbo"
            },
            "rule-action": "rename",
            "value": "dbo",
            "old-value": null
        },
        {
            "rule-type": "selection",
            "rule-id": "566111704",
            "rule-name": "566111704",
            "object-locator": {
                "schema-name": "mydb_dbo",
                "table-name": "%"
            },
            "rule-action": "include",
            "filters": []
        }
    ]
}
```

### 搭配 Babelfish 資料表使用 PostgreSQL 來源端點的限制
<a name="CHAP_Source.PostgreSQL.Babelfish.Limitations"></a>

搭配 Babelfish 資料表使用 PostgreSQL 來源端點時，適用下列限制：
+ DMS 僅支援從 Babelfish 16.2/15.6 版和更新版本以及 DMS 3.5.3 版和更新版本進行遷移。
+ DMS 不會將 Babelfish 資料表定義變更複寫至目標端點。此限制的解決方法是先在目標上套用資料表定義變更，然後在 Babelfish 來源上變更資料表定義。
+ 當您使用 BYTEA 資料類型建立 Babelfish 資料表時，DMS 會在遷移至 SQL Server 做為目標時將其轉換為 `varbinary(max)`資料類型。
+ DMS 不支援二進位資料類型的完整 LOB 模式。請改為對二進位資料類型使用有限的 LOB 模式。
+ DMS 不支援 Babelfish 做為來源的資料驗證。
+ 對於**目標資料表準備模式**任務設定，請僅使用**不執行**或**截斷**模式。請勿使用**刪除目標中的資料表**模式。在**目標上使用捨棄資料表**時，DMS 可能會建立資料類型不正確的資料表。
+ 使用持續複寫 (CDC 或完全載入和 CDC) 時，請將`PluginName`額外連線屬性 (ECA) 設定為 `TEST_DECODING`。
+ DMS 不支援 Babelfish 做為來源之分割資料表的複寫 (CDC 或完全載入和 CDC)。

## 從 PostgreSQL 來源資料庫移除 AWS DMS 成品
<a name="CHAP_Source.PostgreSQL.CleanUp"></a>

若要擷取 DDL 事件， 會在遷移任務開始時，在 PostgreSQL 資料庫中 AWS DMS 建立各種成品。當任務完成後，您可能想要移除這些成品。

若要移除成品，請發出以下陳述式 (依出現順序)，其中 `{AmazonRDSMigration}` 是成品建立所在的結構描述。如要捨棄結構描述，請務必小心謹慎。絕對不要捨棄操作的結構描述，尤其是不公開的。

```
drop event trigger awsdms_intercept_ddl;
```

事件觸發不屬於特定結構描述。

```
drop function {AmazonRDSMigration}.awsdms_intercept_ddl()
drop table {AmazonRDSMigration}.awsdms_ddl_audit
drop schema {AmazonRDSMigration}
```

## 使用 PostgreSQL 資料庫作為 DMS 來源時的其他組態設定
<a name="CHAP_Source.PostgreSQL.Advanced"></a>

從 PostgreSQL 資料庫遷移資料時，您有兩種方式可以新增額外的組態設定：
+ 您可以在額外連線屬性新增值，擷取 DDL 事件和指定要建立操作 DDL 資料庫成品的結構描述。如需詳細資訊，請參閱[使用 PostgreSQL 做為 DMS 來源時的端點設定和額外連線屬性 (ECAs)](#CHAP_Source.PostgreSQL.ConnectionAttrib)。
+ 您可以覆寫連線字串參數。請選擇下列其中一個選項：
  + 指定內部 AWS DMS 參數。因為很少需要這種參數，所以不會在使用者介面公開。
  + 為特定資料庫用戶端指定傳遞 （傳遞） 值。在傳遞給資料庫用戶端的連線 sting 中 AWS DMS 包含傳遞參數。
+ 透過使用 PostgreSQL 9.4 版及更新版本中的資料表層級參數 `REPLICA IDENTITY`，您可以控制在預寫日誌 (WAL) 中寫入的資訊。特別是，其會對於識別已更新或刪除的資料列的 WALS 執行此操作。`REPLICA IDENTITY FULL` 會記錄資料列中所有資料欄的舊值。將 `REPLICA IDENTITY FULL` 用於每個資料表時請小心，因為 `FULL` 可能產生額外不必要的 WAL 數量。如需詳細資訊，請參閱 [ALTER TABLE-REPLICA IDENTITY](https://www.postgresql.org/docs/devel/sql-altertable.html) 

## 作為 PostgreSQL 來源的僅供讀取複本
<a name="CHAP_Source.PostgreSQL.ReadReplica"></a>

在 中使用 PostgreSQL 僅供讀取複本做為 CDC 來源 AWS DMS ，以減少主要資料庫負載。此功能可從 PostgreSQL 16.x 取得，且需要 3 AWS DMS .6.1 版或更新版本。使用僅供讀取複本處理 CDC 可減少對主要資料庫的操作影響。

**注意**  
Amazon RDS PostgreSQL 16.x 版對三可用區域 (TAZ) 組態中的僅供讀取複本邏輯複寫有限制。如需 TAZ 部署中的完整僅供讀取複本邏輯複寫支援，您必須使用 PostgreSQL 17.x 版或更新版本。

### 先決條件
<a name="CHAP_Source.PostgreSQL.ReadReplica.prereq"></a>

使用僅供讀取複本做為 CDC 來源之前 AWS DMS，您必須在主要資料庫執行個體及其僅供讀取複本上啟用邏輯複寫，以在僅供讀取複本上建立邏輯解碼。執行下列動作：
+ 在主要資料庫執行個體及其僅供讀取複本以及任何其他必要的資料庫參數上啟用邏輯複寫。如需詳細資訊，請參閱[使用 AWS受管 PostgreSQL 資料庫做為 DMS 來源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.PostgreSQL.html#CHAP_Source.PostgreSQL.RDSPostgreSQL)。
+ 對於僅限 CDC 的任務，在主要 （寫入器） 執行個體上建立複寫槽。如需詳細資訊，請參閱[使用原生 CDC 起點設定 PostgreSQL 來源的 CDC 負載](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.PostgreSQL.html#CHAP_Source.PostgreSQL.v10)。此動作是必要的，因為僅供讀取複本不支援建立複寫槽。
+ 對於 PostgreSQL 16 版，必須在僅供讀取複本上手動建立插槽。
+ 對於 PostgreSQL 第 17 版及更高版本，複寫插槽必須在主要 上建立，並自動同步到僅供讀取複本。
+ 使用完全載入 \$1 CDC 或僅限 CDC 任務時， AWS DMS 可以自動管理主要執行個體上的邏輯複寫槽，但不能管理僅供讀取複本上的邏輯複寫槽。對於 PostgreSQL 第 16 版僅供讀取複本，您必須在重新啟動任務 （而非繼續） 之前手動捨棄並重新建立複寫槽。略過此步驟可能會導致任務失敗或不正確的 CDC 開始位置。從 PostgreSQL 第 17 版起，主要執行個體的邏輯槽同步會自動化此程序。

完成先決條件後，您可以使用端點設定中的僅供讀取複本來源`SlotName`複寫來設定 AWS DMS 來源端點，並使用原生 CDC 起點來設定 AWS DMS 任務。如需詳細資訊，請參閱[使用 PostgreSQL 做為 DMS 來源時的端點設定和額外連線屬性 (ECAs)](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.PostgreSQL.html#CHAP_Source.PostgreSQL.ConnectionAttrib)，以及[使用原生 CDC 起點設定 PostgreSQL 來源的 CDC 負載](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.PostgreSQL.html#CHAP_Source.PostgreSQL.v10)。

## 使用 `MapBooleanAsBoolean` PostgreSQL 端點設定
<a name="CHAP_Source.PostgreSQL.ConnectionAttrib.Endpointsetting"></a>

您可以使用 PostgreSQL 端點設定，將布林值作為布林值從 PostgreSQL 來源對應至 Amazon Redshift 目標。根據預設，BOOLEAN 型別會以 varchar(5) 遷移。您可以如下列範例所示，指定 `MapBooleanAsBoolean` 讓 PostgreSQL 將布林值型別以 boolean 遷移。

```
--postgre-sql-settings '{"MapBooleanAsBoolean": true}'
```

請注意，您必須同時在來源和目標端點上進行此設定，該設定才會生效。

由於 MySQL 沒有 BOOLEAN 類型，因此將 BOOLEAN 資料遷移至 MySQL 時，請使用轉換規則而非此設定。

## 使用 PostgreSQL 做為 DMS 來源時的端點設定和額外連線屬性 (ECAs)
<a name="CHAP_Source.PostgreSQL.ConnectionAttrib"></a>

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

下表顯示您可以搭配 PostgreSQL 做為來源使用的端點設定和 ECAs。

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

## 使用 PostgreSQL 資料庫作為 DMS 來源的限制
<a name="CHAP_Source.PostgreSQL.Limitations"></a>

使用 PostgreSQL 做為 AWS DMS來源時，有下列限制：
+ AWS DMS 無法使用 Amazon RDS for PostgreSQL 10.4 或 Amazon Aurora PostgreSQL 10.4 做為來源或目標。
+ 擷取的資料表必須有主索引鍵。如果資料表沒有主索引鍵， 會 AWS DMS 忽略該資料表的 DELETE 和 UPDATE 記錄操作。如需因應措施，請參閱[使用邏輯複寫啟用變更資料擷取 (CDC)](#CHAP_Source.PostgreSQL.Security)。

  **備註：**我們不建議在沒有主索引鍵/唯一索引的情況下進行遷移，否則應考量其他限制，例如「不」批次套用功能、完整 LOB 功能、資料驗證，以及無法有效率地複寫至 Redshift 目標。
+ AWS DMS 會忽略嘗試更新主索引鍵區段。在這些情況下，目標會將更新識別為一個未更新任何資料列的項目。不過，因為無法預測在 PostgreSQL 中更新主索引鍵的結果，所以例外狀況資料表中不會寫入任何記錄。
+ AWS DMS 不支援**從時間戳記執行開始程序變更**選項。
+ AWS DMS 不會複寫分割區或子分割區操作 (`ADD`、 `DROP`或 ) 所產生的變更`TRUNCATE`。
+ 複寫同名但每個名稱大小寫不盡相同的多份資料表 (例如 table1、TABLE1 和 Table1)，會造成無法預測的行為。由於此問題， AWS DMS 不支援這種複寫類型。
+ 在大多數情況下， AWS DMS 支援資料表的 CREATE、ALTER 和 DROP DDL 陳述式變更處理。如果資料表保留在內部函數或程序內文區塊或其他巢狀建構中， AWS DMS 則 不支援此變更處理。

  例如，不擷取以下變更。

  ```
  CREATE OR REPLACE FUNCTION attu.create_distributors1() RETURNS void
  LANGUAGE plpgsql
  AS $$
  BEGIN
  create table attu.distributors1(did serial PRIMARY KEY,name
  varchar(40) NOT NULL);
  END;
  $$;
  ```
+ 目前 PostgreSQL 來源中的 `boolean` 資料類型會以具有不一致值的 `bit` 資料類型形式，遷移至 SQL Server 目標。作為解決方法，使用資料欄的`VARCHAR(1)`資料類型預先建立資料表 （或 AWS DMS 建立資料表）。然後讓下游處理將「F」視為 False，將「T」視為 True。
+ AWS DMS 不支援 TRUNCATE 操作的變更處理。
+ OID LOB 資料類型不會遷移到目標。
+ AWS DMS 僅支援同質遷移的 PostGIS 資料類型。
+ 如果來源是在內部部署或在 Amazon EC2 執行個體上的 PostgreSQL 資料庫，請確保 test\$1decoding 輸出外掛程式會安裝在來源端點。您可以在 PostgreSQL contrib 套件找到這個外掛程式。如需 test-decoding 外掛程式的詳細資訊，請參閱 [ PostgreSQL 文件](https://www.postgresql.org/docs/10/static/test-decoding.html)。
+ AWS DMS 不支援變更處理來設定和取消設定資料欄預設值 （在 ALTER TABLE 陳述式上使用 ALTER COLUMN SET DEFAULT 子句）。
+ AWS DMS 不支援變更處理以設定資料欄 nullability （使用 ALTER TABLE 陳述式上的 ALTER COLUMN 【SET\$1DROP】 NOT NULL 子句）。
+ 啟用邏輯複寫時，每個交易保留在記憶體中的變更數目上限為 4 MB。之後，變更會溢出到磁碟。結果 `ReplicationSlotDiskUsage` 會增加，`restart_lsn` 在交易完成或中止並且回復完成前不會有所進展。由於這個交易很長，回復所需時間可能很久。因此，在啟用邏輯複寫時，請避免長時間執行的交易或許多子交易。相反地，請將交易分解為幾個較小的交易。

  在 Aurora PostgreSQL 第 13 版及更新版本上，您可以調校 `logical_decoding_work_mem` 參數，以控制 DMS 何時溢出將資料變更為磁碟。如需詳細資訊，請參閱[Aurora PostgreSQL 中的溢出檔案](CHAP_Troubleshooting_Latency_Source_PostgreSQL.md#CHAP_Troubleshooting_Latency_Source_PostgreSQL_Spill)。
+ 具有 ARRAY 資料類型的資料表必須有主索引鍵。缺少主索引鍵之 ARRAY 資料類型的資料表會在完全載入間暫停。
+ AWS DMS 不支援遷移與資料表分割或資料表[繼承相關的資料表](https://www.postgresql.org/docs/15/ddl-inherit.html)中繼資料。當 AWS DMS 遇到分割的資料表或使用繼承的資料表時，會觀察到下列行為：
  + AWS DMS 識別和報告涉及來源資料庫上分割或繼承的父資料表和子資料表。
  + 在**目標上建立資料表**：在目標資料庫中，將資料表 AWS DMS 建立為標準 （非分割、非繼承） 資料表，保留所選資料表的結構和屬性，但不會保留分割或繼承邏輯。
  + **在繼承資料表中記錄差異**：對於使用繼承的資料表， AWS DMS 不會在填入父資料表時區分屬於子資料表的記錄。因此，它不會使用 SQL 查詢搭配語法，例如：`SELECT * FROM ONLY parent_table_name`。
+ 若要將分割資料表從 PostgreSQL 來源複寫到 PostgreSQL 目標，請先在目標手動建立父資料表和子資料表。然後，要另外定義任務，以複寫到那些資料表。在這種情況下，要將任務組態設定為**先截斷再載入**。
+ PostgreSQL `NUMERIC` 資料類型的大小不固定。根據預設，當傳輸資料類型為 `NUMERIC` 但沒有精確度和小數位數的資料時，DMS 使用 `NUMERIC(28,6)` (精確度為 28 和小數位數為 6)。舉例來說，來源的值 0.611111104488373 會轉換為 PostgreSQL 目標的 0.611111。
+ AWS DMS 僅支援 Aurora PostgreSQL Serverless V1 作為完全載入任務的來源。 AWS DMS 支援 Aurora PostgreSQL Serverless V2 作為完全載入、完全載入和 CDC 以及僅限 CDC 任務的來源。
+ AWS DMS 不支援複寫具有以 coalesce 函數建立之唯一索引的資料表。
+ 如果來源和目標上的主索引鍵定義不相符，複寫結果可能無法預測。
+ 使用平行載入功能時，不支援根據分割或子分割進行資料表分段。如需平行載入的詳細資訊，請參閱[在選取的資料表、檢視和集合使用平行載入](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md#CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.ParallelLoad) 
+ AWS DMS 不支援延遲限制條件。
+ AWS DMS 3.4.7 版支援 PostgreSQL 14.x 作為具有下列限制的來源：
  + AWS DMS 不支援兩個階段遞交的變更處理。
  + AWS DMS 不支援邏輯複寫來串流長時間進行中的交易。
+ AWS DMS 不支援 Amazon RDS Proxy for PostgreSQL 的 CDC 做為來源。
+ 使用不包含主索引鍵資料欄的[來源篩選條件](CHAP_Tasks.CustomizingTasks.Filters.md)時，將不會擷取 `DELETE` 操作。
+ 如果來源資料庫也是另一個第三方複寫系統的目標，則 DDL 變更可能不會在 CDC 期間遷移。因為這種情況可以防止 `awsdms_intercept_ddl` 事件觸發程序遭到觸發。若要解決這種情況，請依照下列方式修改來源資料庫上的觸發程序：

  ```
  alter event trigger awsdms_intercept_ddl enable always;
  ```
+ AWS DMS 不支援複寫對來源資料庫中主索引鍵定義所做的變更。如果在作用中複寫任務期間變更主索引鍵結構，則對受影響資料表的後續變更不會複寫至目標。
+ 在做為指令碼一部分的 DDL 複寫中，每個指令碼的 DDL 命令總數上限為 8192，每個指令碼的行總數上限為 8192。
+ AWS DMS 不支援具體化視觀表。
+ 對於使用僅供讀取複本做為來源的完全載入和 CDC 任務， AWS DMS 無法在僅供讀取複本上建立複寫槽。

## PostgreSQL 的來源資料類型
<a name="CHAP_Source-PostgreSQL-DataTypes"></a>

下表顯示使用 時支援的 PostgreSQL 來源資料類型， AWS DMS 以及與 AWS DMS 資料類型的預設映射。

如需如何檢視從目標映射的資料類型資訊，請參閱您要使用的目標端點一節。

如需 AWS DMS 資料類型的詳細資訊，請參閱 [AWS Database Migration Service 的資料類型](CHAP_Reference.DataTypes.md)。


|  PostgreSQL 資料類型  |  DMS 資料類型  | 
| --- | --- | 
|  INTEGER  |  INT4  | 
|  SMALLINT  |  INT2  | 
|  BIGINT  |  INT8  | 
|  NUMERIC (p,s)  |  如果精確度是從 0 到 38，則使用 NUMERIC。 如果精確度是 39 或更多，則使用 STRING。  | 
|  DECIMAL(P,S)  |  如果精確度是從 0 到 38，則使用 NUMERIC。 如果精確度是 39 或更多，則使用 STRING。  | 
|  REAL  |  REAL4  | 
|  DOUBLE  |  REAL8  | 
|  SMALLSERIAL  |  INT2  | 
|  SERIAL  |  INT4  | 
|  BIGSERIAL  |  INT8  | 
|  MONEY  |  NUMERIC(38,4) MONEY 資料類型會映射到 SQL Server 的 FLOAT。  | 
|  CHAR  |  WSTRING (1)  | 
|  CHAR(N)  |  WSTRING (n)  | 
|  VARCHAR(N)  |  WSTRING (n)  | 
|  TEXT  |  NCLOB  | 
|  CITEXT  |  NCLOB  | 
|  BYTEA  |  BLOB  | 
|  TIMESTAMP  |  DATETIME  | 
|  TIMESTAMP WITH TIME ZONE  |  DATETIME  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  TIME WITH TIME ZONE  |  TIME  | 
|  INTERVAL  |  STRING (128)：1 YEAR、2 MONTHS、3 DAYS、4 HOURS、5 MINUTES、6 SECONDS  | 
|  BOOLEAN  |  CHAR (5) false 或 true  | 
|  ENUM  |  STRING (64)  | 
|  CIDR  |  STRING (50)  | 
|  INET  |  STRING (50)  | 
|  MACADDR  |  STRING (18)  | 
|  BIT(n)  |  STRING (n)  | 
|  BIT VARYING (n)  |  STRING (n)  | 
|  UUID  |  STRING  | 
|  TSVECTOR  |  CLOB  | 
|  TSQUERY  |  CLOB  | 
|  XML  |  CLOB  | 
|  POINT  |  STRING (255) "(x,y)"  | 
|  LINE  |  STRING (255) "(x,y,z)"  | 
|  LSEG  |  STRING (255) "((x1,y1),(x2,y2))"  | 
|  BOX  |  STRING (255) "((x1,y1),(x2,y2))"  | 
|  PATH  |  CLOB "((x1,y1),(xn,yn))"  | 
|  POLYGON  |  CLOB "((x1,y1),(xn,yn))"  | 
|  CIRCLE  |  STRING (255) "(x,y),r"  | 
|  JSON  |  NCLOB  | 
|  JSONB  |  NCLOB  | 
|  ARRAY  |  NCLOB  | 
|  COMPOSITE  |  NCLOB  | 
|  HSTORE  |  NCLOB  | 
|  INT4RANGE  |  STRING (255)  | 
|  INT8RANGE  |  STRING (255)  | 
|  NUMRANGE  |  STRING (255)  | 
|  STRRANGE  |  STRING (255)  | 

### 使用適用於 PostgreSQL 的 LOB 來源資料類型
<a name="CHAP_Source-PostgreSQL-DataTypes-LOBs"></a>

PostgreSQL 欄大小會影響 PostgreSQL LOB 資料類型到 AWS DMS 資料類型的轉換。若要使用此欄，請採取以下 AWS DMS 資料類型的下列步驟：
+ BLOB：在任務建立時，將**將 LOB 大小限制為以下值**設為**最大 LOB 大小 (KB)** 值。
+ CLOB：複寫處理作為 UTF8 字元的每個字元。因此，尋找資料欄中最長字元文字的長度，此處顯示為 `max_num_chars_text`。使用此長度可指定**將 LOB 大小限制為以下值**的值。如果資料包含 4 位元組的字元，乘以 2 來指定 **Limit LOB size to (將 LOB 大小限制為)** 值 (以位元組為單位)。在此案例中，**Limit LOB size to (將 LOB 大小限制為)** 等於 `max_num_chars_text` 乘以 4。
+ NCLOB：複寫處理作為雙位元組字元的每個字元。因此，尋找資料欄 (`max_num_chars_text`) 中最長字元文字的長度，並乘以 2。您這樣做是為了指定**將 LOB 大小限制為以下值**的值。在此案例中，**Limit LOB size to (將 LOB 大小限制為)** 等於 `max_num_chars_text` 乘以 4。如果資料包含 4 位元組字元，則再次乘以 2。在此案例中，**Limit LOB size to (將 LOB 大小限制為)** 等於 `max_num_chars_text` 乘以 4。

# 使用 MySQL 相容資料庫做為 的來源 AWS DMS
<a name="CHAP_Source.MySQL"></a>

您可以使用 AWS Database Migration Service 從任何 MySQL 相容資料庫 (MySQL、MariaDB 或 Amazon Aurora MySQL) 遷移資料。

如需有關 AWS DMS 支援做為來源的 MySQL 版本的資訊，請參閱 [的來源 AWS DMS](CHAP_Introduction.Sources.md)。

您可以使用 SSL 加密您 MySQL 相容端點與複寫執行個體之間的連線。如需在與 MySQL 相容之端點使用 SSL 的詳細資訊，請參閱[搭配 使用 SSL AWS Database Migration Service](CHAP_Security.SSL.md)。

在以下各節中，「自我管理」一詞適用於安裝在內部部署或 Amazon EC2 上的任何資料庫。「AWS管理的」一詞適用於 Amazon RDS、Amazon Aurora 或 Amazon S3 上的任何資料庫。

如需使用 MySQL 相容資料庫和 的其他詳細資訊 AWS DMS，請參閱下列各節。

**Topics**
+ [使用 從 MySQL 遷移至 MySQL AWS DMS](#CHAP_Source.MySQL.Homogeneous)
+ [使用任何 MySQL 相容資料庫做為 的來源 AWS DMS](#CHAP_Source.MySQL.Prerequisites)
+ [使用自我管理的 MySQL 相容資料庫做為 的來源 AWS DMS](#CHAP_Source.MySQL.CustomerManaged)
+ [使用 AWS管理的 MySQL 相容資料庫做為 的來源 AWS DMS](#CHAP_Source.MySQL.AmazonManaged)
+ [使用 MySQL 資料庫做為 來源的限制 AWS DMS](#CHAP_Source.MySQL.Limitations)
+ [支援 XA 交易](#CHAP_Source.MySQL.XA)
+ [使用 MySQL 做為 來源時的端點設定 AWS DMS](#CHAP_Source.MySQL.ConnectionAttrib)
+ [MySQL 的來源資料類型](#CHAP_Source.MySQL.DataTypes)

**注意**  
設定 AWS Database Migration Service (AWS DMS) 映射規則時，請務必避免將萬用字元 (%) 用於資料庫或結構描述名稱。反之，您必須僅明確指定需要遷移的使用者建立資料庫。使用萬用字元包含遷移程序中的所有資料庫，包括目標執行個體上不需要的系統資料庫。由於 MySQL Amazon RDS 主要使用者缺少將資料匯入目標系統資料庫的必要許可，因此嘗試遷移這些系統資料庫會失敗。

## 使用 從 MySQL 遷移至 MySQL AWS DMS
<a name="CHAP_Source.MySQL.Homogeneous"></a>

對於異質遷移，當您從 MySQL 以外的資料庫引擎遷移到 MySQL 資料庫時， AWS DMS 幾乎總是最適合使用的遷移工具。但是對於從 MySQL 資料庫遷移至 MySQL 資料庫的同質遷移，我們建議您使用同質資料遷移專案。相較於 AWS DMS，同質資料遷移會使用原生資料庫工具，來提供更好的資料遷移效能和準確性。

## 使用任何 MySQL 相容資料庫做為 的來源 AWS DMS
<a name="CHAP_Source.MySQL.Prerequisites"></a>

開始使用 MySQL 資料庫做為來源之前 AWS DMS，請確定您有下列先決條件。這些先決條件適用於自我管理或 AWS受管來源。

您必須擁有具有複寫管理員角色 AWS DMS 的 帳戶。此角色需要以下權限：
+ **REPLICATION CLIENT**：僅 CDC 任務需要此權限。換言之，完全載入任務不需要此權限。
**注意**  
對於 MariaDB 10.5.2\$1 版，您可以使用 BINLOG MONITOR – 這是 REPLICATION CLIENT 的替代項目。
+ **REPLICATION SLAVE**：僅 CDC 任務需要此權限。換言之，完全載入任務不需要此權限。
+ **SUPER**：僅 MySQL 5.6.6 版以前的版本需要此權限。

 AWS DMS 使用者也必須具有指定用於複寫之來源資料表的 SELECT 權限。

如果您使用 MySQL 特定的預遷移評估，請授予下列權限：

```
grant select on mysql.user to <dms_user>;
grant select on mysql.db to <dms_user>;
grant select on mysql.tables_priv to <dms_user>;
grant select on mysql.role_edges to <dms_user>  #only for MySQL version 8.0.11 and higher
grant select on performance_schema.replication_connection_status to <dms_user>;  #Required for primary instance validation - MySQL version 5.7 and higher only
```

如果您使用 RDS 來源並計劃執行 MySQL 特定的預遷移評估，請新增下列許可：

```
grant select on mysql.rds_configuration to <dms_user>;  #Required for binary log retention check
```

如果參數`BatchEnable`為 `true`，則需要授予：

```
grant create temporary tables on `<schema>`.* to <dms_user>;
```

## 使用自我管理的 MySQL 相容資料庫做為 的來源 AWS DMS
<a name="CHAP_Source.MySQL.CustomerManaged"></a>

您可以使用以下自我管理 MySQL 相容資料庫做為 AWS DMS的來源：
+ MySQL Community Edition
+ MySQL Standard Edition
+ MySQL Enterprise Edition
+ MySQL Cluster Carrier Grade Edition
+ MariaDB Community Edition
+ MariaDB Enterprise Edition
+ MariaDB 資料行存放區

若要使用 CDC，請確保啟用二進位記錄。若要啟用二進位記錄，您必須在 MySQL 的 `my.ini` (Windows) 或 `my.cnf` (UNIX) 檔案中設定以下參數。


| 參數 | Value | 
| --- | --- | 
| `server_id` | 將此參數值設為 1 或更大。 | 
| `log-bin` | 將路徑設定到二進位日誌檔，例如 `log-bin=E:\MySql_Logs\BinLog`。不要包含副檔名。 | 
| `binlog_format` | 將此參數設為 `ROW`。我們建議在複寫期間進行此設定，因為在某些情況下，當將 `binlog_format` 設為 `STATEMENT` 時，可能會在將資料複寫到目標時造成不一致。將 `binlog_format` 設為 `MIXED` 時，資料庫引擎也會將類似不一致的資料寫入目標，因為資料庫引擎會自動切換到以 `STATEMENT` 為基礎的記錄，進而導致在目標資料庫上寫入不一致的資料。 | 
| `expire_logs_days` | 將此參數值設為 1 或更大。為避免過度使用磁碟空間，建議您不要使用預設值 0。 | 
| `binlog_checksum` | 針對 `NONE` DMS 3.4.7 版或更舊版本，將此參數設為 。 | 
| `binlog_row_image` | 將此參數設為 `FULL`。 | 
| `log_slave_updates` | 如果您使用 MySQL 或 MariaDB 僅供讀取複本做為來源，請將此參數設為 `TRUE`。 | 

如果您使用 MySQL 或 MariaDB 僅供讀取複本做為使用**遷移現有資料之 DMS 遷移任務的來源，並複寫持續變更**模式，則可能會遺失資料。在下列情況下，DMS 不會在完全載入或 CDC 期間寫入交易：
+ DMS 任務開始之前，交易已遞交至主要執行個體。
+ 在 DMS 任務啟動之前，交易尚未遞交至複本，因為主要執行個體與複本之間存在延遲。

主要執行個體與複本之間的延遲越長，資料遺失的可能性就越大。

如果您的來源使用 NDB (叢集化) 資料庫引擎，即必須設定以下參數，對使用該儲存引擎的資料表啟用 CDC。將這些變更新增至 MySQL 的 `my.ini` (Windows) 或 `my.cnf` (UNIX) 檔案。


| 參數 | Value | 
| --- | --- | 
| `ndb_log_bin` | 將此參數設為 `ON`。這個值可確保叢集化資料表的變更都會記錄到二進位日誌。 | 
| `ndb_log_update_as_write` | 將此參數設為 `OFF`。這個值避免在二進位日誌中將 UPDATE 陳述式編寫為 INSERT 陳述式。 | 
| `ndb_log_updated_only` | 將此參數設為 `OFF`。這個值可確保二進位日誌包含整個資料列，不僅是變更的資料行。 | 

## 使用 AWS管理的 MySQL 相容資料庫做為 的來源 AWS DMS
<a name="CHAP_Source.MySQL.AmazonManaged"></a>

您可以使用下列 AWS受管 MySQL 相容資料庫做為 的來源 AWS DMS：
+ MySQL Community Edition
+ MariaDB Community Edition
+ Amazon Aurora MySQL-Compatible Edition

使用 AWS受管 MySQL 相容資料庫做為 的來源時 AWS DMS，請確定您有下列 CDC 的先決條件：
+ 若要為適用於 MySQL 的 RDS 和適用於 MariaDB 的 RDS 啟用二進位日誌，請在執行個體層級啟用自動備份。若要為 Aurora MySQL 叢集啟用二進位日誌，請變更參數群組中的變數 `binlog_format`。

  如需設定自動備份的相關資訊，請參閱《Amazon RDS 使用者指南》**中的[使用自動備份](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithAutomatedBackups.html)。

  如需為 Amazon RDS for MySQL 資料庫設定二進位記錄功能的相關資訊，請參閱《Amazon RDS 使用者指南》**中的[設定二進位記錄格式](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.MySQL.BinaryFormat.html)。

  如需為 Aurora MySQL 叢集設定二進位記錄的相關資訊，請參閱[如何為 Amazon Aurora MySQL 叢集開啟二進位記錄功能？](https://aws.amazon.com/premiumsupport/knowledge-center/enable-binary-logging-aurora/)。
+ 如果您打算使用 CDC，請開啟二進位記錄功能。如需為 Amazon RDS for MySQL 資料庫設定二進位記錄功能的相關資訊，請參閱《Amazon RDS 使用者指南》**中的[設定二進位記錄格式](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.MySQL.BinaryFormat.html)。
+ 確保二進位日誌可供 使用 AWS DMS。由於 AWS受管 MySQL 相容資料庫會盡快清除二進位日誌，因此您應該增加日誌保持可用的時間長度。例如，執行下列命令將日誌保留期增加為 24 小時。

  ```
   call mysql.rds_set_configuration('binlog retention hours', 24);
  ```
+ 將 `binlog_format` 參數設為 `"ROW"`。
**注意**  
在 MySQL 或 MariaDB 上，`binlog_format` 是動態參數，因此您不必重新啟動，新值便會生效。不過，新值只會套用至新的工作階段。如果您為了複寫目的而將 `binlog_format` 切換到 `ROW`，如果那些工作階段在您變更值之前已開始，則資料庫仍然可以使用 `MIXED` 格式建立後續的二進位日誌。這可能會 AWS DMS 阻止 正確擷取來源資料庫上的所有變更。當您變更 MariaDB 或 MySQL 資料庫上的 `binlog_format` 設定時，請務必重新啟動資料庫以關閉所有現有的工作階段，或重新啟動任何執行 DML (資料操作語言) 操作的應用程式。將 `binlog_format` 參數變更為 後，強制資料庫重新啟動所有工作階段，`ROW`可確保資料庫使用正確的格式寫入所有後續來源資料庫變更，讓 AWS DMS 可以正確擷取這些變更。
+ 將 `binlog_row_image` 參數設為 `"Full"`。
+ 將 `"NONE"` DMS 3.4.7 版或更舊版本的 `binlog_checksum` 參數設為 。如需在 Amazon RDS MySQL 中設定參數的詳細資訊，請參閱《Amazon RDS 使用者指南》**中的[使用自動備份](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithAutomatedBackups.html)。
+ 如果您使用 Amazon RDS MySQL 或 Amazon RDS MariaDB 僅供讀取複本作為來源，則請在僅供讀取複本上啟用備份，並確保將 `log_slave_updates` 參數設為 `TRUE`。

## 使用 MySQL 資料庫做為 來源的限制 AWS DMS
<a name="CHAP_Source.MySQL.Limitations"></a>

使用 MySQL 資料庫做為來源時，請考慮下列事項：
+  不支援 Amazon RDS MySQL 5.5 版或較舊版本的變更資料擷取 (CDC)。針對 Amazon RDS MySQL，您必須使用 5.6、5.7 或 8.0 版才能啟用 CDC。若為自我管理 MySQL 5.5 來源，則可支援 CDC。
+ 對於 CDC，`CREATE TABLE`、`ADD COLUMN` 和 `DROP COLUMN` 變更資料欄資料類型，且支援 `renaming a column`。但是，不支援 `DROP TABLE`、`RENAME TABLE` 和對其他屬性 (例如資料欄預設值、資料欄可為 Null 性、字元集等) 進行的更新。
+  對於來源上的分割資料表，當您將**目標資料表準備模式**設定為在**目標上捨棄資料表**時， 會在 MySQL 目標上 AWS DMS 建立沒有任何分割區的簡單資料表。若要將分割資料表遷移到目標的分割資料表，請在目標 MySQL 資料庫上預先建立分割資料表。
+  關聯式目標不支援使用 `ALTER TABLE table_name ADD COLUMN column_name`陳述式將資料欄新增至資料表的開頭 (FIRST) 或中間 (AFTER)。資料行一律新增到資料表結尾處。當目標為 Amazon S3 或 Amazon Kinesis Data Streams 時，支援使用 FIRST 或 AFTER 新增資料欄。
+ 當資料表名稱包含大小寫字元，而來源引擎託管在檔案名稱不區分大小寫的作業系統上時，不支援 CDC。範例是使用 HFS\$1 的 Microsoft Windows 或 OS X。
+ 您可以使用 Aurora MySQL 相容版本無伺服器 v1 進行完全載入，但無法將其用於 CDC。這是因為您無法滿足 MySQL 的先決條件。如需詳細資訊，請參閱[參數群組和 Aurora Serverless 第 1 版](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless.how-it-works.html#aurora-serverless.parameter-groups)。

  Aurora MySQL 相容版本 Serverless v2 支援 CDC。
+  資料行中的 AUTO\$1INCREMENT 屬性不會遷移到目標資料庫資料行。
+  當二進位日誌不儲存在標準區塊儲存時，不支援擷取變更。例如，當二進位日誌存放在 Amazon S3 上時，CDC 無法運作。
+  AWS DMS 根據預設， 會使用 InnoDB 儲存引擎建立目標資料表。如果您需要使用 InnoDB 以外的儲存引擎，您必須手動建立資料表，並使用 [do nothing (不執行任何動做)](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.html) 模式遷移到它。
+ 除非 DMS 遷移任務模式是**遷移現有資料**， AWS DMS 否則您無法使用 Aurora MySQL 複本做為 的來源，僅限完全載入。
+  如果 MySQL 相容來源在完全載入期間停止，任務 AWS DMS 不會因錯誤而停止。任務成功結束，但目標與來源可能不同步。如果發生這種情況，請重新啟動任務或重新載入受影響的資料表。
+  不遷移建立在部分資料行值的索引。例如，目標中不會建立索引 CREATE INDEX first\$1ten\$1chars ON customer (name(10))。
+ 在某些情況下，任務設定不複寫 LOB ("SupportLobs" 在任務設定中為 false，或在任務主控台中選擇** “Don't include LOB columns” (請勿包含 LOB 資料欄)**)。在這些情況下， AWS DMS 不會將任何 MEDIUMBLOB、LONGBLOB、MEDIUMTEXT 和 LONGTEXT 資料欄遷移到目標。

  BLOB、TINYBLOB、TEXT 和 TINYTEXT 資料行不受影響，會遷移到目標。
+ MariaDB 來源和目標資料庫上不支援暫時時間資料表或系統版本控制的資料表。
+ 如果在兩個 Amazon RDS Aurora MySQL 叢集之間進行遷移，則 RDS Aurora MySQL 來源端點必須是讀取/寫入執行個體，而不是複本執行個體。
+ AWS DMS 目前不支援 MariaDB 的檢視遷移。
+ AWS DMS 不支援 MySQL 分割資料表的 DDL 變更。若要在 CDC 期間略過分割區 DDL 變更的資料表暫停，請將 `skipTableSuspensionForPartitionDdl` 設為 `true`。
+ AWS DMS 僅支援 3.5.0 版和更新版本的 XA 交易。舊版不支援 XA 交易。 AWS DMS 不支援 MariaDB 10.6 版或更新版本中的 XA 交易。如需詳細資訊，請參閱[支援 XA 交易](#CHAP_Source.MySQL.XA)以下內容。
+ AWS DMS 即使來源資料包含 GTIDs進行複寫。
+ AWS DMS 不支援 Aurora MySQL 增強型二進位日誌。
+ AWS DMS 不支援二進位日誌交易壓縮。
+ AWS DMS 不會使用 InnoDB 儲存引擎為 MySQL 資料庫傳播 ON DELETE CASCADE 和 ON UPDATE CASCADE 事件。對於這些事件，MySQL 不會產生 binlog 事件來反映子資料表上的梯級操作。因此， AWS DMS 無法將對應的變更複寫至子資料表。如需詳細資訊，請參閱[未遷移的索引、外部索引鍵或梯級更新或刪除](CHAP_Troubleshooting.md#CHAP_Troubleshooting.MySQL.FKsAndIndexes)。
+ AWS DMS 不會擷取運算 (`VIRTUAL` 和 `GENERATED ALWAYS`) 資料欄的變更。若要解決這個限制，您可以執行以下操作：
  + 在目標資料庫中預先建立目標資料表，並使用 `DO_NOTHING` 或 `TRUNCATE_BEFORE_LOAD` 完全載入任務設定建立 AWS DMS 任務。
  + 新增轉換規則，以從任務範圍移除計算資料欄。如需轉型規則的詳細資訊，請參閱[轉換規則與動作](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md)。
+ 由於內部 MySQL 限制， AWS DMS 可以處理大小不超過 4GB BINLOGs。大於 4GB BINLOGs 可能會導致 DMS 任務失敗或其他無法預測的行為。您必須減少交易的大小，以避免 BINLOGs大於 4GB。
+ AWS DMS 不支援結構描述、資料表和資料欄名稱中的反引號 (```) 或單引號 (`'`)。
+ AWS DMS 不會從來源資料庫中的隱藏資料欄遷移資料。若要將這些資料欄包含在遷移範圍中，請使用 ALTER TABLE 陳述式讓這些資料欄可見。

## 支援 XA 交易
<a name="CHAP_Source.MySQL.XA"></a>

延伸架構 (XA) 交易是這種交易，可用來將來自多個交易資源的一系列操作分組為單一、可靠的全域交易。XA 交易使用兩階段遞交通訊協定。一般而言，存在開啟 XA 交易時擷取變更可能會導致資料遺失。如果您的資料庫不使用 XA 交易，您可以使用`IgnoreOpenXaTransactionsCheck`失能值 忽略此許可和組態`TRUE`。若要從具有 XA 交易的來源開始複寫，請執行下列動作：
+ 確定 AWS DMS 端點使用者具有下列許可：

  ```
  grant XA_RECOVER_ADMIN on *.* to 'userName'@'%';
  ```
+ 將端點設定 `IgnoreOpenXaTransactionsCheck` 設為 `false`。

**注意**  
AWS DMS 不支援 MariaDB 來源資料庫 10.6 版或更新版本上的 XA 交易。

## 使用 MySQL 做為 來源時的端點設定 AWS DMS
<a name="CHAP_Source.MySQL.ConnectionAttrib"></a>

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

下列資料表顯示您可以在將 MySQL 作為來源搭配使用的端點設定。

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

## MySQL 的來源資料類型
<a name="CHAP_Source.MySQL.DataTypes"></a>

下表顯示使用 時支援的 MySQL 資料庫來源資料類型， AWS DMS 以及來自 AWS DMS 資料類型的預設映射。

如需如何檢視從目標映射的資料類型資訊，請參閱您要使用的目標端點一節。

如需 AWS DMS 資料類型的詳細資訊，請參閱 [AWS Database Migration Service 的資料類型](CHAP_Reference.DataTypes.md)。


|  MySQL 資料類型  |  AWS DMS 資料類型  | 
| --- | --- | 
|  INT  |  INT4  | 
|  BIGINT  |  INT8  | 
|  MEDIUMINT  |  INT4  | 
|  TINYINT  |  INT1  | 
|  SMALLINT  |  INT2  | 
|  UNSIGNED TINYINT  |  UINT1  | 
|  UNSIGNED SMALLINT  |  UINT2  | 
|  UNSIGNED MEDIUMINT  |  UINT4  | 
|  UNSIGNED INT  |  UINT4  | 
|  UNSIGNED BIGINT  |  UINT8  | 
|  DECIMAL(10)  |  NUMERIC (10,0)  | 
|  BINARY  |  BYTES(1)  | 
|  BIT  |  BOOLEAN  | 
|  BIT(64)  |  BYTES(8)  | 
|  BLOB  |  BYTES(65535)  | 
|  LONGBLOB  |  BLOB  | 
|  MEDIUMBLOB  |  BLOB  | 
|  TINYBLOB  |  BYTES(255)  | 
|  DATE  |  DATE  | 
|  DATETIME  |  DATETIME 複寫沒有括號值的 DATETIME (不含毫秒)。複寫具有括號值為 1 到 5 (例如 `DATETIME(5)`) 的 DATETIME (含毫秒)。 複寫 DATETIME 資料欄時，目標上的時間保持不變。其不會轉換為 UTC。  | 
|  TIME  |  STRING  | 
|  TIMESTAMP  |  DATETIME 複寫 TIMESTAMP 資料欄時，會將時間轉換為目標上的 UTC。  | 
|  YEAR  |  INT2  | 
|  DOUBLE  |  REAL8  | 
|  FLOAT  |  REAL(DOUBLE) 如果 FLOAT 值不在以下範圍內，請使用轉換將 FLOAT 對應至 STRING。如需轉型的詳細資訊，請參閱[轉換規則與動作](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md)。 支援的 FLOAT 範圍是 -1.79E\$1308 到 -2.23E-308、0，以及 2.23E-308 到 1.79E\$1308  | 
|  VARCHAR (45)  |  WSTRING (45)  | 
|  VARCHAR (2000)  |  WSTRING (2000)  | 
|  VARCHAR (4000)  |  WSTRING (4000)  | 
|  VARBINARY (4000)  |  BYTES (4000)  | 
|  VARBINARY (2000)  |  BYTES (2000)  | 
|  CHAR  |  WSTRING  | 
|  TEXT  |  WSTRING  | 
|  LONGTEXT  |  NCLOB  | 
|  MEDIUMTEXT  |  NCLOB  | 
|  TINYTEXT  |  WSTRING(255)  | 
|  GEOMETRY  |  BLOB  | 
|  POINT  |  BLOB  | 
|  LINESTRING  |  BLOB  | 
|  POLYGON  |  BLOB  | 
|  MULTIPOINT  |  BLOB  | 
|  MULTILINESTRING  |  BLOB  | 
|  MULTIPOLYGON  |  BLOB  | 
|  GEOMETRYCOLLECTION  |  BLOB  | 
|  ENUM  |  WSTRING (*長度*) 在這裡，*長度*是 ENUM 中最長值的長度。  | 
|  SET  |  WSTRING (*長度*) 在這裡，*長度*是 SET 中所有值的總長度 (包括逗號)。  | 
|  JSON  |  CLOB  | 

**注意**  
在某些情況下，您可以使用值「零」 (也就是 0000-00-00)，來指定 DATETIME 和 TIMESTAMP 資料類型。如果這樣做，請確定複寫任務中的目標資料庫支援 DATETIME 和 TIMESTAMP 資料類型的「零」值。否則，這些值在目標上會記錄為 null。

# 使用 SAP ASE 資料庫做為 的來源 AWS DMS
<a name="CHAP_Source.SAP"></a>

您可以使用 從先前稱為 Sybase 的 SAP Adaptive Server Enterprise (ASE) 資料庫遷移資料 AWS DMS。使用 SAP ASE 資料庫做為來源，您可以將資料遷移到任何其他支援 AWS DMS 的目標資料庫。

如需 AWS DMS 支援做為來源的 SAP ASE 版本資訊，請參閱 [的來源 AWS DMS](CHAP_Introduction.Sources.md)。

如需使用 SAP ASE 資料庫和 的其他詳細資訊 AWS DMS，請參閱下列各節。

**Topics**
+ [使用 SAP ASE 資料庫做為 來源的先決條件 AWS DMS](#CHAP_Source.SAP.Prerequisites)
+ [使用 SAP ASE 做為 來源的限制 AWS DMS](#CHAP_Source.SAP.Limitations)
+ [使用 SAP ASE 做為 來源所需的許可 AWS DMS](#CHAP_Source.SAP.Security)
+ [移除截斷點](#CHAP_Source.SAP.Truncation)
+ [使用 SAP ASE 做為 來源時的端點設定 AWS DMS](#CHAP_Source.SAP.ConnectionAttrib)
+ [SAP ASE 的來源資料類型](#CHAP_Source.SAP.DataTypes)

## 使用 SAP ASE 資料庫做為 來源的先決條件 AWS DMS
<a name="CHAP_Source.SAP.Prerequisites"></a>

若要讓 SAP ASE 資料庫成為 的來源 AWS DMS，請執行下列動作：
+ 使用 `sp_setreptable` 命令啟用資料表的 SAP ASE 複寫。如需詳細資訊，請參閱 [Sybase 資訊中心封存]( http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.dc32410_1501/html/refman/X37830.htm)。
+ 停用 SAP ASE 資料庫上的 `RepAgent`。如需詳細資訊，請參閱[停止和停用主要資料庫中的 RepAgent 執行緒](http://infocenter-archive.sybase.com/help/index.jsp?topic=/com.sybase.dc20096_1260/html/mra126ag/mra126ag65.htm)。
+ 若要在針對非拉丁字元 (例如中文) 設定之 Windows EC2 執行個體上，複寫到 SAP ASE 15.7 版，請在目標電腦上安裝 SAP ASE 15.7 SP121。

**注意**  
對於進行中的變更資料擷取 (CDC) 複寫，DMS 會執行 `dbcc logtransfer` 與 `dbcc log` 以從交易日誌讀取資料。

## 使用 SAP ASE 做為 來源的限制 AWS DMS
<a name="CHAP_Source.SAP.Limitations"></a>

使用 SAP ASE 資料庫做為 AWS DMS來源時，有下列限制：
+ 每個 SAP ASE 資料庫只能執行一個具有進行中複寫或 CDC AWS DMS 的任務。您可以同時執行多個僅限完全載入的任務。
+ 您無法重新命名資料表。例如，下列命令會失敗。

  ```
  sp_rename 'Sales.SalesRegion', 'SalesReg;
  ```
+ 您無法重新命名資料行。例如，下列命令會失敗。

  ```
  sp_rename 'Sales.Sales.Region', 'RegID', 'COLUMN';
  ```
+ 位在二進位資料類型字串尾端的零值，在複寫到目標資料庫會被截斷。例如，來源資料表的 `0x0000000000000000000000000100000100000000` 會成為目標資料表的 `0x00000000000000000000000001000001`。
+ 如果資料庫預設值設定為不允許 NULL 值， 會使用不允許 NULL 值的資料欄 AWS DMS 建立目標資料表。因此，如果完全載入或 CDC 複寫任務包含空值，則會 AWS DMS 擲出錯誤。您可以使用下列命令允許來源資料庫使用 NULL 值，以避免這些錯誤。

  ```
  sp_dboption database_name, 'allow nulls by default', 'true'
  go
  use database_name
  CHECKPOINT
  go
  ```
+ 不支援 `reorg rebuild` 索引命令。
+ AWS DMS 不支援叢集或使用 MSA （多站台可用性）/Warm Standby 做為來源。
+ 在對應規則中使用 `AR_H_TIMESTAMP` 轉換標頭表達式時，不會擷取新增資料欄的毫秒數。
+ 在 CDC 期間執行合併操作會導致無法復原的錯誤。若要使目標恢復同步，請執行完全載入。
+ 使用資料列鎖定配置的資料表不支援回復觸發事件。
+ AWS DMS 從來源 SAP 資料庫捨棄任務範圍內的資料表後， 無法繼續複寫任務。如果 DMS 複寫任務已停止並執行任何 DML 操作 (INSERT、UPDATE、DELETE)，則在捨棄資料表後，您必須重新開始複寫任務。

## 使用 SAP ASE 做為 來源所需的許可 AWS DMS
<a name="CHAP_Source.SAP.Security"></a>

若要使用 SAP ASE 資料庫做為 AWS DMS 任務中的來源，您需要授予許可。在 SAP ASE 資料庫中授予 AWS DMS 資料庫定義中指定的使用者帳戶下列許可：
+ sa\$1role
+ replication\$1role
+ sybase\$1ts\$1role
+ 根據預設，當您需要執行`sp_setreptable`預存程序的許可時， 會 AWS DMS 啟用 SAP ASE 複寫選項。如果您想要直接從資料庫端點而非透過 AWS DMS 本身在資料表`sp_setreptable`上執行，您可以使用`enableReplication`額外的連線屬性。如需詳細資訊，請參閱[使用 SAP ASE 做為 來源時的端點設定 AWS DMS](#CHAP_Source.SAP.ConnectionAttrib)。

## 移除截斷點
<a name="CHAP_Source.SAP.Truncation"></a>

當任務啟動時， 會在`syslogshold`系統檢視中 AWS DMS 建立`$replication_truncation_point`項目，表示複寫程序正在進行中。當 AWS DMS 正常運作時，它會根據已複製到目標的資料量，定期推進複寫截斷點。

建立`$replication_truncation_point`項目後，請讓 AWS DMS 任務持續執行，以防止資料庫日誌變得過大。如果您想要永久停止 AWS DMS 任務，請發出下列命令來移除複寫截斷點：

```
dbcc settrunc('ltm','ignore')
```

截斷點移除後，您就無法繼續 AWS DMS 任務。日誌會繼續自動截斷在檢查點 (如已設定自動截斷)。

## 使用 SAP ASE 做為 來源時的端點設定 AWS DMS
<a name="CHAP_Source.SAP.ConnectionAttrib"></a>

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

下列資料表顯示您可以在將 SAP ASE 作為來源搭配使用的端點設定。

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

## SAP ASE 的來源資料類型
<a name="CHAP_Source.SAP.DataTypes"></a>

如需使用 AWS DMS 時支援的 SAP ASE 來源資料類型清單，以及來自 AWS DMS 資料類型的預設映射，請參閱下表。 AWS DMS 不支援具有使用者定義類型 (UDT) 資料類型資料欄的 SAP ASE 來源資料表。使用此資料類型複寫的資料行會建立為 NULL。

如需如何檢視目標之映射資料類型的資訊，請參閱您目標端點的[資料遷移的目標](CHAP_Target.md)一節。

如需 AWS DMS 資料類型的詳細資訊，請參閱 [AWS Database Migration Service 的資料類型](CHAP_Reference.DataTypes.md)。


|  SAP ASE 資料類型  |  AWS DMS 資料類型  | 
| --- | --- | 
| BIGINT | INT8 | 
| UNSIGNED BIGINT | UINT8 | 
| INT | INT4 | 
| UNSIGNED INT | UINT4 | 
| SMALLINT | INT2 | 
| UNSIGNED SMALLINT | UINT2 | 
| TINYINT | UINT1 | 
| DECIMAL | NUMERIC | 
| NUMERIC | NUMERIC | 
| FLOAT | REAL8 | 
| DOUBLE | REAL8 | 
| REAL | REAL4 | 
| MONEY | NUMERIC | 
| SMALLMONEY | NUMERIC | 
| DATETIME | DATETIME | 
| BIGDATETIME | DATETIME(6) | 
| SMALLDATETIME | DATETIME | 
| DATE | DATE | 
| TIME | TIME | 
| BIGTIME | TIME | 
| CHAR | STRING | 
| UNICHAR | WSTRING | 
| NCHAR | WSTRING | 
| VARCHAR | STRING | 
| UNIVARCHAR | WSTRING | 
| NVARCHAR | WSTRING | 
| BINARY | BYTES | 
| VARBINARY | BYTES | 
| BIT | BOOLEAN | 
| TEXT | CLOB | 
| UNITEXT | NCLOB | 
| IMAGE | BLOB | 

# 使用 MongoDB 做為 的來源 AWS DMS
<a name="CHAP_Source.MongoDB"></a>

 如需 AWS DMS 支援做為來源的 MongoDB 版本資訊，請參閱 [的來源 AWS DMS](CHAP_Introduction.Sources.md)。

請注意下列與 MongoDB 版本支援有關的事項：
+  AWS DMS 3.4.5 版和更新版本支援 MongoDB 4.2 版和 4.4 版。
+  AWS DMS 3.4.5 和更新版本以及 MongoDB 4.2 和更新版本支援分散式交易。如需 MongoDB 分散式交易的詳細資訊，請參閱 [MongoDB 文件](https://www.mongodb.com/docs/)中的[交易](https://docs.mongodb.com/manual/core/transactions/)。
+  AWS DMS 3.5.0 及更新版本不支援 3.6 之前的 MongoDB 版本。
+  AWS DMS 3.5.1 版和更新版本支援 MongoDB 5.0 版。
+  AWS DMS 3.5.2 版和更新版本支援 MongoDB 6.0 版。
+  AWS DMS 3.5.4 版和更新版本支援 MongoDB 7.0 版和 8.0 版。



如果您不熟悉 MongoDB，請注意以下重要的 MongoDB 資料庫概念：
+ MongoDB 中的記錄是一份*文件*，是由欄位/值對組成的資料結構。欄位值可以包含其他文件、陣列和文件的陣列。文件約相當於關聯式資料庫資料表中的資料列。
+ MongoDB 的*集合*是一組文件，約相當於關聯式資料庫資料表。
+ MongoDB 的*資料庫*是一組集合，大致相當於關聯式資料庫中的結構描述。
+ MongoDB 文件在內部以壓縮格式儲存為二進位 JSON (BSON) 檔案，此格式包含文件中每個欄位的類型。每份文件都有唯一的 ID。

AWS DMS 使用 MongoDB 做為來源、*文件模式*或*資料表模式時， 支援兩種遷移模式*。您可以指定建立 MongoDB 端點時要使用的遷移模式，或從 AWS DMS 主控台設定**中繼資料模式**參數。或者，您可以在端點組態面板中選取 **\$1id as a separate column** 核取記號按鈕，以建立第二個名為 `_id` 的資料欄，作為主索引鍵。

遷移模式的選擇會影響目標資料的結果格式，請見下文說明。

**文件模型**  
在文件模式中，MongoDB 文件是依原狀遷移，這表示文件資料合併成目標資料表中的單一資料行，名為 `_doc`。當您使用 MongoDB 做為來源端點時，文件模式是預設設定。  
例如，請考慮 MongoDB 集合中稱為 myCollection 的下列文件。  

```
 db.myCollection.find()
{ "_id" : ObjectId("5a94815f40bd44d1b02bdfe0"), "a" : 1, "b" : 2, "c" : 3 }
{ "_id" : ObjectId("5a94815f40bd44d1b02bdfe1"), "a" : 4, "b" : 5, "c" : 6 }
```
使用文件模式將資料遷移到關聯式資料庫資料表之後，資料結構如下所示。MongoDB 文件中的資料欄位會合併到` _doc` 資料行。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/dms/latest/userguide/CHAP_Source.MongoDB.html)
您可以選擇性地將額外連線屬性 `extractDocID` 設為 *true*，建立第二個資料行，命名為 `"_id"`，作用如同主索引鍵。如果您要使用 CDC，請將此參數設為 *true*。  
搭配產生[多文件交易](https://www.mongodb.com/docs/manual/reference/method/Session.startTransaction/#mongodb-method-Session.startTransaction)的來源使用 CDC 時， `ExtractDocId` 參數**必須**設定為 *true*。如果未啟用此參數， AWS DMS 任務會在遇到多文件交易時失敗。  
在文件模式中， AWS DMS 會管理集合的建立和重新命名，如下所示：  
+ 如果您將新的集合新增至來源資料庫， AWS DMS 會為集合建立新的目標資料表，並複寫任何文件。
+ 如果您重新命名來源資料庫的現有集合， AWS DMS 不會重新命名目標資料表。
如果目標端點是 Amazon DocumentDB，請以**文件模式**執行遷移。

**資料表模式**  
在資料表模式中， 會將 MongoDB 文件中的每個最上層欄位 AWS DMS 轉換為目標資料表中的資料欄。如果欄位為巢狀，請將巢狀值 AWS DMS 扁平化為單一資料欄。 AWS DMS 然後將索引鍵欄位和資料類型新增至目標資料表的資料欄集。  
對於每個 MongoDB 文件， 會將每個索引鍵和類型 AWS DMS 新增至目標資料表的資料欄集。例如，使用資料表模式， 會將先前的範例 AWS DMS 遷移至下表。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/dms/latest/userguide/CHAP_Source.MongoDB.html)
巢狀值會扁平化到包含以點分隔之索引鍵名稱的資料行。資料行名為以句號分隔的扁平化欄位名稱串連。例如，將具有巢狀值 等欄位的 JSON 文件 AWS DMS 遷移`{"a" : {"b" : {"c": 1}}}`至名為 `a.b.c.`  
若要建立目標資料欄， AWS DMS 會掃描指定數量的 MongoDB 文件，並建立一組所有欄位及其類型。 AWS DMS 然後使用此集來建立目標資料表的資料欄。如果您使用主控台建立或修改 MongoDB 來源端點，您可以指定要掃描的文件數量。預設值為 1000 份文件。如果您使用 AWS CLI，則可以使用額外的連線屬性 `docsToInvestigate`。  
在資料表模式中， 會像這樣 AWS DMS 管理文件和集合：  
+ 當您將文件新增至現有的集合時，會複寫文件。如果欄位不存在於目標中，則不複寫這些欄位。
+ 當您更新文件時，會複寫更新的文件。如果欄位不存在於目標中，則不複寫這些欄位。
+ 完全支援刪除文件。
+ CDC 任務完成時，新增新的集合不會在目標上產生新的資料表。
+ 在變更資料擷取 (CDC) 階段中， AWS DMS 不支援重新命名集合。

**Topics**
+ [使用 MongoDB 做為 來源時所需的許可 AWS DMS](#CHAP_Source.MongoDB.PrerequisitesCDC)
+ [為 CDC 設定 MongoDB 複本集](#CHAP_Source.MongoDB.PrerequisitesCDC.ReplicaSet)
+ [使用 MongoDB 做為 來源時的安全需求 AWS DMS](#CHAP_Source.MongoDB.Security)
+ [將 MongoDB 集合分段並平行遷移](#CHAP_Source.MongoDB.ParallelLoad)
+ [使用 MongoDB 做為 來源時遷移多個資料庫 AWS DMS](#CHAP_Source.MongoDB.Multidatabase)
+ [使用 MongoDB 做為 來源的限制 AWS DMS](#CHAP_Source.MongoDB.Limitations)
+ [使用 MongoDB 做為 來源時的端點組態設定 AWS DMS](#CHAP_Source.MongoDB.Configuration)
+ [MongoDB 的來源資料類型](#CHAP_Source.MongoDB.DataTypes)

## 使用 MongoDB 做為 來源時所需的許可 AWS DMS
<a name="CHAP_Source.MongoDB.PrerequisitesCDC"></a>

對於使用 MongoDB 來源的 AWS DMS 遷移，您可以建立具有根權限的使用者帳戶，或僅在資料庫上具有遷移許可的 使用者。

以下程式碼建立的使用者會成為根帳戶。

```
use admin
db.createUser(
  {
    user: "root",
    pwd: "password",
    roles: [ { role: "root", db: "admin" } ]
  }
)
```

對於 MongoDB 3.x 來源，以下程式碼會在要遷移的資料庫上建立具有最基本權限的使用者。

```
use database_to_migrate
db.createUser( 
{ 
    user: "dms-user",
    pwd: "password",
    roles: [ { role: "read", db: "local" }, "read"] 
})
```

對於 MongoDB 4.x 來源，下面的程式碼會建立具有最基本權限的使用者。

```
{ resource: { db: "", collection: "" }, actions: [ "find", "changeStream" ] }
```

例如，在「admin」資料庫中建立下列角色。

```
use admin
db.createRole(
{
role: "changestreamrole",
privileges: [
{ resource: { db: "", collection: "" }, actions: [ "find","changeStream" ] }
],
roles: []
}
)
```

建立角色後，在要遷移的資料庫中建立使用者。

```
 use test
> db.createUser( 
{ 
user: "dms-user12345",
pwd: "password",
roles: [ { role: "changestreamrole", db: "admin" }, "read"] 
})
```

## 為 CDC 設定 MongoDB 複本集
<a name="CHAP_Source.MongoDB.PrerequisitesCDC.ReplicaSet"></a>

若要搭配 MongoDB 使用持續複寫或 CDC， AWS DMS 需要存取 MongoDB 操作日誌 (oplog)。若要建立 oplog，您需要部署複本集 (若無)。如需詳細資訊，請參閱 [MongoDB 文件](https://docs.mongodb.com/manual/tutorial/deploy-replica-set/)。

您可以使用 CDC 且以 MongoDB 複本集的主要或次要節點做為來源端點。

**將獨立的執行個體轉換成複本集**

1. 使用命令列，連線到 `mongo`。

   ```
   mongo localhost
   ```

1. 停止 `mongod` 服務。

   ```
   service mongod stop
   ```

1. 使用以下命令重新啟動 `mongod`：

   ```
   mongod --replSet "rs0" --auth -port port_number
   ```

1. 使用下列命令測試複本集連線：

   ```
   mongo -u root -p password --host rs0/localhost:port_number 
     --authenticationDatabase "admin"
   ```

如果計劃執行文件模式遷移，請在建立 MongoDB 端點時選取選項 `_id as a separate column`。選取此選項會建立第二個資料行，名為 `_id`，做為主索引鍵。需要此第二欄 AWS DMS ，以支援資料處理語言 (DML) 操作。

**注意**  
AWS DMS 使用 操作日誌 (oplog) 來擷取進行中複寫期間的變更。如果 MongoDB 在 AWS DMS 讀取記錄之前從 oplog 中清除記錄，則任務會失敗。我們建議調整 oplog 的大小，以將變更保留至少 24 小時。

## 使用 MongoDB 做為 來源時的安全需求 AWS DMS
<a name="CHAP_Source.MongoDB.Security"></a>

AWS DMS 支援 MongoDB 的兩種身分驗證方法。這兩種身分驗證方法用於加密密碼，所以它們只能在 `authType` 參數設為 *PASSWORD* 時使用。

MongoDB 身分驗證方法如下所示：
+ **MONGODB-CR** – 適用於往前相容性
+ **SCRAM-SHA-1** – 使用 MongoDB 3.x 和 4.0 版時的預設值

如果未指定身分驗證方法， AWS DMS 會使用 MongoDB 來源版本的預設方法。

## 將 MongoDB 集合分段並平行遷移
<a name="CHAP_Source.MongoDB.ParallelLoad"></a>

為了改善遷移任務的效能，MongoDB 來源端點在資料表對應中支援兩個平行完全載入選項。

換句話說，您可以在 JSON 設定中為平行完全載入，使用自動分段或包含資料表對應的範圍分割，以平行遷移集合。使用自動分割，您可以指定 的條件 AWS DMS ，以自動分割來源以進行每個執行緒中的遷移。透過範圍分割，您可以告知 DMS AWS DMS 在每個執行緒中遷移的每個區段的特定範圍。如需這些設定的詳細資訊，請參閱[資料表和集合設定規則與操作](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md)。

### 使用自動分段範圍平行遷移 MongoDB 資料庫
<a name="CHAP_Source.MongoDB.ParallelLoad.AutoPartitioned"></a>

您可以指定為 AWS DMS 每個執行緒自動分割 (區段) 資料的條件，以平行方式遷移文件。特別是，您可以指定每個執行緒要遷移的文件數目。使用此方法， 會 AWS DMS 嘗試最佳化區段邊界，以取得每個執行緒的最大效能。

您可以使用下列資料表對應中的資料表設定選項來指定分段條件。


|  資料表設定選項  |  Description  | 
| --- | --- | 
|  `"type"`  |  (必要) 設定 `"partitions-auto"` 以將 MongoDB 作為來源。  | 
|  `"number-of-partitions"`  |  (選用) 用於遷移的分割 (區段) 總數。預設為 16。  | 
|  `"collection-count-from-metadata"`  |  (選用) 如果此選項設為 `true`，則 AWS DMS 會使用估計的收集計數來決定分割的數目。如果此選項設定為 `false`， AWS DMS 會使用實際的收集計數。預設值為 `true`。  | 
|  `"max-records-skip-per-page"`  |  （選用） 決定每個分割區的邊界時要一次略過的記錄數目。 AWS DMS 會使用分頁略過方法來決定分割區的最小邊界。預設值為 10,000。 設定相對較大的值可能會導致游標逾時和任務失敗。設定相對較低的值會導致每頁操作數增加，而且完全載入速度較慢。  | 
|  `"batch-size"`  |  (選用) 限制在單一批次中傳回的文件數。每個批次都需要往返伺服器。如果批次大小為零 (0)，游標會使用伺服器定義的批次大小上限。預設值為 0。  | 

下列範例顯示自動分段的資料表對應。

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "admin",
                "table-name": "departments"
            },
            "rule-action": "include",
            "filters": []
        },
        {
            "rule-type": "table-settings",
            "rule-id": "2",
            "rule-name": "2",
            "object-locator": {
                "schema-name": "admin",
                "table-name": "departments"
            },
            "parallel-load": {
                "type": "partitions-auto",
                "number-of-partitions": 5,
                "collection-count-from-metadata": "true",
                "max-records-skip-per-page": 1000000,
                "batch-size": 50000
            }
        }
    ]
}
```

自動分段具有以下限制。每個區段的遷移會分別擷取集合計數和收集下限 `_id`。然後，其會使用分頁略過來計算該區段的最小邊界。

因此，請確保每個集合的最小 `_id` 值保持不變，直到集合中的所有區段邊界都經過計算為止。如果您在區段邊界計算期間變更集合的最小 `_id` 值，這可能會導致資料遺失或資料列重複錯誤。

### 使用範圍分段平行遷移 MongoDB 資料庫
<a name="CHAP_Source.MongoDB.ParallelLoad.Ranges"></a>

您可以透過為執行緒中的每個區段指定範圍，以平行遷移文件。使用此方法，您可以根據您選擇的每個執行緒文件範圍 AWS DMS ，指示特定文件在每個執行緒中遷移。

下圖顯示了具有七個項目的 MongoDB 集合，並將 `_id` 作為主索引鍵。

![\[包含七個項目的 MongoDB 集合。\]](http://docs.aws.amazon.com/zh_tw/dms/latest/userguide/images/datarep-docdb-collection.png)


若要將集合分割為三個特定區段 AWS DMS ，讓 平行遷移，您可以將資料表映射規則新增至遷移任務。在以下 JSON 範例中會顯示此方法。

```
{ // Task table mappings:
  "rules": [
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "1",
      "object-locator": {
        "schema-name": "testdatabase",
        "table-name": "testtable"
      },
      "rule-action": "include"
    }, // "selection" :"rule-type"
    {
      "rule-type": "table-settings",
      "rule-id": "2",
      "rule-name": "2",
      "object-locator": {
        "schema-name": "testdatabase",
        "table-name": "testtable"
      },
      "parallel-load": {
        "type": "ranges",
        "columns": [
           "_id",
           "num"
        ],
        "boundaries": [
          // First segment selects documents with _id less-than-or-equal-to 5f805c97873173399a278d79
          // and num less-than-or-equal-to 2.
          [
             "5f805c97873173399a278d79",
             "2"
          ],
          // Second segment selects documents with _id > 5f805c97873173399a278d79 and
          // _id less-than-or-equal-to 5f805cc5873173399a278d7c and
          // num > 2 and num less-than-or-equal-to 5.
          [
             "5f805cc5873173399a278d7c",
             "5"
          ]                                   
          // Third segment is implied and selects documents with _id > 5f805cc5873173399a278d7c.
        ] // :"boundaries"
      } // :"parallel-load"
    } // "table-settings" :"rule-type"
  ] // :"rules"
} // :Task table mappings
```

該資料表對應定義會將來源集合分割為三個區段，並平行遷移。以下是分段邊界。

```
Data with _id less-than-or-equal-to "5f805c97873173399a278d79" and num less-than-or-equal-to 2 (2 records)
Data with _id > "5f805c97873173399a278d79" and num > 2 and _id  less-than-or-equal-to "5f805cc5873173399a278d7c" and num less-than-or-equal-to 5 (3 records)
Data with _id > "5f805cc5873173399a278d7c" and num > 5 (2 records)
```

遷移任務完成後，您可以如下列範例所示，從任務日誌中確認資料表是否是平行載入。您也可以確認用來從來源資料表卸載每個區段的 MongoDB `find` 子句。

```
[TASK_MANAGER    ] I:  Start loading segment #1 of 3 of table 'testdatabase'.'testtable' (Id = 1) by subtask 1. Start load timestamp 0005B191D638FE86  (replicationtask_util.c:752)

[SOURCE_UNLOAD   ] I:  Range Segmentation filter for Segment #0 is initialized.   (mongodb_unload.c:157)

[SOURCE_UNLOAD   ] I:  Range Segmentation filter for Segment #0 is: { "_id" : { "$lte" : { "$oid" : "5f805c97873173399a278d79" } }, "num" : { "$lte" : { "$numberInt" : "2" } } }  (mongodb_unload.c:328)

[SOURCE_UNLOAD   ] I: Unload finished for segment #1 of segmented table 'testdatabase'.'testtable' (Id = 1). 2 rows sent.

[TASK_MANAGER    ] I: Start loading segment #1 of 3 of table 'testdatabase'.'testtable' (Id = 1) by subtask 1. Start load timestamp 0005B191D638FE86 (replicationtask_util.c:752)
 
[SOURCE_UNLOAD   ] I: Range Segmentation filter for Segment #0 is initialized. (mongodb_unload.c:157) 

[SOURCE_UNLOAD   ] I: Range Segmentation filter for Segment #0 is: { "_id" : { "$lte" : { "$oid" : "5f805c97873173399a278d79" } }, "num" : { "$lte" : { "$numberInt" : "2" } } } (mongodb_unload.c:328)
 
[SOURCE_UNLOAD   ] I: Unload finished for segment #1 of segmented table 'testdatabase'.'testtable' (Id = 1). 2 rows sent.

[TARGET_LOAD     ] I: Load finished for segment #1 of segmented table 'testdatabase'.'testtable' (Id = 1). 1 rows received. 0 rows skipped. Volume transfered 480.

[TASK_MANAGER    ] I: Load finished for segment #1 of table 'testdatabase'.'testtable' (Id = 1) by subtask 1. 2 records transferred.
```

目前， AWS DMS 支援下列 MongoDB 資料類型做為區段索引鍵資料欄：
+ Double
+ String
+ ObjectId
+ 32 位元整數
+ 64 位元整數

## 使用 MongoDB 做為 來源時遷移多個資料庫 AWS DMS
<a name="CHAP_Source.MongoDB.Multidatabase"></a>

AWS DMS 3.4.5 版和更新版本支援在所有支援的 MongoDB 版本中，在單一任務中遷移多個資料庫。如果您要遷移多個資料庫，請採取這些步驟：

1. 當您建立 MongoDB 來源端點時，請執行以下其中一項：
   + 在 DMS 主控台的**建立端點**頁面上，確定**端點組態**下的**資料庫名稱**是空白的。
   + 使用 AWS CLI `CreateEndpoint`命令，將空字串值指派給 中的 `DatabaseName` 參數`MongoDBSettings`。

1. 對於要從 MongoDB 來源遷移的每個資料庫，請在任務的資料表對應中指定資料庫名稱作為結構描述名稱。您可以使用主控台中的引導式輸入或直接在 JSON 中執行此操作。如需引導式輸入的詳細資訊，請參閱[從主控台指定資料表選取及轉換](CHAP_Tasks.CustomizingTasks.TableMapping.Console.md)。如需 JSON 的相關資訊，請參閱[選取規則與動作](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Selections.md)。

例如，您可以在下列指定 JSON 以遷移三個 MongoDB 資料庫。

**Example 遷移結構描述中的所有資料表**  
下列 JSON 會將來源端點中 `Customers`、`Orders` 和 `Suppliers` 資料庫中的所有資料表遷移至目標端點。  

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "Customers",
                "table-name": "%"
            },
            "rule-action": "include",
            "filters": []
        },
        {
            "rule-type": "selection",
            "rule-id": "2",
            "rule-name": "2",
            "object-locator": {
                "schema-name": "Orders",
                "table-name": "%"
            },
            "rule-action": "include",
            "filters": []
        },
        {
            "rule-type": "selection",
            "rule-id": "3",
            "rule-name": "3",
            "object-locator": {
                "schema-name": "Inventory",
                "table-name": "%"
            },
            "rule-action": "include",
            "filters": []
        }
    ]
}
```

## 使用 MongoDB 做為 來源的限制 AWS DMS
<a name="CHAP_Source.MongoDB.Limitations"></a>

以下是使用 MongoDB 做為 來源時的限制 AWS DMS：
+ 在資料表模式中，集合中的文件必須在相同欄位中用於值的資料類型中保持一致。例如，如果集合中的文件包含 `'{ a:{ b:value ... }'`，則集合中參考該 `a.b` 欄位 `value` 的所有文件都必須在 `value` 使用相同的資料類型，無論其出現在集合中何位置為何。
+ 當 `_id` 選項設為單獨的資料行，ID 字串不能超過 200 個字元。
+ 在資料表模式中，物件 ID 和陣列類型索引鍵都會轉換成以 `oid` 和 `array` 為前綴的資料行。

  這些資料行在內部使用加上前綴的名稱參考。如果您在 中使用參考這些欄 AWS DMS 的轉換規則，請務必指定字首欄。例如，您指定 `${oid__id}` 而不是 `${_id}`，或者 `${array__addresses}` 而不是 `${_addresses}`。
+  集合名稱和索引鍵名稱不能包含金錢符號 (\$1)。
+ AWS DMS 在具有 RDBMS 目標的資料表模式中， 不支援包含具有不同大小寫 （上、下） 之相同欄位的集合。例如， AWS DMS 不支援具有兩個名為 `Field1`和 的集合`field1`。
+ 資料表模式和文件模式都有前文討論的限制。
+ 使用自動分段進行平行遷移時具有前述限制。
+ MongoDB 不支援來源篩選條件。
+ AWS DMS 不支援巢狀層級大於 97 的文件。
+ AWS DMS 遷移至非 DocumentDB目標時， 需要 UTF-8 編碼的來源資料。對於具有non-UTF-8 字元的來源，請在遷移或遷移至 Amazon DocumentDB 之前將其轉換為 UTF-8。
+ AWS DMS 不支援 MongoDB 5.0 版的下列功能：
  + 即時重新分片
  + 用戶端欄位層級加密 (CSFLE)
  + 時間序列集合遷移
**注意**  
在完全載入階段遷移的時間序列集合會轉換為 Amazon DocumentDB 中的一般集合，因為 DocumentDB 不支援時間序列集合。

## 使用 MongoDB 做為 來源時的端點組態設定 AWS DMS
<a name="CHAP_Source.MongoDB.Configuration"></a>

當您設定 MongoDB 來源端點時，您可以使用 AWS DMS 主控台指定多個端點組態設定。

下表說明使用 MongoDB 資料庫做為 AWS DMS 來源時可用的組態設定。


| 設定 (屬性) | 有效值 | 預設值和描述 | 
| --- | --- | --- | 
|  **身分驗證模式**  |  `"none"` `"password"`  |  值 `"password"` 會提示輸入使用者名稱和密碼。指定 `"none"` 時，不會使用使用者名稱和密碼參數。  | 
|  **驗證來源**  |  有效的 MongoDB 資料庫名稱。  |  您要用來驗證憑證以進行驗證的 MongoDB 資料庫名稱。預設值為 `"admin"`。  | 
|  **身分驗證機制**  |  `"default"` `"mongodb_cr"` `"scram_sha_1"`  |  身分驗證機制。` "default"` 值是 `"scram_sha_1"`。設定 `authType` 為 `"no"` 時，不會使用此設定。  | 
|  **中繼資料模式**  |  文件與資料表  |  選擇文件模式或資料表模式。  | 
|  **待掃描的文件數** (`docsToInvestigate`)  |  正整數會大於 `0`。  |  僅在資料表模式中使用此選項來定義目標資料表定義。  | 
|  **\$1id as a separate column**  |  方塊中的核取記號  |  選用的核取記號方塊，其會建立名為 `_id` 的第二個資料欄，作為主索引鍵。  | 
|   `ExtractDocID`   |  `true` `false`  |  `false`：將 `NestingLevel` 設為 `"none"` 時，請使用此屬性。 搭配產生[多文件交易](https://www.mongodb.com/docs/manual/reference/method/Session.startTransaction/#mongodb-method-Session.startTransaction)的來源使用 CDC 時， `ExtractDocId` 參數**必須**設定為 `true`。如果未啟用此參數， AWS DMS 任務會在遇到多文件交易時失敗。  | 
|  `socketTimeoutMS`  |  大於或等於 0 的整數。 僅限額外連線屬性 (ECA)。  |  此設定以毫秒為單位，並為 MongoDB 用戶端設定連線逾時。如果該值小於或等於零，則使用 MongoDB 用戶端預設值。  | 
|   `UseUpdateLookUp`   |  `true` `false`  |  若為 true，在 CDC 更新事件期間， 會將整個更新文件 AWS DMS 複製到目標。設定為 false 時， AWS DMS 會使用 MongoDB 更新命令，僅更新目標上文件中修改的欄位。  | 
|   `ReplicateShardCollections`   |  `true` `false`  |  當為 true 時， 會將資料 AWS DMS 複寫至碎片集合。只有在目標端點是 DocumentDB 彈性叢集時， AWS DMS 才會使用此設定。 當此設定為 true 時，請注意以下事項： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/dms/latest/userguide/CHAP_Source.MongoDB.html)  | 
|  `useTransactionVerification`  |  `true` `false`  |  當 時`false`， 會停用變更串流與 oplog 之間的驗證。  如果變更串流和 oplog 項目之間發生差異，您可能會錯過操作，因為預設的 DMS 行為是在這種情況下使任務失敗。預設：`true`。   | 
|  `useOplog`  |  `true` `false`  |  當 時`true`， 可讓 DMS 任務直接從 'oplog' 讀取，而不是使用變更串流。預設：`false`。  | 

如果您選擇將**文件**作為**中繼資料模式**，則可使用不同的選項。

如果目標端點是 DocumentDB，請確保在**文件模式**中執行遷移。此外，修改來源端點並選取選項 **\$1id as separate column**。如果來源 MongoDB 工作負載涉及交易，這是必要的先決條件。

## MongoDB 的來源資料類型
<a name="CHAP_Source.MongoDB.DataTypes"></a>

使用 MongoDB 做為 來源的資料遷移 AWS DMS 支援大多數 MongoDB 資料類型。在下表中，您可以找到使用 時支援的 MongoDB 來源資料類型， AWS DMS 以及來自 AWS DMS 資料類型的預設映射。如需 MongoDB 資料類型的詳細資訊，請參閱 MongoDB 文件中的 [BSON 類型](https://docs.mongodb.com/manual/reference/bson-types)。

如需如何檢視從目標映射的資料類型資訊，請參閱您要使用的目標端點一節。

如需 AWS DMS 資料類型的詳細資訊，請參閱 [AWS Database Migration Service 的資料類型](CHAP_Reference.DataTypes.md)。


|  MongoDB 資料類型  |  AWS DMS 資料類型  | 
| --- | --- | 
| Boolean | Bool | 
| 二進位 | BLOB | 
| Date | Date | 
| 時間戳記 | Date | 
| Int | INT4 | 
| Long | INT8 | 
| Double | REAL8 | 
| 字串 (UTF-8) | CLOB | 
| 陣列 | CLOB | 
| OID | String | 
| REGEX | CLOB | 
| CODE | CLOB | 

# 使用 Amazon DocumentDB （與 MongoDB 相容） 做為 的來源 AWS DMS
<a name="CHAP_Source.DocumentDB"></a>

如需 AWS DMS 支援作為來源之 Amazon DocumentDB (with MongoDB compatibility) 版本的相關資訊，請參閱 [的來源 AWS DMS](CHAP_Introduction.Sources.md)。

 使用 Amazon DocumentDB 作為來源，您可以將資料從 Amazon DocumentDB 叢集遷移到另一個 Amazon DocumentDB 叢集。您也可以將資料從 Amazon DocumentDB 叢集遷移到 支援的其他目標端點之一 AWS DMS。

如果您剛開始使用 Amazon DocumentDB，請注意以下 Amazon DocumentDB 資料庫的重要概念：
+ Amazon DocumentDB 中的記錄是*文件*，是由欄位/值對組成的資料結構。欄位值可以包含其他文件、陣列和文件的陣列。文件約相當於關聯式資料庫資料表中的資料列。
+ Amazon DocumentDB 的*集合*是一組文件，約相當於關聯式資料庫資料表。
+ Amazon DocumentDB 中的*資料庫*是一組集合，大致相當於關聯式資料庫中的結構描述。

AWS DMS 使用 Amazon DocumentDB 做為來源、文件模式和資料表模式時， 支援兩種遷移模式。您可以在 AWS DMS 主控台中建立 Amazon DocumentDB 來源端點時，使用**中繼資料模式選項或額外連線屬性 來指定遷移模式**`nestingLevel`。您可以在以下找到說明，了解遷移模式的選擇會如何影響目標資料的結果格式。

**文件模型**  
在*文件模式*中，JSON 文件會依原狀遷移。這意味著文件資料會合併為兩個項目之一。當您使用關聯式資料庫作為目標時，資料是在目標資料表中名為 `_doc` 的單一資料欄。當您使用非關聯式資料庫作為目標時，資料是單一 JSON 文件。文件模式是預設模式，我們建議您在遷移至 Amazon DocumentDB 目標時使用此模式。  
例如，請考慮 Amazon DocumentDB 集合中名為 `myCollection` 的下列文件。  

```
 db.myCollection.find()
{ "_id" : ObjectId("5a94815f40bd44d1b02bdfe0"), "a" : 1, "b" : 2, "c" : 3 }
{ "_id" : ObjectId("5a94815f40bd44d1b02bdfe1"), "a" : 4, "b" : 5, "c" : 6 }
```
使用文件模式將資料遷移到關聯式資料庫資料表之後，資料結構如下所示。文件中的資料欄位會合併到 ` _doc` 資料欄。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/dms/latest/userguide/CHAP_Source.DocumentDB.html)
您可以選擇性地將額外連線屬性 `extractDocID` 設為 `true`，以建立第二個名為 `"_id"` 的資料欄，其作用如同主索引鍵。除非您使用 Amazon DocumentDB 作為目標，否則如果您要使用變更資料擷取 (CDC)，請將此參數設定為 `true`。  
搭配產生[多文件交易](https://www.mongodb.com/docs/manual/reference/method/Session.startTransaction/#mongodb-method-Session.startTransaction)的來源使用 CDC 時， `ExtractDocId` 參數**必須**設定為 `true`。如果未啟用此參數， AWS DMS 任務會在遇到多文件交易時失敗。  
如果您將新的集合新增至來源資料庫， AWS DMS 會為集合建立新的目標資料表，並複寫任何文件。

**資料表模式**  
在*資料表模式*下，AWS DMS 會將 Amazon DocumentDB 文件中每個最上層的欄位轉換成目標資料表的資料欄。如果欄位為巢狀，請將巢狀值 AWS DMS 扁平化為單一資料欄。 AWS DMS 然後將索引鍵欄位和資料類型新增至目標資料表的資料欄集。  
對於每個 Amazon DocumentDB 文件， 會將每個索引鍵和類型 AWS DMS 新增至目標資料表的資料欄集。例如，使用資料表模式， 會將先前的範例 AWS DMS 遷移至下表。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/dms/latest/userguide/CHAP_Source.DocumentDB.html)
巢狀值會扁平化到包含以點分隔之索引鍵名稱的資料行。資料欄命名是使用以句號分隔的扁平化欄位名稱串連。例如，將具有巢狀值 等欄位的 JSON 文件 AWS DMS 遷移`{"a" : {"b" : {"c": 1}}}`至名為 `a.b.c.`  
若要建立目標資料欄， AWS DMS 會掃描指定數量的 Amazon DocumentDB 文件，並建立一組所有欄位及其類型。 AWS DMS 然後使用此集合來建立目標資料表的資料欄。如果使用主控台建立或修改 Amazon DocumentDB 來源端點，您可以指定待掃描的文件數。預設值為 1,000 份文件。如果您使用 AWS CLI，則可以使用額外的連線屬性 `docsToInvestigate`。  
在資料表模式中， 會像這樣 AWS DMS 管理文件和集合：  
+ 當您將文件新增至現有的集合時，會複寫文件。如果欄位不存在於目標中，則不複寫這些欄位。
+ 當您更新文件時，會複寫更新的文件。如果欄位不存在於目標中，則不複寫這些欄位。
+ 完全支援刪除文件。
+ CDC 任務完成時，新增新的集合不會在目標上產生新的資料表。
+ 在變更資料擷取 (CDC) 階段中， AWS DMS 不支援重新命名集合。

**Topics**
+ [設定許可以使用 Amazon DocumentDB 作為來源](#CHAP_Source.DocumentDB.Permissions)
+ [設定 Amazon DocumentDB 叢集的 CDC](#CHAP_Source.DocumentDB.ConfigureCDC)
+ [使用 TLS 連接到 Amazon DocumentDB](#CHAP_Source.DocumentDB.TLS)
+ [建立 Amazon DocumentDB 來源端點](#CHAP_Source.DocumentDB.ConfigureEndpoint)
+ [將 Amazon DocumentDB 集合分段並平行遷移](#CHAP_Source.DocumentDB.ParallelLoad)
+ [使用 Amazon DocumentDB 做為 來源時遷移多個資料庫 AWS DMS](#CHAP_Source.DocumentDB.Multidatabase)
+ [使用 Amazon DocumentDB 做為 來源的限制 AWS DMS](#CHAP_Source.DocumentDB.Limitations)
+ [在將 Amazon DocumentDB 作為來源的情況下使用端點設定](#CHAP_Source.DocumentDB.ECAs)
+ [Amazon DocumentDB 的來源資料類型](#CHAP_Source.DocumentDB.DataTypes)

## 設定許可以使用 Amazon DocumentDB 作為來源
<a name="CHAP_Source.DocumentDB.Permissions"></a>

使用 Amazon DocumentDB 來源進行 AWS DMS 遷移時，您可以建立具有根權限的使用者帳戶。或者，您可以建立使用者，所含許可僅限於要遷移的資料庫。

以下程式碼會建立使用者作為根帳戶。

```
use admin
db.createUser(
  {
    user: "root",
    pwd: "password",
    roles: [ { role: "root", db: "admin" } ]
  })
```

若是 Amazon DocumentDB 3.6，以下程式碼會在要遷移的資料庫建立擁有最基本權限的使用者。

```
use db_name
db.createUser( 
    {
        user: "dms-user",
        pwd: "password",
        roles: [{ role: "read", db: "db_name" }]
    }
)
```

對於 Amazon DocumentDB 4.0 及更高版本， AWS DMS 會使用全部署的變更串流。在這裡，下面的程式碼會建立具有最基本權限的使用者。

```
db.createUser( 
{ 
    user: "dms-user",
    pwd: "password",
    roles: [ { role: "readAnyDatabase", db: "admin" }] 
})
```

## 設定 Amazon DocumentDB 叢集的 CDC
<a name="CHAP_Source.DocumentDB.ConfigureCDC"></a>

若要搭配 Amazon DocumentDB 使用持續複寫或 CDC， AWS DMS 需要存取 Amazon DocumentDB 叢集的變更串流。如需說明，了解叢集集合和資料庫中按時間順序排序的更新事件，請參閱《Amazon DocumentDB 開發人員指南》**中的[使用變更串流](https://docs.aws.amazon.com/documentdb/latest/developerguide/change_streams.html)。

使用 MongoDB Shell 向 Amazon DocumentDB 叢集進行驗證。然後執行下列命令以啟用變更串流。

```
db.adminCommand({modifyChangeStreams: 1,
    database: "DB_NAME",
    collection: "", 
    enable: true});
```

此方法可為資料庫中的所有集合啟用變更串流。啟用變更串流後，您可以建立遷移任務來遷移現有資料，同時複寫持續變更。即使載入大量資料， 仍會 AWS DMS 繼續擷取和套用變更。來源和目標資料庫最終將保持同步，盡可能地縮短停機時間。

**注意**  
AWS DMS 使用 操作日誌 (oplog) 來擷取進行中複寫期間的變更。如果 Amazon DocumentDB 在 AWS DMS 讀取記錄之前從 oplog 中清除記錄，您的任務將會失敗。我們建議調整 oplog 的大小，以將變更保留至少 24 小時。

## 使用 TLS 連接到 Amazon DocumentDB
<a name="CHAP_Source.DocumentDB.TLS"></a>

依預設，新建立的 Amazon DocumentDB 叢集僅接受使用 Transport Layer Security (TLS) 的安全連線。啟用 TLS 時，每個 Amazon DocumentDB 連線都需要公有金鑰。

您可以從 AWS託管的 Amazon S3 儲存貯體下載 檔案，以擷取 Amazon DocumentDB 的公有金鑰。 `rds-combined-ca-bundle.pem` Amazon S3 如需下載此檔案的相關資訊，請參閱《Amazon DocumentDB開發人員指南》**中的[使用 TLS 加密連線](https://docs.aws.amazon.com/documentdb/latest/developerguide/security.encryption.ssl.html)。

下載`rds-combined-ca-bundle.pem`檔案後，您可以匯入其中包含的公有金鑰 AWS DMS。下列步驟說明如何執行這項操作。

**使用 AWS DMS 主控台匯入您的公有金鑰**

1. 登入 AWS 管理主控台 並選擇 AWS DMS。

1. 在導覽窗格中，選擇 **Certificates (憑證)**。

1. 選擇 **Import certificate (匯入憑證)**。隨即顯示**匯入新的 CA 憑證**頁面。

1. 在**憑證組態**區段中，執行以下其中一項操作：
   + 針對**憑證識別碼**，輸入憑證的唯一名稱，例如 `docdb-cert`。
   + 選擇**選擇檔案**，瀏覽至您儲存 `rds-combined-ca-bundle.pem` 檔案的位置，然後加以選取。

1. 選擇 **Add new CA certificate (新增憑證授權機構憑證)**。

 AWS CLI 下列範例使用 AWS DMS `import-certificate`命令匯入公有金鑰`rds-combined-ca-bundle.pem`檔案。

```
aws dms import-certificate \
    --certificate-identifier docdb-cert \
    --certificate-pem file://./rds-combined-ca-bundle.pem
```

## 建立 Amazon DocumentDB 來源端點
<a name="CHAP_Source.DocumentDB.ConfigureEndpoint"></a>

您可以使用主控台或 AWS CLI建立 Amazon DocumentDB 來源端點。使用主控台執行以下程序。

**使用 AWS DMS 主控台設定 Amazon DocumentDB 來源端點**

1. 登入 AWS 管理主控台 並選擇 AWS DMS。

1. 在導覽窗格中選擇**端點**，然後選擇**建立端點**。

1. 對於**端點識別碼**，請提供可協助您輕鬆識別的名稱，例如 `docdb-source`。

1. 針對**來源引擎**，請選擇 **Amazon DocumentDB (with MongoDB compatibility)**。

1. 在**伺服器名稱**中，輸入 Amazon DocumentDB 資料庫端點所在的伺服器名稱。例如，您可以輸入 Amazon EC2 執行個體的公有 DNS 名稱，例如 `democluster.cluster-cjf6q8nxfefi.us-east-2.docdb.amazonaws.com`。

1. 針對**連接埠**，輸入 27017。

1. 對於 **SSL mode (SSL 模式)**，請選擇 **verify-full (完整驗證)**。如果您已在 Amazon DocumentDB 叢集上停用 SSL，則可以略過此步驟。

1. 對於 **CA 憑證**，請選擇 Amazon DocumentDB 憑證 (`rds-combined-ca-bundle.pem`)。如需新增此憑證的指示，請參閱[使用 TLS 連接到 Amazon DocumentDB](#CHAP_Source.DocumentDB.TLS)。

1. 針對**資料庫名稱**，輸入要遷移的資料庫名稱。

使用 CLI 執行以下程序。

**使用 設定 Amazon DocumentDB 來源端點 AWS CLI**
+ 執行下列 AWS DMS `create-endpoint`命令來設定 Amazon DocumentDB 來源端點，以您自己的值取代預留位置。

  ```
  aws dms create-endpoint \
             --endpoint-identifier a_memorable_name \
             --endpoint-type source \
             --engine-name docdb \
             --username value \
             --password value \
             --server-name servername_where_database_endpoint_resides \
             --port 27017 \
             --database-name name_of_endpoint_database
  ```

## 將 Amazon DocumentDB 集合分段並平行遷移
<a name="CHAP_Source.DocumentDB.ParallelLoad"></a>

為了改善遷移任務的效能，Amazon DocumentDB 來源端點在資料表對應中支援兩個平行完全載入功能選項。換句話說，您可以在 JSON 設定中為平行完全載入，使用自動分段或包含資料表對應的範圍分割選項，以平行遷移集合。自動分割選項可讓您指定 的條件 AWS DMS ，以自動分割來源以進行每個執行緒中的遷移。範圍分割選項可讓您告知 DMS AWS DMS 在每個執行緒中遷移的每個區段的特定範圍。如需這些設定的詳細資訊，請參閱[資料表和集合設定規則與操作](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md)。

### 使用自動分段範圍平行遷移 Amazon DocumentDB 資料庫
<a name="CHAP_Source.DocumentDB.ParallelLoad.AutoPartitioned"></a>

您可以平行遷移文件，方法是指定 條件 AWS DMS ，讓 自動分割 （分割） 每個執行緒的資料，尤其是每個執行緒要遷移的文件數量。使用此方法時， AWS DMS 嘗試最佳化區段邊界，以獲得每個執行緒的最大效能。

您可以使用下列資料表對應中的資料表設定選項來指定分段條件：


|  資料表設定選項  |  Description  | 
| --- | --- | 
|  `"type"`  |  (必要) 設為 `"partitions-auto"` 以將 Amazon DocumentDB 作為來源。  | 
|  `"number-of-partitions"`  |  (選用) 用於遷移的分割 (區段) 總數。預設為 16。  | 
|  `"collection-count-from-metadata"`  |  （選用） 如果設定為 `true`， AWS DMS 會使用預估的集合計數來判斷分割區數量。如果設定為 `false`， AWS DMS 會使用實際的收集計數。預設值為 `true`。  | 
|  `"max-records-skip-per-page"`  |  （選用） 決定每個分割區的邊界時要一次略過的記錄數目。 AWS DMS 會使用分頁略過方法來決定分割區的最小邊界。預設值為 10000。設定相對較大的值可能會導致游標逾時和任務失敗。設定相對較低的值會導致每頁操作數增加，而且完全載入速度較慢。  | 
|  `"batch-size"`  |  (選用) 限制在單一批次中傳回的文件數。每個批次都需要往返伺服器。如果批次大小為零 (0)，游標會使用伺服器定義的批次大小上限。預設值為 0。  | 

下列範例顯示自動分段的資料表對應。

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "admin",
                "table-name": "departments"
            },
            "rule-action": "include",
            "filters": []
        },
        {
            "rule-type": "table-settings",
            "rule-id": "2",
            "rule-name": "2",
            "object-locator": {
                "schema-name": "admin",
                "table-name": "departments"
            },
            "parallel-load": {
                "type": "partitions-auto",
                "number-of-partitions": 5,
                "collection-count-from-metadata": "true",
                "max-records-skip-per-page": 1000000,
                "batch-size": 50000
            }
        }
    ]
}
```

自動分段具有下列限制。每個區段的遷移會分別擷取集合計數和收集下限 `_id`。然後，其會使用分頁略過來計算該區段的最小邊界。因此，請確保每個集合的最小 `_id` 值保持不變，直到集合中的所有區段邊界都經過計算為止。如果您在區段邊界計算期間變更集合的最小 `_id` 值，這可能會導致資料遺失或重複的資料列錯誤。

### 使用特定區段範圍平行遷移 Amazon DocumentDB 資料庫
<a name="CHAP_Source.DocumentDB.ParallelLoad.Ranges"></a>

下列範例顯示具有七個項目的 Amazon DocumentDB 集合，並將 `_id` 作為主索引鍵。

![\[具有七個項目的 Amazon DocumentDB 集合。\]](http://docs.aws.amazon.com/zh_tw/dms/latest/userguide/images/datarep-docdb-collection.png)


若要將集合分割成三個區段並平行遷移，您可以如下列 JSON 範例所示，將資料表對應規則新增至遷移任務。

```
{ // Task table mappings:
  "rules": [
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "1",
      "object-locator": {
        "schema-name": "testdatabase",
        "table-name": "testtable"
      },
      "rule-action": "include"
    }, // "selection" :"rule-type"
    {
      "rule-type": "table-settings",
      "rule-id": "2",
      "rule-name": "2",
      "object-locator": {
        "schema-name": "testdatabase",
        "table-name": "testtable"
      },
      "parallel-load": {
        "type": "ranges",
        "columns": [
           "_id",
           "num"
        ],
        "boundaries": [
          // First segment selects documents with _id less-than-or-equal-to 5f805c97873173399a278d79
          // and num less-than-or-equal-to 2.
          [
             "5f805c97873173399a278d79",
             "2"
          ],
          // Second segment selects documents with _id > 5f805c97873173399a278d79 and
          // _id less-than-or-equal-to 5f805cc5873173399a278d7c and
          // num > 2 and num less-than-or-equal-to 5.
          [
             "5f805cc5873173399a278d7c",
             "5"
          ]                                   
          // Third segment is implied and selects documents with _id > 5f805cc5873173399a278d7c.
        ] // :"boundaries"
      } // :"parallel-load"
    } // "table-settings" :"rule-type"
  ] // :"rules"
} // :Task table mappings
```

該資料表對應定義會將來源集合分割為三個區段，並平行遷移。以下是分段邊界。

```
Data with _id less-than-or-equal-to "5f805c97873173399a278d79" and num less-than-or-equal-to 2 (2 records)
Data with _id less-than-or-equal-to "5f805cc5873173399a278d7c" and num less-than-or-equal-to 5 and not in (_id less-than-or-equal-to  "5f805c97873173399a278d79" and num less-than-or-equal-to 2) (3 records)
Data not in (_id less-than-or-equal-to "5f805cc5873173399a278d7c" and num less-than-or-equal-to 5) (2 records)
```

遷移任務完成後，您可以如下列範例所示，從任務日誌中確認資料表是否是平行載入。您也可以驗證用來從來源資料表卸載每個區段的 Amazon DocumentDB `find` 子句。

```
[TASK_MANAGER    ] I:  Start loading segment #1 of 3 of table 'testdatabase'.'testtable' (Id = 1) by subtask 1. Start load timestamp 0005B191D638FE86  (replicationtask_util.c:752)

[SOURCE_UNLOAD   ] I:  Range Segmentation filter for Segment #0 is initialized.   (mongodb_unload.c:157)

[SOURCE_UNLOAD   ] I:  Range Segmentation filter for Segment #0 is: { "_id" : { "$lte" : { "$oid" : "5f805c97873173399a278d79" } }, "num" : { "$lte" : { "$numberInt" : "2" } } }  (mongodb_unload.c:328)

[SOURCE_UNLOAD   ] I: Unload finished for segment #1 of segmented table 'testdatabase'.'testtable' (Id = 1). 2 rows sent.

[TASK_MANAGER    ] I: Start loading segment #1 of 3 of table 'testdatabase'.'testtable' (Id = 1) by subtask 1. Start load timestamp 0005B191D638FE86 (replicationtask_util.c:752)
 
[SOURCE_UNLOAD   ] I: Range Segmentation filter for Segment #0 is initialized. (mongodb_unload.c:157) 

[SOURCE_UNLOAD   ] I: Range Segmentation filter for Segment #0 is: { "_id" : { "$lte" : { "$oid" : "5f805c97873173399a278d79" } }, "num" : { "$lte" : { "$numberInt" : "2" } } } (mongodb_unload.c:328)
 
[SOURCE_UNLOAD   ] I: Unload finished for segment #1 of segmented table 'testdatabase'.'testtable' (Id = 1). 2 rows sent.

[TARGET_LOAD     ] I: Load finished for segment #1 of segmented table 'testdatabase'.'testtable' (Id = 1). 1 rows received. 0 rows skipped. Volume transfered 480.

[TASK_MANAGER    ] I: Load finished for segment #1 of table 'testdatabase'.'testtable' (Id = 1) by subtask 1. 2 records transferred.
```

目前， AWS DMS 支援下列 Amazon DocumentDB 資料類型做為區段索引鍵資料欄：
+ Double
+ String
+ ObjectId
+ 32 位元整數
+ 64 位元整數

## 使用 Amazon DocumentDB 做為 來源時遷移多個資料庫 AWS DMS
<a name="CHAP_Source.DocumentDB.Multidatabase"></a>

AWS DMS 3.4.5 版和更高版本僅支援在 Amazon DocumentDB 4.0 版和更高版本的任務中遷移多個資料庫。若想要遷移多個資料庫，請執行以下作業：

1. 當您建立 Amazon DocumentDB 來源端點時：
   + 在 AWS 管理主控台 的 中 AWS DMS，在**建立****端點頁面上的端點組態**下將**資料庫名稱**保留空白。
   + 在 AWS Command Line Interface (AWS CLI) 中，將空字串值指派給您為 **CreateEndpoint** 動作指定的 **DocumentDBSettings** 中的 **DatabaseName** 參數。

1. 對於要從此 Amazon DocumentDB 來源端點遷移的每個資料庫，請使用主控台中的引導式輸入或直接使用 JSON，將每個資料庫的名稱指定為任務資料表對應的結構描述名稱。如需引導式輸入的相關資訊，請參閱[從主控台指定資料表選取及轉換](CHAP_Tasks.CustomizingTasks.TableMapping.Console.md)的描述。如需 JSON 的相關資訊，請參閱[選取規則與動作](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Selections.md)。

例如，您可以在下列指定 JSON 以遷移三個 Amazon DocumentDB 資料庫。

**Example 遷移結構描述中的所有資料表**  
下列 JSON 會將來源端點中 `Customers`、`Orders` 和 `Suppliers` 資料庫中的所有資料表遷移至目標端點。  

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "Customers",
                "table-name": "%"
            },
            "object-locator": {
                "schema-name": "Orders",
                "table-name": "%"
            },
            "object-locator": {
                "schema-name": "Inventory",
                "table-name": "%"
            },
            "rule-action": "include"
        }
    ]
}
```

## 使用 Amazon DocumentDB 做為 來源的限制 AWS DMS
<a name="CHAP_Source.DocumentDB.Limitations"></a>

以下是使用 Amazon DocumentDB 做為 來源時的限制 AWS DMS：
+ 當 `_id` 選項設為單獨的資料行，ID 字串不能超過 200 個字元。
+ 在資料表模式中，物件 ID 和陣列類型索引鍵都會轉換成以 `oid` 和 `array` 為前綴的資料行。

  這些資料行在內部使用加上前綴的名稱參考。如果您在 中使用參考這些欄 AWS DMS 的轉換規則，請務必指定字首欄。例如，指定 `${oid__id}` (而不是 `${_id}`) 或是 (`${array__addresses}` 而不是 `${_addresses}`)。
+  集合名稱和索引鍵名稱不能包含金錢符號 (\$1)。
+ 資料表模式和文件模式都有前文討論的限制。
+ 使用自動分段進行平行遷移時具有前述限制。
+ Amazon DocumentDB (MongoDB compatible) 來源不支援使用特定時間戳記作為變更資料擷取 (CDC) 的起始位置。進行中複寫任務會開始擷取變更 (不論時間戳記為何)。
+ AWS DMS 對於低於 3.5.2 的 AWS DMS 版本， 不支援巢狀層級大於 97 的文件。
+ DocumentDB 不支援來源篩選條件。
+ AWS DMS 不支援在彈性叢集模式中將 DocumentDB 的 CDC （變更資料擷取） 複寫做為來源。

## 在將 Amazon DocumentDB 作為來源的情況下使用端點設定
<a name="CHAP_Source.DocumentDB.ECAs"></a>

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

下列資料表顯示您可以在將 Amazon DocumentDB 作為來源搭配使用的端點設定。


| 屬性名稱 | 有效值 | 預設值和描述 | 
| --- | --- | --- | 
|   `NestingLevel`   |  `"none"` `"one"`  |  `"none"`：指定 `"none"` 使用文件模式。指定 `"one"` 使用資料表模式。  | 
|   `ExtractDocID`   |  `true` `false`  |  `false`：將 `NestingLevel` 設為 `"none"` 時，請使用此屬性。 搭配產生[多文件交易](https://www.mongodb.com/docs/manual/reference/method/Session.startTransaction/#mongodb-method-Session.startTransaction)的來源使用 CDC 時， `ExtractDocId` 參數**必須**設定為 `true`。如果未啟用此參數， AWS DMS 任務會在遇到多文件交易時失敗。  | 
|   `DocsToInvestigate`   |  正整數會大於 `0`。  |  `1000`：將 `NestingLevel` 設為 `"one"` 時，請使用此屬性。  | 
|   `ReplicateShardCollections `   |  `true` `false`  |  當為 true 時， 會將資料 AWS DMS 複寫至碎片集合。只有在目標端點是 DocumentDB 彈性叢集時， AWS DMS 才會使用此設定。 當此設定為 true 時，請注意以下事項： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/dms/latest/userguide/CHAP_Source.DocumentDB.html)  | 

## Amazon DocumentDB 的來源資料類型
<a name="CHAP_Source.DocumentDB.DataTypes"></a>

您可以在下表中找到在使用 AWS DMS時支援的 Amazon DocumentDB 來源資料類型。您也可以在此資料表中找到來自 AWS DMS 資料類型的預設映射。如需資料類型的詳細資訊，請參閱 MongoDB 文件中的 [BSON 類型](https://docs.mongodb.com/manual/reference/bson-types)。

如需如何檢視從目標映射的資料類型資訊，請參閱您要使用的目標端點一節。

如需 AWS DMS 資料類型的詳細資訊，請參閱 [AWS Database Migration Service 的資料類型](CHAP_Reference.DataTypes.md)。


|  Amazon DocumentDB 資料類型  |  AWS DMS 資料類型  | 
| --- | --- | 
| Boolean | Bool | 
| 二進位 | BLOB | 
| Date | Date | 
| 時間戳記 | Date | 
| Int | INT4 | 
| Long | INT8 | 
| Double | REAL8 | 
| 字串 (UTF-8) | CLOB | 
| 陣列 | CLOB | 
| OID | String | 

# 使用 Amazon S3 做為 的來源 AWS DMS
<a name="CHAP_Source.S3"></a>

您可以使用 從 Amazon S3 儲存貯體遷移資料 AWS DMS。若要執行此作業，請提供 Amazon S3 儲存貯體的存取權，這些儲存貯體內含一或多個資料檔案。在該 S3 儲存貯體中，包含描述資料和這些檔案之資料庫資料表間映射的 JSON 檔案。

在完全載入開始之前，Amazon S3 儲存貯體中就必須有來源資料檔案。請使用 `bucketName` 參數指定儲存貯體名稱。

來源資料檔案可以是下列格式：
+ 逗號分隔值 (.csv)
+ Parquet (DMS 3.5.3 版及更新版本）。如需使用 Parquet-format 檔案的詳細資訊，請參閱 [使用 Amazon S3 中的 Parquet 格式檔案做為 的來源 AWS DMS](#CHAP_Source.S3.Parquet)。

對於逗號分隔值 (.csv) 格式的來源資料檔案，請使用下列命名慣例來命名它們。在此慣例中，*`schemaName`* 是來源結構描述，而 *`tableName`* 是該結構描述內的資料表名稱。

```
/schemaName/tableName/LOAD001.csv
/schemaName/tableName/LOAD002.csv
/schemaName/tableName/LOAD003.csv
...
```

 例如，假設資料檔案位在以下 Amazon S3 路徑的 `amzn-s3-demo-bucket`。

```
s3://amzn-s3-demo-bucket/hr/employee
```

在載入時間， AWS DMS 假設來源結構描述名稱為 `hr`，而來源資料表名稱為 `employee`。

除了 `bucketName`（必要） 之外，您還可以選擇性地提供 `bucketFolder` 參數，以指定 Amazon S3 儲存貯體中 AWS DMS 應在何處尋找資料檔案。繼續先前的範例，如果您將 `bucketFolder`設定為 `sourcedata`，則 會在下列路徑 AWS DMS 讀取資料檔案。

```
s3://amzn-s3-demo-bucket/sourcedata/hr/employee
```

您可以使用額外連線屬性指定資料行分隔符號、資料列分隔符號、null 值指標和其他參數。如需詳細資訊，請參閱[Amazon S3 做為 來源的端點設定 AWS DMS](#CHAP_Source.S3.Configuring)。

您可以如下所示，使用 `ExpectedBucketOwner` Amazon S3 端點設定來指定儲存貯體擁有者並防止惡意攻擊。然後，當您提出測試連線或執行遷移請求時，S3 會根據指定參數檢查儲存貯體擁有者的帳戶識別碼。

```
--s3-settings='{"ExpectedBucketOwner": "AWS_Account_ID"}'
```

**Topics**
+ [將 Amazon S3 的外部資料表定義為 的來源 AWS DMS](#CHAP_Source.S3.ExternalTableDef)
+ [使用 CDC 搭配 Amazon S3 做為 的來源 AWS DMS](#CHAP_Source.S3.CDC)
+ [使用 Amazon S3 做為 來源時的先決條件 AWS DMS](#CHAP_Source.S3.Prerequisites)
+ [使用 Amazon S3 做為 來源的限制 AWS DMS](#CHAP_Source.S3.Limitations)
+ [Amazon S3 做為 來源的端點設定 AWS DMS](#CHAP_Source.S3.Configuring)
+ [Amazon S3 的來源資料類型](#CHAP_Source.S3.DataTypes)
+ [使用 Amazon S3 中的 Parquet 格式檔案做為 的來源 AWS DMS](#CHAP_Source.S3.Parquet)

## 將 Amazon S3 的外部資料表定義為 的來源 AWS DMS
<a name="CHAP_Source.S3.ExternalTableDef"></a>

除了資料檔案，您還必須提供外部資料表定義。*外部資料表定義*是 JSON 文件，說明如何從 Amazon S3 AWS DMS 解譯資料。此文件大小上限為 2 MB。如果您使用 AWS DMS 管理主控台建立來源端點，則可以直接在資料表映射方塊中輸入 JSON。如果您使用 AWS Command Line Interface (AWS CLI) 或 AWS DMS API 執行遷移，您可以建立 JSON 檔案來指定外部資料表定義。

假設您的資料檔案包含以下內容。

```
101,Smith,Bob,2014-06-04,New York
102,Smith,Bob,2015-10-08,Los Angeles
103,Smith,Bob,2017-03-13,Dallas
104,Smith,Bob,2017-03-13,Dallas
```

以下為此資料的範例外部資料表定義。

```
{
    "TableCount": "1",
    "Tables": [
        {
            "TableName": "employee",
            "TablePath": "hr/employee/",
            "TableOwner": "hr",
            "TableColumns": [
                {
                    "ColumnName": "Id",
                    "ColumnType": "INT8",
                    "ColumnNullable": "false",
                    "ColumnIsPk": "true"
                },
                {
                    "ColumnName": "LastName",
                    "ColumnType": "STRING",
                    "ColumnLength": "20"
                },
                {
                    "ColumnName": "FirstName",
                    "ColumnType": "STRING",
                    "ColumnLength": "30"
                },
                {
                    "ColumnName": "HireDate",
                    "ColumnType": "DATETIME"
                },
                {
                    "ColumnName": "OfficeLocation",
                    "ColumnType": "STRING",
                    "ColumnLength": "20"
                }
            ],
            "TableColumnsTotal": "5"
        }
    ]
}
```

此 JSON 文件的元素如下：

`TableCount`：來源資料表的數量。在本範例中，只有一份資料表。

`Tables`：由每個來源資料表一個 JSON 對應組成的陣列。在本範例中，只有一個映射。每個映射包含以下元素：
+ `TableName`：來源資料表的名稱。
+ `TablePath`：在 Amazon S3 儲存貯體中， AWS DMS 可以在其中找到完整資料載入檔案的路徑。如已指定 `bucketFolder` 值，則此值會附加到路徑前。
+ `TableOwner`：此資料表的結構描述名稱。
+ `TableColumns`：一或多個對應的陣列，其中每一個都會描述來源資料表中的資料欄：
  + `ColumnName`：來源資料表中的資料欄名稱。
  + `ColumnType`：資料欄的資料類型。如需有效的資料類型，請參閱[Amazon S3 的來源資料類型](#CHAP_Source.S3.DataTypes)。
  + `ColumnLength`：此資料欄中的位元組數量。最大資料欄長度限制為 2147483647 位元組 (2,047 百萬位元組)，因為 S3 來源不支援完整 LOB 模式。`ColumnLength` 對於以下資料類型是有效的：
    + BYTE
    + STRING
  + `ColumnNullable`：如果此資料欄可以包含 NULL 值，則為 `true` 的布林值 (預設=`false`)。
  + `ColumnIsPk`：如果此資料欄是主索引鍵的一部分，則為 `true` 的布林值 (預設=`false`)。
  + `ColumnDateFormat`：具有 DATE、TIME 和 DATETIME 類型之資料欄的輸入日期格式，並用來將資料字串剖析為日期物件。可能的值包括：

    ```
    - YYYY-MM-dd HH:mm:ss
    - YYYY-MM-dd HH:mm:ss.F
    - YYYY/MM/dd HH:mm:ss
    - YYYY/MM/dd HH:mm:ss.F
    - MM/dd/YYYY HH:mm:ss
    - MM/dd/YYYY HH:mm:ss.F
    - YYYYMMdd HH:mm:ss
    - YYYYMMdd HH:mm:ss.F
    ```
+ `TableColumnsTotal`：資料欄的總數。此數目必須符合 `TableColumns` 陣列中的元素數目。

如果您未另外指定 ，則 AWS DMS 假設 `ColumnLength` 為零。

**注意**  
在支援的 版本中 AWS DMS，S3 來源資料也可以包含選用的操作資料欄，做為`TableName`資料欄值之前的第一欄。此操作欄位可識別在完全載入期間用來將資料遷移到 S3 目標端點的操作 (`INSERT`)。  
如果存在，此欄的值是 `INSERT` 操作關鍵字 (`I`) 的起首字元。若已指定，此欄通常指出 S3 來源在前一個遷移期間已被 DMS 建立為 S3 目標。  
在 3.4.2 之前的 DMS 版本中，從先前的 DMS 完全載入中建立的 S3 來源資料中不存在此資料欄。將此欄新增至 S3 目標資料允許寫入至 S3 的所有資料列格式保持一致，無論是在完全載入期間還是在 CDC 載入期間寫入它們。如需用於格式化 S3 目標資料格式之選項的詳細資訊，請參閱[在遷移的 S3 資料中指示來源資料庫操作](CHAP_Target.S3.md#CHAP_Target.S3.Configuring.InsertOps)。

如需 NUMERIC 類型的資料行，請指定精確度和小數位數。*精確度*是一個數字的總位數，而*小數位數*是小數點右邊的位數。您針對此項使用 `ColumnPrecision` 和 `ColumnScale` 元素，如下所示。

```
...
    {
        "ColumnName": "HourlyRate",
        "ColumnType": "NUMERIC",
        "ColumnPrecision": "5"
        "ColumnScale": "2"
    }
...
```

對於 DATETIME 類型資料欄，如果其資料包含小數秒數，請指定小數位數。*小數位數*是小數秒數的位數，範圍可以從 0 到 9。如下所示，針對此項使用 `ColumnScale` 元素。

```
...
{
      "ColumnName": "HireDate",
      "ColumnType": "DATETIME",
      "ColumnScale": "3"
}
...
```

如果您不另外指定，則 AWS DMS 假設`ColumnScale`為零並截斷小數秒。

## 使用 CDC 搭配 Amazon S3 做為 的來源 AWS DMS
<a name="CHAP_Source.S3.CDC"></a>

在 AWS DMS 執行完整資料載入後，可以選擇性地將資料變更複寫到目標端點。若要這樣做，您可以將變更資料擷取檔案 (CDC 檔案） 上傳至 Amazon S3 儲存貯體。當您上傳這些檔案時， 會 AWS DMS 讀取這些 CDC 檔案，然後在目標端點套用變更。

CDC 檔案命名方式如下：

```
CDC00001.csv
CDC00002.csv
CDC00003.csv
...
```

**注意**  
若要成功複寫變更資料資料夾中的 CDC 檔案，請按辭典 (連續) 順序上傳。例如，先上傳檔案 CDC00002.csv 後，再上傳 CDC00003.csv。如果您在 CDC00003.csv 之後載入 CDC00002.csv，則會略過且不會複寫 CDC00002.csv。但是，如果 CDC00004.csv 在 CDC00003.csv 之後載入，則會成功複寫。

若要指出在哪裡 AWS DMS 可以找到檔案，請指定 `cdcPath` 參數。繼續之前的範例，如果您將 `cdcPath` 設為 `changedata`，則 AWS DMS 會讀取以下路徑的 CDC 檔案。

```
s3://amzn-s3-demo-bucket/changedata
```

如果您將 `cdcPath` 設為 `changedata` 且將 `bucketFolder` 設為 `myFolder`，則 AWS DMS 會讀取以下路徑的 CDC 檔案。

```
s3://amzn-s3-demo-bucket/myFolder/changedata
```

CDC 檔案格式的記錄格式，如下所示：
+ 操作：要執行的變更操作：`INSERT` 或 `I`、`UPDATE` 或 `U`、`DELETE` 或 `D`。這些關鍵字和字元值不區分大小寫。
**注意**  
在支援的 AWS DMS 版本中， AWS DMS 可以透過兩種方式識別要為每個載入記錄執行的操作。 AWS DMS 可以從記錄的關鍵字值 （例如，`INSERT`) 或關鍵字初始字元 （例如，) 執行此操作`I`。在舊版中， AWS DMS 僅從完整的關鍵字值識別負載操作。  
在舊版 中 AWS DMS，寫入完整關鍵字值以記錄 CDC 資料。舊版也只會使用關鍵字首字母，將操作值寫入至任何 S3 目標。  
辨識這兩種格式 AWS DMS 可讓 處理操作，無論操作資料欄如何寫入以建立 S3 來源資料。此方法支援使用 S3 目標資料做為較新遷移的來源。使用此方式，您不需要變更任何關鍵字起首值的格式，而此起首值出現在後續 S3 來源的操作欄中。
+ 資料表名稱：來源資料表的名稱。
+ 結構描述名稱：來源結構描述的名稱。
+ 資料：代表要變更之資料的一或多個資料欄。

以下是 `employee` 資料表的範例 CDC 檔案。

```
INSERT,employee,hr,101,Smith,Bob,2014-06-04,New York
UPDATE,employee,hr,101,Smith,Bob,2015-10-08,Los Angeles
UPDATE,employee,hr,101,Smith,Bob,2017-03-13,Dallas
DELETE,employee,hr,101,Smith,Bob,2017-03-13,Dallas
```

## 使用 Amazon S3 做為 來源時的先決條件 AWS DMS
<a name="CHAP_Source.S3.Prerequisites"></a>

若要使用 Amazon S3 做為來源 AWS DMS，您的來源 S3 儲存貯體必須與遷移資料的 DMS 複寫執行個體位於相同的 AWS 區域。此外，用於遷移的 AWS 帳戶必須有來源儲存貯體的讀取存取權。對於 3.4.7 版和更新 AWS DMS 版本，DMS 必須透過 VPC 端點或公有路由存取來源儲存貯體。如需 VPC 端點的資訊，請參閱 [設定 的 VPC 端點 AWS DMS](CHAP_VPC_Endpoints.md)。

指派給用來建立遷移任務之使用者帳戶的 AWS Identity and Access Management (IAM) 角色必須具有下列一組許可。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
       {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket*/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket*"
            ]
        }
    ]
}
```

------

如果已在 Amazon S3 儲存貯體上啟用版本控制，則指派給用於建立遷移任務之使用者帳戶的 AWS Identity and Access Management (IAM) 角色必須具有下列一組許可。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
       {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket*/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket*"
            ]
        }
    ]
}
```

------

## 使用 Amazon S3 做為 來源的限制 AWS DMS
<a name="CHAP_Source.S3.Limitations"></a>

使用 Amazon S3 作為來源時，有下列限制：
+ 請勿為 S3 啟用版本控制。如果您需要 S3 版本控制，請使用生命週期政策以主動刪除舊版本。否則，您可能會因 S3 `list-object` 呼叫逾時而遭遇端點測試連線失敗。若要建立 S3 儲存貯體的生命週期政策，請參閱[管理儲存生命週期](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html)。若要刪除 S3 物件的版本，請參閱[刪除啟用版本控制功能之儲存貯體中的物件](https://docs.aws.amazon.com/AmazonS3/latest/dev/DeletingObjectVersions.html)。
+ 3.4.7 及更新版本支援啟用 VPC (閘道 VPC) 的 S3 儲存貯體。
+ MySQL 會將`time`資料類型轉換為 `string`。若要查看 MySQL 中的`time`資料類型值，請將目標資料表中的資料欄定義為 `string`，並將任務**的目標資料表準備模式**設定為**截斷**。
+ AWS DMS 在內部針對 `BYTE`和 `BYTE`資料類型中的資料使用 `BYTES` 資料類型。
+ S3 來源端點不支援 DMS 資料表重新載入功能。
+ AWS DMS 不支援使用 Amazon S3 做為來源的完整 LOB 模式。

在 Amazon S3 中使用 Parquet 格式檔案做為來源時，適用下列限制：
+ S3 Parquet 來源日期分割功能`DDMMYYYY`不支援 `MMYYYYDD`、 或 中的日期。

## Amazon S3 做為 來源的端點設定 AWS DMS
<a name="CHAP_Source.S3.Configuring"></a>

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

**注意**  
AWS DMS 預設為 Amazon S3 端點的安全連線，而不需要指定 SSL 模式或憑證。

下列資料表顯示您可以在將 Amazon S3 作為來源搭配使用的端點設定。


| **選項** | **Description** | 
| --- | --- | 
| BucketFolder |  (選用) S3 儲存貯體的資料夾名稱。如果提供此屬性，就可以分別讀取路徑 `s3://amzn-s3-demo-bucket/bucketFolder/schemaName/tableName/` 和 `s3://amzn-s3-demo-bucket/bucketFolder/` 的來源資料檔案和 CDC 檔案。如不指定此屬性，則使用路徑 `schemaName/tableName/`。 `'{"BucketFolder": "sourceData"}'`  | 
| BucketName |  S3 儲存貯體的名稱。 `'{"BucketName": "amzn-s3-demo-bucket"}'`  | 
| CdcPath | CDC 檔案的位置。如果任務要擷取變更資料，此屬性即為必要，否則即為選用。如果 CdcPath 存在，則 會從此路徑 AWS DMS 讀取 CDC 檔案，並將資料變更複寫到目標端點。如需詳細資訊，請參閱[使用 CDC 搭配 Amazon S3 做為 的來源 AWS DMS](#CHAP_Source.S3.CDC)。`'{"CdcPath": "changeData"}'`  | 
| CsvDelimiter |  用來在原始檔案中區隔資料行的分隔符號。預設為逗號。範例如下。 `'{"CsvDelimiter": ","}'`  | 
| CsvNullValue |  從來源讀取時 AWS DMS 視為 null 的使用者定義字串。預設為空字串。如果您未設定此參數， AWS DMS 會將空字串視為 null 值。如果您將此參數設定為 "\$1N" 之類的字串， AWS DMS 會將此字串視為 null 值，並將空字串視為空字串值。  | 
| CsvRowDelimiter |  用來在原始檔案中區隔資料列的分隔符號。預設為新行 (`\n`)。 `'{"CsvRowDelimiter": "\n"}'`  | 
| DataFormat |  將此值設為 `Parquet`以讀取 Parquet 格式的資料。 `'{"DataFormat": "Parquet"}'`  | 
| IgnoreHeaderRows |  當此值設為 1 時， 會 AWS DMS 忽略 .csv 檔案中的第一列標頭。值 1 啟用此功能，值 0 停用此功能。 預設值為 0。 `'{"IgnoreHeaderRows": 1}'`  | 
| Rfc4180 |  將此值設為 `true` 或 `y` 時，每個上雙引號之後都必須要有下雙引號。此格式遵守 RFC 4180。此值設定為 `false` 或 `n` 時，字串常值會依原樣複製到目標。在這種情況下，分隔符號 (資料列或資料行) 表示欄位結尾。因此分隔符號無法用於字串，因為它表示一個值的結尾。 預設值為 `true`。 有效值：`true`、`false`、`y`、`n` `'{"Rfc4180": false}'`  | 

## Amazon S3 的來源資料類型
<a name="CHAP_Source.S3.DataTypes"></a>

使用 Amazon S3 做為 來源的資料遷移 AWS DMS 需要將資料從 Amazon S3 映射到 AWS DMS 資料類型。如需詳細資訊，請參閱[將 Amazon S3 的外部資料表定義為 的來源 AWS DMS](#CHAP_Source.S3.ExternalTableDef)。

如需如何檢視從目標映射的資料類型資訊，請參閱您要使用的目標端點一節。

如需 AWS DMS 資料類型的詳細資訊，請參閱 [AWS Database Migration Service 的資料類型](CHAP_Reference.DataTypes.md)。

下列 AWS DMS 資料類型會搭配 Amazon S3 做為來源使用：
+ BYTE：需要 `ColumnLength`。如需詳細資訊，請參閱[將 Amazon S3 的外部資料表定義為 的來源 AWS DMS](#CHAP_Source.S3.ExternalTableDef)。
+ DATE
+ TIME
+ DATETIME：如需詳細資訊和範例，請參閱[將 Amazon S3 的外部資料表定義為 的來源 AWS DMS](#CHAP_Source.S3.ExternalTableDef)中的 DATETIME 類型範例。
+ INT1
+ INT2
+ INT4
+ INT8
+ NUMERIC – 需要 `ColumnPrecision`和 `ColumnScale`。 AWS DMS 支援下列最大值：
  + **ColumnPrecision：38**
  + **ColumnScale：31**

  如需詳細資訊和範例，請參閱[將 Amazon S3 的外部資料表定義為 的來源 AWS DMS](#CHAP_Source.S3.ExternalTableDef)中的 NUMERIC 類型範例。
+ REAL4
+ REAL8
+ STRING：需要 `ColumnLength`。如需詳細資訊，請參閱[將 Amazon S3 的外部資料表定義為 的來源 AWS DMS](#CHAP_Source.S3.ExternalTableDef)。
+ UINT1
+ UINT2
+ UINT4
+ UINT8
+ BLOB
+ CLOB
+ BOOLEAN

## 使用 Amazon S3 中的 Parquet 格式檔案做為 的來源 AWS DMS
<a name="CHAP_Source.S3.Parquet"></a>

在 3.5.3 版和更新 AWS DMS 版本中，您可以使用 S3 儲存貯體中的 Parquet 格式檔案作為完整載入或 CDC 複寫的來源。

DMS 僅支援 Parquet 格式檔案做為 DMS 透過將資料遷移至 S3 目標端點所產生的來源。檔案名稱必須是支援的格式，否則 DMS 不會將其包含在遷移中。

對於 Parquet 格式的來源資料檔案，它們必須位於下列資料夾和命名慣例中。

```
schema/table1/LOAD00001.parquet
schema/table2/LOAD00002.parquet
schema/table2/LOAD00003.parquet
```

對於 Parquet 格式的 CDC 資料的來源資料檔案，請使用下列資料夾和命名慣例來命名和存放它們。

```
schema/table/20230405-094615814.parquet
schema/table/20230405-094615853.parquet
schema/table/20230405-094615922.parquet
```

若要存取 Parquet 格式的檔案，請設定下列端點設定：
+ 將 `DataFormat` 設定為 `Parquet`。
+ 請勿設定 `cdcPath`設定。請確定您在指定的結構描述/資料表資料夾中建立 Parquet 格式檔案。

如需 S3 端點設定的詳細資訊，請參閱 *AWS Database Migration Service API 參考*中的 [S3Settings](https://docs.aws.amazon.com/dms/latest/APIReference/API_S3Settings.html)。

### Parquet 格式檔案支援的資料類型
<a name="CHAP_Source.S3.Parquet.Datatypes"></a>

AWS DMS 從 Parquet 格式檔案遷移資料時， 支援下列來源和目標資料類型。遷移之前，請確定您的目標資料表具有正確資料類型的資料欄。


| 來源資料類型 | 目標資料類型 | 
| --- | --- | 
| BYTE | BINARY | 
| DATE | DATE32 | 
| TIME | TIME32 | 
| DATETIME | TIMESTAMP | 
| INT1 | INT8 | 
| INT2 | INT16 | 
| INT4 | INT32 | 
| INT8 | INT64 | 
| NUMERIC | DECIMAL | 
| REAL4 | FLOAT | 
| REAL8 | DOUBLE | 
| STRING | STRING | 
| UINT1 | UINT8 | 
| UINT2 | UINT16 | 
| UINT4 | UINT32 | 
| UINT8 | UINT | 
| WSTRING | STRING | 
| BLOB | BINARY | 
| NCLOB | STRING | 
| CLOB | STRING | 
| BOOLEAN | BOOL | 

# 使用適用於 Linux、Unix、Windows 和 Amazon RDS 資料庫 (Db2 LUW) 的 IBM Db2 作為 的來源 AWS DMS
<a name="CHAP_Source.DB2"></a>

您可以使用 AWS Database Migration Service ()，將資料從適用於 Linux、Unix、Windows 和 Amazon RDS (Db2 LUW) 的 IBM Db2 資料庫遷移到任何支援的目標資料庫AWS DMS。

如需 AWS DMS 支援 做為來源的 Linux、Unix、Windows 和 RDS 上的 Db2 版本資訊，請參閱 [的來源 AWS DMS](CHAP_Introduction.Sources.md)。

您可以使用 Secure Sockets Layer (SSL) 加密您 Db2 LUW 端點與複寫執行個體之間的連線。如需使用 SSL 搭配 Db2 LUW 端點的詳細資訊，請參閱[搭配 使用 SSL AWS Database Migration Service](CHAP_Security.SSL.md)。

當 從 IBM Db2 來源資料庫 AWS DMS 讀取資料時，它會使用 Db2 9.7 版及更新版本的預設隔離層級 CURSOR 穩定性 (CS)。如需詳細資訊，請參閱適用於 [Linux、UNIX 和 Windows 的 IBM Db2 ](https://www.ibm.com/docs/en/db2/12.1.0) 文件。

## 使用 Db2 LUW 做為 來源時的先決條件 AWS DMS
<a name="CHAP_Source.DB2.Prerequisites"></a>

您必須完成以下的事前準備，才能使用 Db2 LUW 資料庫做為來源。

若要啟用進行中複寫，也稱為變更資料擷取 (CDC)，請執行以下作業：
+ 將資料庫設定為可復原，這 AWS DMS 需要擷取變更。如果資料庫組態參數 `LOGARCHMETH1` 和 `LOGARCHMETH2` 其中之一或兩者皆設定為 `ON`，則資料庫為可復原。

  如果您的資料庫可復原，則 AWS DMS 可以`ARCHIVE LOG`視需要存取 Db2。
+ 確保 DB2 交易日誌可用，且有足夠的保留期間可供 處理 AWS DMS。
+ DB2 需要 `SYSADM` 或 `DBADM` 授權才能擷取交易日誌記錄。授予使用者帳戶以下許可：
  + `SYSADM` 或 `DBADM`
  + `DATAACCESS`
**注意**  
對於僅完全載入的任務，DMS 使用者帳戶需要 DATAACCESS 許可。
+ 將 IBM DB2 用於 LUW 9.7 版作為來源時，請如下所示，設定額外連線屬性 (ECA)，即 `CurrentLsn`：

  `CurrentLsn=LSN` (其中 `LSN` 會指定您希望複寫開始的日誌序號 (LSN))。或 `CurrentLsn=scan`。
+ 使用 Amazon RDS for Db2 LUW 做為來源時，請確定封存日誌可供 使用 AWS DMS。由於 AWS受管 Db2 資料庫會盡快清除封存日誌，因此您應該增加日誌保持可用的時間長度。例如，若要將日誌保留增加到 24 小時，請執行下列命令：

  ```
  db2 "call rdsadmin.set_archive_log_retention( ?, 'TESTDB', '24')"
  ```

  如需 Amazon RDS for Db2 LUW 程序的詳細資訊，請參閱[《Amazon Relational Database Service 使用者指南》中的 Amazon RDS for Db2 預存程序參考](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/db2-stored-procedures.html)。 *Amazon Relational Database Service *
+ 如果您使用 DB2 特定的預遷移評估，請授予下列權限：

  ```
  GRANT CONNECT ON DATABASE TO USER <DMS_USER>;
  GRANT SELECT ON SYSIBM.SYSDUMMY1 TO USER <DMS_USER>;
  GRANT SELECT ON SYSIBMADM.ENV_INST_INFO TO USER <DMS_USER>;
  GRANT SELECT ON SYSIBMADM.DBCFG TO USER <DMS_USER>;
  GRANT SELECT ON SYSCAT.SCHEMATA TO USER <DMS_USER>;
  GRANT SELECT ON SYSCAT.COLUMNS TO USER <DMS_USER>;
  GRANT SELECT ON SYSCAT.TABLES TO USER <DMS_USER>;
  GRANT EXECUTE ON FUNCTION SYSPROC.AUTH_LIST_AUTHORITIES_FOR_AUTHID TO <DMS_USER>;
  GRANT EXECUTE ON PACKAGE NULLID.SYSSH200 TO USER <DMS_USER>;
  ```

## 使用 Db2 LUW 做為 來源的限制 AWS DMS
<a name="CHAP_Source.DB2.Limitations"></a>

AWS DMS 不支援叢集資料庫。然而，您可以針對叢集的每個端點分別定義 Db2 LUW。例如，您可以使用叢集中的任一個節點建立「完全載入」遷移任務，然後從每個節點建立單獨的任務。

AWS DMS 不支援來源 Db2 LUW 資料庫中的`BOOLEAN`資料類型。

使用進行中複寫 (CDC) 時，有下列限制：
+ 當具有多個分割區的資料表遭到截斷時， AWS DMS 主控台中顯示的 DDL 事件數目等於分割區數目。這是因為 Db2 LUW 會針對每個分割區分別記錄 DDL。
+ 分區資料表上不支援以下 DDL 動作：
  + ALTER TABLE ADD PARTITION
  + ALTER TABLE DETACH PARTITION
  + ALTER TABLE ATTACH PARTITION
+ AWS DMS 不支援從 DB2 高可用性災難復原 (HADR) 待命執行個體進行持續複寫遷移。待命執行個體是無法存取的狀態。
+ 不支援 DECFLOAT 資料類型。因此，進行中複寫期間會忽略 DECFLOAT 資料行的變更。
+ 不支援 RENAME COLUMN 陳述式。
+ 執行多維叢集 (MDC) 資料表的更新時，每個更新都會在 AWS DMS 主控台中顯示為 INSERT \$1 DELETE。
+ 任務設定 **Include LOB columns in replication (在複寫中包含 LOB 資料行)** 啟用時，會在進行中複寫期間暫停任何有 LOB 資料行的資料表。
+ 針對 Db2 LUW 10.5 版和更新版本：忽略資料列不足儲存資料的變數長度字串資料行。此限制僅適用於針對 VARCHAR 和 VARGRAPHIC 等資料類型的資料欄，使用擴大資料列大小建立的資料表。若要解決此限制，請將資料表移至頁面大小較高的資料表空間。如需詳細資訊，請參閱[如果我想要變更 DB2 資料表空間的頁面尺寸，該怎麼辦]( https://www.ibm.com/support/pages/what-can-i-do-if-i-want-change-pagesize-db2-tablespaces )。
+ 對於進行中複寫，DMS 不支援遷移 DB2 LOAD 公用程式在頁面層級載入的資料。請改用使用 SQL 插入的 IMPORT 公用程式。如需詳細資訊，請參閱[匯入與載入公用程式之間的差異]( https://www.ibm.com/docs/en/db2/11.1?topic=utilities-differences-between-import-load-utility)。
+ 執行複寫任務時，只有當使用 DATA CAPTURE CHANGE 屬性建立資料表時，DMS 才會擷取 CREATE TABLE DDL。
+ DMS 使用 Db2 資料庫分割區功能 (DPF) 時有下列限制：
  + DMS 無法在 DPF 環境中跨 Db2 節點協調交易。這是因為 IBM DB2READLOG API 介面中的限制。在 DPF 中，交易可能會跨越多個 Db2 節點，取決於 DB2 分割資料的方式。因此，DMS 解決方案必須獨立擷取每個 Db2 節點的交易。
  + DMS 可以在多個 DMS 來源端點`1`上`connectNode`將 設定為 ，從 DPF 叢集中的每個 Db2 節點擷取本機交易。此組態對應至 DB2 伺服器組態檔案 中定義的邏輯節點號碼`db2nodes.cfg`。
  + 個別 Db2 節點上的本機交易可能是大型全域交易的一部分。DMS 會在目標上獨立套用每個本機交易，而不協調其他 Db2 節點上的交易。這種獨立處理可能會導致複雜性，特別是在分割區之間移動資料列時。
  + 當 DMS 從多個 Db2 節點複寫時，無法保證目標的正確操作順序，因為 DMS 會為每個 Db2 節點獨立套用操作。您必須確保獨立於每個 Db2 節點擷取本機交易適用於您的特定使用案例。
  + 從 DPF 環境遷移時，我們建議您先在沒有快取事件的情況下執行 Full Load 任務，然後執行僅限 CDC 的任務。我們建議每個 Db2 節點執行一個任務，從使用`StartFromContext`端點額外連線屬性設定的完全載入開始時間戳記或 LRI （日誌記錄識別符） 開始。如需有關判斷複寫起點的資訊，請參閱 *IBM 支援文件中*[尋找複寫開始的 LSN 或 LRI 值](https://www.ibm.com/support/pages/db2-finding-lsn-or-lri-value-replication-start)。
+ 對於持續複寫 (CDC)，如果您計劃從特定時間戳記開始複寫，則必須將`StartFromContext`額外的連線屬性設定為所需的時間戳記。
+ DMS 目前不支援 Db2 pureScale 功能，這是 DB2 LUW 的擴充功能，您可以用來擴展資料庫解決方案。
+ `DATA CAPTURE CHANGES` 資料表選項是 DB2 資料複寫程序的重要先決條件。在建立資料表時忽略啟用此選項可能會導致遺失資料，尤其是對於 CDC （變更資料擷取），僅限從較早的起點啟動的複寫任務。在重新啟動 CDC 或 FULL\$1CDC 任務時， 預設 AWS DMS 會啟用此屬性。不過，在任務重新啟動之前，在來源資料庫中所做的任何變更都可能會遺失。

  ```
  ALTER TABLE TABLE_SCHEMA.TABLE_NAME DATA CAPTURE CHANGES INCLUDE LONGVAR COLUMNS;
  ```

## 使用 Db2 LUW 做為 來源時的端點設定 AWS DMS
<a name="CHAP_Source.DB2.ConnectionSettings"></a>

您可以在使用 AWS DMS 主控台建立來源端點時指定設定，或使用 中的 `create-endpoint`命令[AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/create-endpoint.html)搭配

`--ibm-db2-settings '{"EndpointSetting1": "value1","EndpointSetting2": "value2"}'`

JSON 語法。

下列資料表顯示您可以在將 Db2 LUW 作為來源搭配使用的端點設定。


| 設定名稱 | Description | 
| --- | --- | 
|  `CurrentLsn`  |  對於進行中複寫 (CDC)，請使用 `CurrentLsn` 來指定您希望複寫開始的日誌序號 (LSN)。  | 
|  `MaxKBytesPerRead`  |  每次讀取的位元組數目上限，為 NUMBER 值。預設值為 64 KB。  | 
|  `SetDataCaptureChanges`  |  將進行中複寫 (CDC) 啟用作為 BOOLEAN 值。預設值為 true。  | 

## 使用 Db2 LUW 做為 來源時的額外連線屬性 (ECAs) AWS DMS
<a name="CHAP_Source.DB2.ConnectionAttrib"></a>

您可以在使用 AWS DMS 主控台建立來源端點時指定額外連線屬性 (ECAs)，或使用 中的 `create-endpoint`命令[AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/create-endpoint.html)搭配

`--extra-connection-attributes 'ECAname1=value1;ECAname2=value2;'`

下表顯示您可以搭配 Db2 LUW 做為來源使用的 ECAs。


| 屬性名稱 | 描述 | 
| --- | --- | 
|  `ConnectionTimeout`  |  使用此 ECA 設定 Db2 LUW 端點的端點連線逾時，以秒為單位。預設值為 10 秒。 範例：`ConnectionTimeout=30;`  | 
|  `executeTimeout`  |  設定 DB2 LUW 端點陳述式 （查詢） 逾時的額外連線屬性，以秒為單位。預設值為 60 秒。 範例：`executeTimeout=120;`  | 
|  `StartFromContext`  |  對於進行中複寫 (CDC)，使用 `StartFromContext` 指定開始複寫的日誌下限。`StartFromContext` 會接受不同形式的值。有效值包含： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/dms/latest/userguide/CHAP_Source.DB2.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/dms/latest/userguide/CHAP_Source.DB2.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/dms/latest/userguide/CHAP_Source.DB2.html) 若要判斷日誌檔的 LRI/LSN 範圍，請如以下範例所示，執行 `db2flsn` 命令。 <pre>db2flsn -db SAMPLE -lrirange 2</pre> 範例中的輸出與以下內容類似。 <pre><br />S0000002.LOG: has LRI range 00000000000000010000000000002254000000000004F9A6 to <br />000000000000000100000000000022CC000000000004FB13</pre> 在該輸出中，日誌檔案是 S0000002.LOG，而 **StartFromContext** LRI 值是在該範圍結尾的 34 個位元組。 <pre>0100000000000022CC000000000004FB13</pre>  | 

## IBM Db2 LUW 的來源資料類型
<a name="CHAP_Source.DB2.DataTypes"></a>

使用 Db2 LUW 做為 來源的資料遷移 AWS DMS 支援大多數 Db2 LUW 資料類型。下表顯示使用 時支援的 Db2 LUW 來源資料類型， AWS DMS 以及來自 AWS DMS 資料類型的預設映射。如需 Db2 LUW 資料類型的詳細資訊，請參閱 [Db2 LUW 文件](https://www.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.sql.ref.doc/doc/r0008483.html)。

如需如何檢視從目標映射的資料類型資訊，請參閱您要使用的目標端點一節。

如需 AWS DMS 資料類型的詳細資訊，請參閱 [AWS Database Migration Service 的資料類型](CHAP_Reference.DataTypes.md)。


|  Db2 LUW 資料類型  |  AWS DMS 資料類型  | 
| --- | --- | 
|  INTEGER  |  INT4  | 
|  SMALLINT  |  INT2  | 
|  BIGINT  |  INT8  | 
|  DECIMAL (p,s)  |  NUMERIC (p,s)  | 
|  FLOAT  |  REAL8  | 
|  DOUBLE  |  REAL8  | 
|  REAL  |  REAL4  | 
|  DECFLOAT (p)  |  如果精確度是 16，則是 REAL8；如果精確度是 34，則是 STRING  | 
|  圖像 (n)  |  WSTRING，適用於長度大於 0 與小於或等於 127 的雙倍位元組字元的固定長度圖片字串  | 
|  VARGRAPHIC (n)  |  WSTRING，適用於長度大於 0 與小於或等於 16,352 的雙倍位元組字元的變動長度圖片字串  | 
|  LONG VARGRAPHIC (n)  |  CLOB，適用於長度大於 0 與小於或等於 16,352 的雙倍位元組字元的變動長度圖片字串  | 
|  CHARACTER (n)  |  STRING，適用於長度大於 0 與小於或等於 255 的雙倍位元組字元的固定長度字串  | 
|  VARCHAR (n)  |  STRING，適用於長度大於 0 與小於或等於 32,704 的雙倍位元組字元的變動長度字串  | 
|  LONG VARCHAR (n)  |  CLOB，適用於長度大於 0 與小於或等於 32,704 的雙倍位元組字元的變動長度字串  | 
|  CHAR (n) FOR BIT DATA  |  BYTES  | 
|  VARCHAR (n) FOR BIT DATA  |  BYTES  | 
|  LONG VARCHAR FOR BIT DATA  |  BYTES  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  TIMESTAMP  |  DATETIME  | 
|  BLOB(n)  |  BLOB 長度上限為 2,147,483,647 個位元組  | 
|  CLOB(n)  |  CLOB 長度上限為 2,147,483,647 個位元組  | 
|  DBCLOB (n)  |  CLOB 最大長度是 1,073,741,824 個雙位元組字元  | 
|  XML  |  CLOB  | 

# 針對 z/OS 資料庫使用 IBM Db2 做為 的來源 AWS DMS
<a name="CHAP_Source.DB2zOS"></a>

您可以使用 AWS Database Migration Service (AWS DMS)，將資料從 IBM for z/OS 資料庫遷移至任何支援的目標資料庫。

如需 AWS DMS 支援 做為來源的 z/OS 的 Db2 版本資訊，請參閱 [的來源 AWS DMS](CHAP_Introduction.Sources.md)。

## 使用 Db2 for z/OS 做為 來源時的先決條件 AWS DMS
<a name="CHAP_Source.DB2zOS.Prerequisites"></a>

若要使用 IBM Db2 for z/OS 資料庫做為來源 AWS DMS，請將下列權限授予來源端點連線設定中指定的 Db2 for z/OS 使用者。

```
GRANT SELECT ON SYSIBM.SYSTABLES TO Db2USER;
GRANT SELECT ON SYSIBM.SYSTABLESPACE TO Db2USER;
GRANT SELECT ON SYSIBM.SYSTABLEPART TO Db2USER;                    
GRANT SELECT ON SYSIBM.SYSCOLUMNS TO Db2USER;
GRANT SELECT ON SYSIBM.SYSDATABASE TO Db2USER;
GRANT SELECT ON SYSIBM.SYSDUMMY1 TO Db2USER
```

同時授予 SELECT ON `user defined` 來源資料表。

z/OS 來源端點的 AWS DMS IBM Db2 依賴 ODBC 的 IBM Data Server 驅動程式來存取資料。資料庫伺服器必須具有有效的 IBM ODBC Connect 授權，DMS 才能連線到此端點。

## 針對 z/OS 使用 Db2 做為 來源的限制 AWS DMS
<a name="CHAP_Source.DB2zOS.Limitations"></a>

使用 IBM Db2 for z/OS 資料庫作為 AWS DMS來源時，有下列限制：
+ 僅支援完全載入複寫任務。不支援變更資料擷取 (CDC)。
+ 不支援平行載入。
+ 不支援檢視的資料驗證。
+ 在資料欄/資料表層級轉換和資料列層級選擇篩選條件的資料表對應中，必須使用大寫指定結構描述、資料表和資料欄名稱。

## IBM Db2 for z/OS 的來源資料類型
<a name="CHAP_Source.DB2zOS.DataTypes"></a>

使用 Db2 for z/OS 做為 AWS DMS 支援大多數 Db2 for z/OS 資料類型來源的資料遷移。下表顯示使用 時支援的 z/OS 來源資料類型的 Db2 AWS DMS，以及來自 AWS DMS 資料類型的預設映射。

如需 Db2 for z/OS 資料類型的詳細資訊，請參閱 [IBM Db2 for z/OS 文件](https://www.ibm.com/docs/en/db2-for-zos/12?topic=elements-data-types)。

如需如何檢視從目標映射的資料類型資訊，請參閱您要使用的目標端點一節。

如需 AWS DMS 資料類型的詳細資訊，請參閱 [AWS Database Migration Service 的資料類型](CHAP_Reference.DataTypes.md)。


|  Db2 for z/OS 資料類型  |  AWS DMS 資料類型  | 
| --- | --- | 
|  INTEGER  |  INT4  | 
|  SMALLINT  |  INT2  | 
|  BIGINT  |  INT8  | 
|  DECIMAL (p,s)  |  NUMERIC (p,s) 如果將 DB2 組態中的小數點設定為逗號 (,)，請設定「複寫」以支援 DB2 設定。  | 
|  FLOAT  |  REAL8  | 
|  DOUBLE  |  REAL8  | 
|  REAL  |  REAL4  | 
|  DECFLOAT (p)  |  如果精確度是 16，則是 REAL8；如果精確度是 34，則是 STRING  | 
|  圖像 (n)  |  如果 n>=127，則 WSTRING，適用於長度大於 0 與小於或等於 127 的雙位元組字元的固定長度圖形字串  | 
|  VARGRAPHIC (n)  |  WSTRING，適用於長度大於 0 與小於或等於 16,352 的雙倍位元組字元的變動長度圖片字串  | 
|  LONG VARGRAPHIC (n)  |  CLOB，適用於長度大於 0 與小於或等於 16,352 的雙倍位元組字元的變動長度圖片字串  | 
|  CHARACTER (n)  |  STRING，適用於長度大於 0 與小於或等於 255 的雙倍位元組字元的固定長度字串  | 
|  VARCHAR (n)  |  STRING，適用於長度大於 0 與小於或等於 32,704 的雙倍位元組字元的變動長度字串  | 
|  LONG VARCHAR (n)  |  CLOB，適用於長度大於 0 與小於或等於 32,704 的雙倍位元組字元的變動長度字串  | 
|  CHAR (n) FOR BIT DATA  |  BYTES  | 
|  VARCHAR (n) FOR BIT DATA  |  BYTES  | 
|  LONG VARCHAR FOR BIT DATA  |  BYTES  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  TIMESTAMP  |  DATETIME  | 
|  BLOB(n)  |  BLOB 長度上限為 2,147,483,647 個位元組  | 
|  CLOB(n)  |  CLOB 長度上限為 2,147,483,647 個位元組  | 
|  DBCLOB (n)  |  CLOB 最大長度是 1,073,741,824 個雙位元組字元  | 
|  XML  |  CLOB  | 
|  BINARY  |  BYTES  | 
|  VARBINARY  |  BYTES  | 
|  ROWID  |  BYTES。如需使用 ROWID 的詳細資訊，請參閱下列內容。  | 
|  TIMESTAMP WITH TIME ZONE  |  不支援。  | 

當任務的目標資料表準備模式設為 DROP\$1AND\$1CREATE (預設值) 時，依預設會遷移 ROWID 資料欄。資料驗證會忽略這些這些欄，因為資料列在特定資料庫和資料表之外是沒有意義的。若要關閉這些資料欄的遷移，您可以執行下列其中一項準備步驟：
+ 預先建立不含這些資料欄的目標資料表。然後，將任務的目標資料表準備模式設定為「DO\$1NOTHING」或「TRUNCATE\$1BEFORE\$1LOAD」。您可以使用 AWS Schema Conversion Tool (AWS SCT) 預先建立不含資料欄的目標資料表。
+ 在任務中新增資料表對應規則，以篩選掉這些資料欄，如此就可忽略這些資料欄。如需詳細資訊，請參閱[轉換規則與動作](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md)。

## PostgreSQL for AWS Mainframe Modernization 服務中的 EBCDIC 定序
<a name="CHAP_Source.DB2zOS.EBCDIC"></a>

AWS Mainframe Modernization 計畫可協助您將大型主機應用程式現代化為 AWS 受管執行期環境。其提供工具和資源來協助您規劃和實作遷移和現代化專案。如需大型主機現代化和遷移的詳細資訊，請參閱[使用大型主機現代化 AWS](https://aws.amazon.com/mainframe/)。

會使用延伸二進位編碼十進位交換 (EBCDIC) 字元集，對某些 IBM Db2 for z/OS 資料集進行編碼。這是在 ASCII (美國資訊交換標準代碼) 普遍使用之前開發的字元集。*字碼頁*會將文字的每個字元對應至字元集中的字元。傳統字碼頁包含代碼點和字元 ID 之間的對應資訊。*字元 ID* 是 8 位元組字元資料字串。*代碼點*是代表一個字元的 8 位元二進位數字。代碼點通常顯示為其二進位值的十六進位表示。

如果您目前使用 Mainframe Modernization 服務的 Micro Focus 或 BluAge 元件，您必須告知 AWS DMS *轉移* （翻譯） 特定程式碼點。您可以使用 AWS DMS 任務設定來執行輪班。下列範例示範如何使用 AWS DMS `CharacterSetSettings`操作來映射 DMS 任務設定中的輪班。

```
"CharacterSetSettings": {
        "CharacterSetSupport": null,
        "CharacterReplacements": [
{"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0178"}
            }
        ]
    }
```

PostgreSQL 已經存在一些 EBCDIC 定序，可了解所需的轉移。支援幾個不同的字碼頁。以下各節提供 JSON 範例，說明您必須在所有受支援的字碼頁中轉移的項目。您可以簡單地複製與貼上 DMS 任務中所需的必要 JSON。

### Micro Focus 特定的 EBCDIC 定序
<a name="CHAP_Source.DB2zOS.EBCDIC.MicroFocus"></a>

對於 Micro Focus，請根據需要轉移字元子集以進行下列定序。

```
 da-DK-cp1142m-x-icu
 de-DE-cp1141m-x-icu
 en-GB-cp1146m-x-icu
 en-US-cp1140m-x-icu
 es-ES-cp1145m-x-icu
 fi-FI-cp1143m-x-icu
 fr-FR-cp1147m-x-icu
 it-IT-cp1144m-x-icu
 nl-BE-cp1148m-x-icu
```

**Example 每個定序的 Micro Focus 資料轉移：**  
**en\$1us\$1cp1140m**  
程式碼轉移：  

```
0000    0180
00A6    0160
00B8    0161
00BC    017D
00BD    017E
00BE    0152
00A8    0153
00B4    0178
```
 AWS DMS 任務對應的輸入映射：  

```
 {"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0178"}
```
**en\$1us\$1cp1141m**  
程式碼轉移：  

```
0000    0180
00B8    0160
00BC    0161
00BD    017D
00BE    017E
00A8    0152
00B4    0153
00A6    0178
```
 AWS DMS 任務對應的輸入映射：  

```
 {"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0178"}
```
**en\$1us\$1cp1142m**  
程式碼轉移：  

```
0000    0180
00A6    0160
00B8    0161
00BC    017D
00BD    017E
00BE    0152
00A8    0153
00B4    0178
```
 AWS DMS 任務對應的輸入映射：  

```
 {"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0178"}
```
**en\$1us\$1cp1143m**  
程式碼轉移：  

```
0000    0180
00B8    0160
00BC    0161
00BD    017D
00BE    017E
00A8    0152
00B4    0153
00A6    0178
```
 AWS DMS 任務對應的輸入映射：  

```
 {"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0178"}
```
**en\$1us\$1cp1144m**  
程式碼轉移：  

```
0000    0180
00B8    0160
00BC    0161
00BD    017D
00BE    017E
00A8    0152
00B4    0153
00A6    0178
```
 AWS DMS 任務對應的輸入映射：  

```
 {"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0178"}
```
**en\$1us\$1cp1145m**  
程式碼轉移：  

```
0000    0180
00A6    0160
00B8    0161
00A8    017D
00BC    017E
00BD    0152
00BE    0153
00B4    0178
```
 AWS DMS 任務對應的輸入映射：  

```
 {"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0178"}
```
**en\$1us\$1cp1146m**  
程式碼轉移：  

```
0000    0180
00A6    0160
00B8    0161
00BC    017D
00BD    017E
00BE    0152
00A8    0153
00B4    0178
```
 AWS DMS 任務對應的輸入映射：  

```
 {"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0178"}
```
**en\$1us\$1cp1147m**  
程式碼轉移：  

```
0000    0180
00B8    0160
00A8    0161
00BC    017D
00BD    017E
00BE    0152
00B4    0153
00A6    0178
```
 AWS DMS 任務對應的輸入映射：  

```
 {"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0178"}
```
**en\$1us\$1cp1148m**  
程式碼轉移：  

```
0000    0180
00A6    0160
00B8    0161
00BC    017D
00BD    017E
00BE    0152
00A8    0153
00B4    0178
```
 AWS DMS 任務對應的輸入映射：  

```
 {"SourceCharacterCodePoint": "0000","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "00A6","TargetCharacterCodePoint": "0160"}
,{"SourceCharacterCodePoint": "00B8","TargetCharacterCodePoint": "0161"}
,{"SourceCharacterCodePoint": "00BC","TargetCharacterCodePoint": "017D"}
,{"SourceCharacterCodePoint": "00BD","TargetCharacterCodePoint": "017E"}
,{"SourceCharacterCodePoint": "00BE","TargetCharacterCodePoint": "0152"}
,{"SourceCharacterCodePoint": "00A8","TargetCharacterCodePoint": "0153"}
,{"SourceCharacterCodePoint": "00B4","TargetCharacterCodePoint": "0178"}
```

### BluAge 特定的 EBCDIC 定序
<a name="CHAP_Source.DB2zOS.EBCDIC.BluAge"></a>

對於 BluAge，請根據需要轉移以下所有*低值*和*高值*。這些定序只能用來支援 Mainframe Migration BluAge 服務。

```
da-DK-cp1142b-x-icu
 da-DK-cp277b-x-icu
 de-DE-cp1141b-x-icu
 de-DE-cp273b-x-icu
 en-GB-cp1146b-x-icu
 en-GB-cp285b-x-icu
 en-US-cp037b-x-icu
 en-US-cp1140b-x-icu
 es-ES-cp1145b-x-icu
 es-ES-cp284b-x-icu
 fi-FI-cp1143b-x-icu
 fi-FI-cp278b-x-icu 
 fr-FR-cp1147b-x-icu
 fr-FR-cp297b-x-icu
 it-IT-cp1144b-x-icu
 it-IT-cp280b-x-icu
 nl-BE-cp1148b-x-icu
 nl-BE-cp500b-x-icu
```

**Example BluAge 資料轉移：**  
**da-DK-cp277b** 和 **da-DK-cp1142b**  
程式碼轉移：  

```
0180    0180
0001    0181
0002    0182
0003    0183
009C    0184
0009    0185
0086    0186
007F    0187
0097    0188
008D    0189
008E    018A
000B    018B
000C    018C
000D    018D
000E    018E
000F    018F
0010    0190
0011    0191
0012    0192
0013    0193
009D    0194
0085    0195
0008    0196
0087    0197
0018    0198
0019    0199
0092    019A
008F    019B
001C    019C
001D    019D
001E    019E
001F    019F
0080    01A0
0081    01A1
0082    01A2
0083    01A3
0084    01A4
000A    01A5
0017    01A6
001B    01A7
0088    01A8
0089    01A9
008A    01AA
008B    01AB
008C    01AC
0005    01AD
0006    01AE
0007    01AF
0090    01B0
0091    01B1
0016    01B2
0093    01B3
0094    01B4
0095    01B5
0096    01B6
0004    01B7
0098    01B8
0099    01B9
009A    01BA
009B    01BB
0014    01BC
0015    01BD
009E    01BE
001A    01BF
009F    027F
```
 AWS DMS 任務對應的輸入映射：  

```
 {"SourceCharacterCodePoint": "0180","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "0001","TargetCharacterCodePoint": "0181"}
,{"SourceCharacterCodePoint": "0002","TargetCharacterCodePoint": "0182"}
,{"SourceCharacterCodePoint": "0003","TargetCharacterCodePoint": "0183"}
,{"SourceCharacterCodePoint": "009C","TargetCharacterCodePoint": "0184"}
,{"SourceCharacterCodePoint": "0009","TargetCharacterCodePoint": "0185"}
,{"SourceCharacterCodePoint": "0086","TargetCharacterCodePoint": "0186"}
,{"SourceCharacterCodePoint": "007F","TargetCharacterCodePoint": "0187"}
,{"SourceCharacterCodePoint": "0097","TargetCharacterCodePoint": "0188"}
,{"SourceCharacterCodePoint": "008D","TargetCharacterCodePoint": "0189"}
,{"SourceCharacterCodePoint": "008E","TargetCharacterCodePoint": "018A"}
,{"SourceCharacterCodePoint": "000B","TargetCharacterCodePoint": "018B"}
,{"SourceCharacterCodePoint": "000C","TargetCharacterCodePoint": "018C"}
,{"SourceCharacterCodePoint": "000D","TargetCharacterCodePoint": "018D"}
,{"SourceCharacterCodePoint": "000E","TargetCharacterCodePoint": "018E"}
,{"SourceCharacterCodePoint": "000F","TargetCharacterCodePoint": "018F"}
,{"SourceCharacterCodePoint": "0010","TargetCharacterCodePoint": "0190"}
,{"SourceCharacterCodePoint": "0011","TargetCharacterCodePoint": "0191"}
,{"SourceCharacterCodePoint": "0012","TargetCharacterCodePoint": "0192"}
,{"SourceCharacterCodePoint": "0013","TargetCharacterCodePoint": "0193"}
,{"SourceCharacterCodePoint": "009D","TargetCharacterCodePoint": "0194"}
,{"SourceCharacterCodePoint": "0085","TargetCharacterCodePoint": "0195"}
,{"SourceCharacterCodePoint": "0008","TargetCharacterCodePoint": "0196"}
,{"SourceCharacterCodePoint": "0087","TargetCharacterCodePoint": "0197"}
,{"SourceCharacterCodePoint": "0018","TargetCharacterCodePoint": "0198"}
,{"SourceCharacterCodePoint": "0019","TargetCharacterCodePoint": "0199"}
,{"SourceCharacterCodePoint": "0092","TargetCharacterCodePoint": "019A"}
,{"SourceCharacterCodePoint": "008F","TargetCharacterCodePoint": "019B"}
,{"SourceCharacterCodePoint": "001C","TargetCharacterCodePoint": "019C"}
,{"SourceCharacterCodePoint": "001D","TargetCharacterCodePoint": "019D"}
,{"SourceCharacterCodePoint": "001E","TargetCharacterCodePoint": "019E"}
,{"SourceCharacterCodePoint": "001F","TargetCharacterCodePoint": "019F"}
,{"SourceCharacterCodePoint": "0080","TargetCharacterCodePoint": "01A0"}
,{"SourceCharacterCodePoint": "0081","TargetCharacterCodePoint": "01A1"}
,{"SourceCharacterCodePoint": "0082","TargetCharacterCodePoint": "01A2"}
,{"SourceCharacterCodePoint": "0083","TargetCharacterCodePoint": "01A3"}
,{"SourceCharacterCodePoint": "0084","TargetCharacterCodePoint": "01A4"}
,{"SourceCharacterCodePoint": "000A","TargetCharacterCodePoint": "01A5"}
,{"SourceCharacterCodePoint": "0017","TargetCharacterCodePoint": "01A6"}
,{"SourceCharacterCodePoint": "001B","TargetCharacterCodePoint": "01A7"}
,{"SourceCharacterCodePoint": "0088","TargetCharacterCodePoint": "01A8"}
,{"SourceCharacterCodePoint": "0089","TargetCharacterCodePoint": "01A9"}
,{"SourceCharacterCodePoint": "008A","TargetCharacterCodePoint": "01AA"}
,{"SourceCharacterCodePoint": "008B","TargetCharacterCodePoint": "01AB"}
,{"SourceCharacterCodePoint": "008C","TargetCharacterCodePoint": "01AC"}
,{"SourceCharacterCodePoint": "0005","TargetCharacterCodePoint": "01AD"}
,{"SourceCharacterCodePoint": "0006","TargetCharacterCodePoint": "01AE"}
,{"SourceCharacterCodePoint": "0007","TargetCharacterCodePoint": "01AF"}
,{"SourceCharacterCodePoint": "0090","TargetCharacterCodePoint": "01B0"}
,{"SourceCharacterCodePoint": "0091","TargetCharacterCodePoint": "01B1"}
,{"SourceCharacterCodePoint": "0016","TargetCharacterCodePoint": "01B2"}
,{"SourceCharacterCodePoint": "0093","TargetCharacterCodePoint": "01B3"}
,{"SourceCharacterCodePoint": "0094","TargetCharacterCodePoint": "01B4"}
,{"SourceCharacterCodePoint": "0095","TargetCharacterCodePoint": "01B5"}
,{"SourceCharacterCodePoint": "0096","TargetCharacterCodePoint": "01B6"}
,{"SourceCharacterCodePoint": "0004","TargetCharacterCodePoint": "01B7"}
,{"SourceCharacterCodePoint": "0098","TargetCharacterCodePoint": "01B8"}
,{"SourceCharacterCodePoint": "0099","TargetCharacterCodePoint": "01B9"}
,{"SourceCharacterCodePoint": "009A","TargetCharacterCodePoint": "01BA"}
,{"SourceCharacterCodePoint": "009B","TargetCharacterCodePoint": "01BB"}
,{"SourceCharacterCodePoint": "0014","TargetCharacterCodePoint": "01BC"}
,{"SourceCharacterCodePoint": "0015","TargetCharacterCodePoint": "01BD"}
,{"SourceCharacterCodePoint": "009E","TargetCharacterCodePoint": "01BE"}
,{"SourceCharacterCodePoint": "001A","TargetCharacterCodePoint": "01BF"}
,{"SourceCharacterCodePoint": "009F","TargetCharacterCodePoint": "027F"}
```
**de-DE-273b** 和 **de-DE-1141b**  
程式碼轉移：  

```
0180    0180
0001    0181
0002    0182
0003    0183
009C    0184
0009    0185
0086    0186
007F    0187
0097    0188
008D    0189
008E    018A
000B    018B
000C    018C
000D    018D
000E    018E
000F    018F
0010    0190
0011    0191
0012    0192
0013    0193
009D    0194
0085    0195
0008    0196
0087    0197
0018    0198
0019    0199
0092    019A
008F    019B
001C    019C
001D    019D
001E    019E
001F    019F
0080    01A0
0081    01A1
0082    01A2
0083    01A3
0084    01A4
000A    01A5
0017    01A6
001B    01A7
0088    01A8
0089    01A9
008A    01AA
008B    01AB
008C    01AC
0005    01AD
0006    01AE
0007    01AF
0090    01B0
0091    01B1
0016    01B2
0093    01B3
0094    01B4
0095    01B5
0096    01B6
0004    01B7
0098    01B8
0099    01B9
009A    01BA
009B    01BB
0014    01BC
0015    01BD
009E    01BE
001A    01BF
009F    027F
```
 AWS DMS 任務對應的輸入映射：  

```
 {"SourceCharacterCodePoint": "0180","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "0001","TargetCharacterCodePoint": "0181"}
,{"SourceCharacterCodePoint": "0002","TargetCharacterCodePoint": "0182"}
,{"SourceCharacterCodePoint": "0003","TargetCharacterCodePoint": "0183"}
,{"SourceCharacterCodePoint": "009C","TargetCharacterCodePoint": "0184"}
,{"SourceCharacterCodePoint": "0009","TargetCharacterCodePoint": "0185"}
,{"SourceCharacterCodePoint": "0086","TargetCharacterCodePoint": "0186"}
,{"SourceCharacterCodePoint": "007F","TargetCharacterCodePoint": "0187"}
,{"SourceCharacterCodePoint": "0097","TargetCharacterCodePoint": "0188"}
,{"SourceCharacterCodePoint": "008D","TargetCharacterCodePoint": "0189"}
,{"SourceCharacterCodePoint": "008E","TargetCharacterCodePoint": "018A"}
,{"SourceCharacterCodePoint": "000B","TargetCharacterCodePoint": "018B"}
,{"SourceCharacterCodePoint": "000C","TargetCharacterCodePoint": "018C"}
,{"SourceCharacterCodePoint": "000D","TargetCharacterCodePoint": "018D"}
,{"SourceCharacterCodePoint": "000E","TargetCharacterCodePoint": "018E"}
,{"SourceCharacterCodePoint": "000F","TargetCharacterCodePoint": "018F"}
,{"SourceCharacterCodePoint": "0010","TargetCharacterCodePoint": "0190"}
,{"SourceCharacterCodePoint": "0011","TargetCharacterCodePoint": "0191"}
,{"SourceCharacterCodePoint": "0012","TargetCharacterCodePoint": "0192"}
,{"SourceCharacterCodePoint": "0013","TargetCharacterCodePoint": "0193"}
,{"SourceCharacterCodePoint": "009D","TargetCharacterCodePoint": "0194"}
,{"SourceCharacterCodePoint": "0085","TargetCharacterCodePoint": "0195"}
,{"SourceCharacterCodePoint": "0008","TargetCharacterCodePoint": "0196"}
,{"SourceCharacterCodePoint": "0087","TargetCharacterCodePoint": "0197"}
,{"SourceCharacterCodePoint": "0018","TargetCharacterCodePoint": "0198"}
,{"SourceCharacterCodePoint": "0019","TargetCharacterCodePoint": "0199"}
,{"SourceCharacterCodePoint": "0092","TargetCharacterCodePoint": "019A"}
,{"SourceCharacterCodePoint": "008F","TargetCharacterCodePoint": "019B"}
,{"SourceCharacterCodePoint": "001C","TargetCharacterCodePoint": "019C"}
,{"SourceCharacterCodePoint": "001D","TargetCharacterCodePoint": "019D"}
,{"SourceCharacterCodePoint": "001E","TargetCharacterCodePoint": "019E"}
,{"SourceCharacterCodePoint": "001F","TargetCharacterCodePoint": "019F"}
,{"SourceCharacterCodePoint": "0080","TargetCharacterCodePoint": "01A0"}
,{"SourceCharacterCodePoint": "0081","TargetCharacterCodePoint": "01A1"}
,{"SourceCharacterCodePoint": "0082","TargetCharacterCodePoint": "01A2"}
,{"SourceCharacterCodePoint": "0083","TargetCharacterCodePoint": "01A3"}
,{"SourceCharacterCodePoint": "0084","TargetCharacterCodePoint": "01A4"}
,{"SourceCharacterCodePoint": "000A","TargetCharacterCodePoint": "01A5"}
,{"SourceCharacterCodePoint": "0017","TargetCharacterCodePoint": "01A6"}
,{"SourceCharacterCodePoint": "001B","TargetCharacterCodePoint": "01A7"}
,{"SourceCharacterCodePoint": "0088","TargetCharacterCodePoint": "01A8"}
,{"SourceCharacterCodePoint": "0089","TargetCharacterCodePoint": "01A9"}
,{"SourceCharacterCodePoint": "008A","TargetCharacterCodePoint": "01AA"}
,{"SourceCharacterCodePoint": "008B","TargetCharacterCodePoint": "01AB"}
,{"SourceCharacterCodePoint": "008C","TargetCharacterCodePoint": "01AC"}
,{"SourceCharacterCodePoint": "0005","TargetCharacterCodePoint": "01AD"}
,{"SourceCharacterCodePoint": "0006","TargetCharacterCodePoint": "01AE"}
,{"SourceCharacterCodePoint": "0007","TargetCharacterCodePoint": "01AF"}
,{"SourceCharacterCodePoint": "0090","TargetCharacterCodePoint": "01B0"}
,{"SourceCharacterCodePoint": "0091","TargetCharacterCodePoint": "01B1"}
,{"SourceCharacterCodePoint": "0016","TargetCharacterCodePoint": "01B2"}
,{"SourceCharacterCodePoint": "0093","TargetCharacterCodePoint": "01B3"}
,{"SourceCharacterCodePoint": "0094","TargetCharacterCodePoint": "01B4"}
,{"SourceCharacterCodePoint": "0095","TargetCharacterCodePoint": "01B5"}
,{"SourceCharacterCodePoint": "0096","TargetCharacterCodePoint": "01B6"}
,{"SourceCharacterCodePoint": "0004","TargetCharacterCodePoint": "01B7"}
,{"SourceCharacterCodePoint": "0098","TargetCharacterCodePoint": "01B8"}
,{"SourceCharacterCodePoint": "0099","TargetCharacterCodePoint": "01B9"}
,{"SourceCharacterCodePoint": "009A","TargetCharacterCodePoint": "01BA"}
,{"SourceCharacterCodePoint": "009B","TargetCharacterCodePoint": "01BB"}
,{"SourceCharacterCodePoint": "0014","TargetCharacterCodePoint": "01BC"}
,{"SourceCharacterCodePoint": "0015","TargetCharacterCodePoint": "01BD"}
,{"SourceCharacterCodePoint": "009E","TargetCharacterCodePoint": "01BE"}
,{"SourceCharacterCodePoint": "001A","TargetCharacterCodePoint": "01BF"}
,{"SourceCharacterCodePoint": "009F","TargetCharacterCodePoint": "027F"}
```
**en-GB-285b** 和 **en-GB-1146b**  
程式碼轉移：  

```
0180    0180
0001    0181
0002    0182
0003    0183
009C    0184
0009    0185
0086    0186
007F    0187
0097    0188
008D    0189
008E    018A
000B    018B
000C    018C
000D    018D
000E    018E
000F    018F
0010    0190
0011    0191
0012    0192
0013    0193
009D    0194
0085    0195
0008    0196
0087    0197
0018    0198
0019    0199
0092    019A
008F    019B
001C    019C
001D    019D
001E    019E
001F    019F
0080    01A0
0081    01A1
0082    01A2
0083    01A3
0084    01A4
000A    01A5
0017    01A6
001B    01A7
0088    01A8
0089    01A9
008A    01AA
008B    01AB
008C    01AC
0005    01AD
0006    01AE
0007    01AF
0090    01B0
0091    01B1
0016    01B2
0093    01B3
0094    01B4
0095    01B5
0096    01B6
0004    01B7
0098    01B8
0099    01B9
009A    01BA
009B    01BB
0014    01BC
0015    01BD
009E    01BE
001A    01BF
009F    027F
```
 AWS DMS 任務對應的輸入映射：  

```
{"SourceCharacterCodePoint": "0180","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "0001","TargetCharacterCodePoint": "0181"}
,{"SourceCharacterCodePoint": "0002","TargetCharacterCodePoint": "0182"}
,{"SourceCharacterCodePoint": "0003","TargetCharacterCodePoint": "0183"}
,{"SourceCharacterCodePoint": "009C","TargetCharacterCodePoint": "0184"}
,{"SourceCharacterCodePoint": "0009","TargetCharacterCodePoint": "0185"}
,{"SourceCharacterCodePoint": "0086","TargetCharacterCodePoint": "0186"}
,{"SourceCharacterCodePoint": "007F","TargetCharacterCodePoint": "0187"}
,{"SourceCharacterCodePoint": "0097","TargetCharacterCodePoint": "0188"}
,{"SourceCharacterCodePoint": "008D","TargetCharacterCodePoint": "0189"}
,{"SourceCharacterCodePoint": "008E","TargetCharacterCodePoint": "018A"}
,{"SourceCharacterCodePoint": "000B","TargetCharacterCodePoint": "018B"}
,{"SourceCharacterCodePoint": "000C","TargetCharacterCodePoint": "018C"}
,{"SourceCharacterCodePoint": "000D","TargetCharacterCodePoint": "018D"}
,{"SourceCharacterCodePoint": "000E","TargetCharacterCodePoint": "018E"}
,{"SourceCharacterCodePoint": "000F","TargetCharacterCodePoint": "018F"}
,{"SourceCharacterCodePoint": "0010","TargetCharacterCodePoint": "0190"}
,{"SourceCharacterCodePoint": "0011","TargetCharacterCodePoint": "0191"}
,{"SourceCharacterCodePoint": "0012","TargetCharacterCodePoint": "0192"}
,{"SourceCharacterCodePoint": "0013","TargetCharacterCodePoint": "0193"}
,{"SourceCharacterCodePoint": "009D","TargetCharacterCodePoint": "0194"}
,{"SourceCharacterCodePoint": "0085","TargetCharacterCodePoint": "0195"}
,{"SourceCharacterCodePoint": "0008","TargetCharacterCodePoint": "0196"}
,{"SourceCharacterCodePoint": "0087","TargetCharacterCodePoint": "0197"}
,{"SourceCharacterCodePoint": "0018","TargetCharacterCodePoint": "0198"}
,{"SourceCharacterCodePoint": "0019","TargetCharacterCodePoint": "0199"}
,{"SourceCharacterCodePoint": "0092","TargetCharacterCodePoint": "019A"}
,{"SourceCharacterCodePoint": "008F","TargetCharacterCodePoint": "019B"}
,{"SourceCharacterCodePoint": "001C","TargetCharacterCodePoint": "019C"}
,{"SourceCharacterCodePoint": "001D","TargetCharacterCodePoint": "019D"}
,{"SourceCharacterCodePoint": "001E","TargetCharacterCodePoint": "019E"}
,{"SourceCharacterCodePoint": "001F","TargetCharacterCodePoint": "019F"}
,{"SourceCharacterCodePoint": "0080","TargetCharacterCodePoint": "01A0"}
,{"SourceCharacterCodePoint": "0081","TargetCharacterCodePoint": "01A1"}
,{"SourceCharacterCodePoint": "0082","TargetCharacterCodePoint": "01A2"}
,{"SourceCharacterCodePoint": "0083","TargetCharacterCodePoint": "01A3"}
,{"SourceCharacterCodePoint": "0084","TargetCharacterCodePoint": "01A4"}
,{"SourceCharacterCodePoint": "000A","TargetCharacterCodePoint": "01A5"}
,{"SourceCharacterCodePoint": "0017","TargetCharacterCodePoint": "01A6"}
,{"SourceCharacterCodePoint": "001B","TargetCharacterCodePoint": "01A7"}
,{"SourceCharacterCodePoint": "0088","TargetCharacterCodePoint": "01A8"}
,{"SourceCharacterCodePoint": "0089","TargetCharacterCodePoint": "01A9"}
,{"SourceCharacterCodePoint": "008A","TargetCharacterCodePoint": "01AA"}
,{"SourceCharacterCodePoint": "008B","TargetCharacterCodePoint": "01AB"}
,{"SourceCharacterCodePoint": "008C","TargetCharacterCodePoint": "01AC"}
,{"SourceCharacterCodePoint": "0005","TargetCharacterCodePoint": "01AD"}
,{"SourceCharacterCodePoint": "0006","TargetCharacterCodePoint": "01AE"}
,{"SourceCharacterCodePoint": "0007","TargetCharacterCodePoint": "01AF"}
,{"SourceCharacterCodePoint": "0090","TargetCharacterCodePoint": "01B0"}
,{"SourceCharacterCodePoint": "0091","TargetCharacterCodePoint": "01B1"}
,{"SourceCharacterCodePoint": "0016","TargetCharacterCodePoint": "01B2"}
,{"SourceCharacterCodePoint": "0093","TargetCharacterCodePoint": "01B3"}
,{"SourceCharacterCodePoint": "0094","TargetCharacterCodePoint": "01B4"}
,{"SourceCharacterCodePoint": "0095","TargetCharacterCodePoint": "01B5"}
,{"SourceCharacterCodePoint": "0096","TargetCharacterCodePoint": "01B6"}
,{"SourceCharacterCodePoint": "0004","TargetCharacterCodePoint": "01B7"}
,{"SourceCharacterCodePoint": "0098","TargetCharacterCodePoint": "01B8"}
,{"SourceCharacterCodePoint": "0099","TargetCharacterCodePoint": "01B9"}
,{"SourceCharacterCodePoint": "009A","TargetCharacterCodePoint": "01BA"}
,{"SourceCharacterCodePoint": "009B","TargetCharacterCodePoint": "01BB"}
,{"SourceCharacterCodePoint": "0014","TargetCharacterCodePoint": "01BC"}
,{"SourceCharacterCodePoint": "0015","TargetCharacterCodePoint": "01BD"}
,{"SourceCharacterCodePoint": "009E","TargetCharacterCodePoint": "01BE"}
,{"SourceCharacterCodePoint": "001A","TargetCharacterCodePoint": "01BF"}
,{"SourceCharacterCodePoint": "009F","TargetCharacterCodePoint": "027F"}
```
**en-us-037b** 和 **en-us-1140b**  
程式碼轉移：  

```
0180    0180
0001    0181
0002    0182
0003    0183
009C    0184
0009    0185
0086    0186
007F    0187
0097    0188
008D    0189
008E    018A
000B    018B
000C    018C
000D    018D
000E    018E
000F    018F
0010    0190
0011    0191
0012    0192
0013    0193
009D    0194
0085    0195
0008    0196
0087    0197
0018    0198
0019    0199
0092    019A
008F    019B
001C    019C
001D    019D
001E    019E
001F    019F
0080    01A0
0081    01A1
0082    01A2
0083    01A3
0084    01A4
000A    01A5
0017    01A6
001B    01A7
0088    01A8
0089    01A9
008A    01AA
008B    01AB
008C    01AC
0005    01AD
0006    01AE
0007    01AF
0090    01B0
0091    01B1
0016    01B2
0093    01B3
0094    01B4
0095    01B5
0096    01B6
0004    01B7
0098    01B8
0099    01B9
009A    01BA
009B    01BB
0014    01BC
0015    01BD
009E    01BE
001A    01BF
009F    027F
```
 AWS DMS 任務對應的輸入映射：  

```
{"SourceCharacterCodePoint": "0180","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "0001","TargetCharacterCodePoint": "0181"}
,{"SourceCharacterCodePoint": "0002","TargetCharacterCodePoint": "0182"}
,{"SourceCharacterCodePoint": "0003","TargetCharacterCodePoint": "0183"}
,{"SourceCharacterCodePoint": "009C","TargetCharacterCodePoint": "0184"}
,{"SourceCharacterCodePoint": "0009","TargetCharacterCodePoint": "0185"}
,{"SourceCharacterCodePoint": "0086","TargetCharacterCodePoint": "0186"}
,{"SourceCharacterCodePoint": "007F","TargetCharacterCodePoint": "0187"}
,{"SourceCharacterCodePoint": "0097","TargetCharacterCodePoint": "0188"}
,{"SourceCharacterCodePoint": "008D","TargetCharacterCodePoint": "0189"}
,{"SourceCharacterCodePoint": "008E","TargetCharacterCodePoint": "018A"}
,{"SourceCharacterCodePoint": "000B","TargetCharacterCodePoint": "018B"}
,{"SourceCharacterCodePoint": "000C","TargetCharacterCodePoint": "018C"}
,{"SourceCharacterCodePoint": "000D","TargetCharacterCodePoint": "018D"}
,{"SourceCharacterCodePoint": "000E","TargetCharacterCodePoint": "018E"}
,{"SourceCharacterCodePoint": "000F","TargetCharacterCodePoint": "018F"}
,{"SourceCharacterCodePoint": "0010","TargetCharacterCodePoint": "0190"}
,{"SourceCharacterCodePoint": "0011","TargetCharacterCodePoint": "0191"}
,{"SourceCharacterCodePoint": "0012","TargetCharacterCodePoint": "0192"}
,{"SourceCharacterCodePoint": "0013","TargetCharacterCodePoint": "0193"}
,{"SourceCharacterCodePoint": "009D","TargetCharacterCodePoint": "0194"}
,{"SourceCharacterCodePoint": "0085","TargetCharacterCodePoint": "0195"}
,{"SourceCharacterCodePoint": "0008","TargetCharacterCodePoint": "0196"}
,{"SourceCharacterCodePoint": "0087","TargetCharacterCodePoint": "0197"}
,{"SourceCharacterCodePoint": "0018","TargetCharacterCodePoint": "0198"}
,{"SourceCharacterCodePoint": "0019","TargetCharacterCodePoint": "0199"}
,{"SourceCharacterCodePoint": "0092","TargetCharacterCodePoint": "019A"}
,{"SourceCharacterCodePoint": "008F","TargetCharacterCodePoint": "019B"}
,{"SourceCharacterCodePoint": "001C","TargetCharacterCodePoint": "019C"}
,{"SourceCharacterCodePoint": "001D","TargetCharacterCodePoint": "019D"}
,{"SourceCharacterCodePoint": "001E","TargetCharacterCodePoint": "019E"}
,{"SourceCharacterCodePoint": "001F","TargetCharacterCodePoint": "019F"}
,{"SourceCharacterCodePoint": "0080","TargetCharacterCodePoint": "01A0"}
,{"SourceCharacterCodePoint": "0081","TargetCharacterCodePoint": "01A1"}
,{"SourceCharacterCodePoint": "0082","TargetCharacterCodePoint": "01A2"}
,{"SourceCharacterCodePoint": "0083","TargetCharacterCodePoint": "01A3"}
,{"SourceCharacterCodePoint": "0084","TargetCharacterCodePoint": "01A4"}
,{"SourceCharacterCodePoint": "000A","TargetCharacterCodePoint": "01A5"}
,{"SourceCharacterCodePoint": "0017","TargetCharacterCodePoint": "01A6"}
,{"SourceCharacterCodePoint": "001B","TargetCharacterCodePoint": "01A7"}
,{"SourceCharacterCodePoint": "0088","TargetCharacterCodePoint": "01A8"}
,{"SourceCharacterCodePoint": "0089","TargetCharacterCodePoint": "01A9"}
,{"SourceCharacterCodePoint": "008A","TargetCharacterCodePoint": "01AA"}
,{"SourceCharacterCodePoint": "008B","TargetCharacterCodePoint": "01AB"}
,{"SourceCharacterCodePoint": "008C","TargetCharacterCodePoint": "01AC"}
,{"SourceCharacterCodePoint": "0005","TargetCharacterCodePoint": "01AD"}
,{"SourceCharacterCodePoint": "0006","TargetCharacterCodePoint": "01AE"}
,{"SourceCharacterCodePoint": "0007","TargetCharacterCodePoint": "01AF"}
,{"SourceCharacterCodePoint": "0090","TargetCharacterCodePoint": "01B0"}
,{"SourceCharacterCodePoint": "0091","TargetCharacterCodePoint": "01B1"}
,{"SourceCharacterCodePoint": "0016","TargetCharacterCodePoint": "01B2"}
,{"SourceCharacterCodePoint": "0093","TargetCharacterCodePoint": "01B3"}
,{"SourceCharacterCodePoint": "0094","TargetCharacterCodePoint": "01B4"}
,{"SourceCharacterCodePoint": "0095","TargetCharacterCodePoint": "01B5"}
,{"SourceCharacterCodePoint": "0096","TargetCharacterCodePoint": "01B6"}
,{"SourceCharacterCodePoint": "0004","TargetCharacterCodePoint": "01B7"}
,{"SourceCharacterCodePoint": "0098","TargetCharacterCodePoint": "01B8"}
,{"SourceCharacterCodePoint": "0099","TargetCharacterCodePoint": "01B9"}
,{"SourceCharacterCodePoint": "009A","TargetCharacterCodePoint": "01BA"}
,{"SourceCharacterCodePoint": "009B","TargetCharacterCodePoint": "01BB"}
,{"SourceCharacterCodePoint": "0014","TargetCharacterCodePoint": "01BC"}
,{"SourceCharacterCodePoint": "0015","TargetCharacterCodePoint": "01BD"}
,{"SourceCharacterCodePoint": "009E","TargetCharacterCodePoint": "01BE"}
,{"SourceCharacterCodePoint": "001A","TargetCharacterCodePoint": "01BF"}
,{"SourceCharacterCodePoint": "009F","TargetCharacterCodePoint": "027F"}
```
**es-ES-284b** 和 **es-ES-1145b**  
程式碼轉移：  

```
0180    0180
0001    0181
0002    0182
0003    0183
009C    0184
0009    0185
0086    0186
007F    0187
0097    0188
008D    0189
008E    018A
000B    018B
000C    018C
000D    018D
000E    018E
000F    018F
0010    0190
0011    0191
0012    0192
0013    0193
009D    0194
0085    0195
0008    0196
0087    0197
0018    0198
0019    0199
0092    019A
008F    019B
001C    019C
001D    019D
001E    019E
001F    019F
0080    01A0
0081    01A1
0082    01A2
0083    01A3
0084    01A4
000A    01A5
0017    01A6
001B    01A7
0088    01A8
0089    01A9
008A    01AA
008B    01AB
008C    01AC
0005    01AD
0006    01AE
0007    01AF
0090    01B0
0091    01B1
0016    01B2
0093    01B3
0094    01B4
0095    01B5
0096    01B6
0004    01B7
0098    01B8
0099    01B9
009A    01BA
009B    01BB
0014    01BC
0015    01BD
009E    01BE
001A    01BF
009F    027F
```
 AWS DMS 任務對應的輸入映射：  

```
 {"SourceCharacterCodePoint": "0180","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "0001","TargetCharacterCodePoint": "0181"}
,{"SourceCharacterCodePoint": "0002","TargetCharacterCodePoint": "0182"}
,{"SourceCharacterCodePoint": "0003","TargetCharacterCodePoint": "0183"}
,{"SourceCharacterCodePoint": "009C","TargetCharacterCodePoint": "0184"}
,{"SourceCharacterCodePoint": "0009","TargetCharacterCodePoint": "0185"}
,{"SourceCharacterCodePoint": "0086","TargetCharacterCodePoint": "0186"}
,{"SourceCharacterCodePoint": "007F","TargetCharacterCodePoint": "0187"}
,{"SourceCharacterCodePoint": "0097","TargetCharacterCodePoint": "0188"}
,{"SourceCharacterCodePoint": "008D","TargetCharacterCodePoint": "0189"}
,{"SourceCharacterCodePoint": "008E","TargetCharacterCodePoint": "018A"}
,{"SourceCharacterCodePoint": "000B","TargetCharacterCodePoint": "018B"}
,{"SourceCharacterCodePoint": "000C","TargetCharacterCodePoint": "018C"}
,{"SourceCharacterCodePoint": "000D","TargetCharacterCodePoint": "018D"}
,{"SourceCharacterCodePoint": "000E","TargetCharacterCodePoint": "018E"}
,{"SourceCharacterCodePoint": "000F","TargetCharacterCodePoint": "018F"}
,{"SourceCharacterCodePoint": "0010","TargetCharacterCodePoint": "0190"}
,{"SourceCharacterCodePoint": "0011","TargetCharacterCodePoint": "0191"}
,{"SourceCharacterCodePoint": "0012","TargetCharacterCodePoint": "0192"}
,{"SourceCharacterCodePoint": "0013","TargetCharacterCodePoint": "0193"}
,{"SourceCharacterCodePoint": "009D","TargetCharacterCodePoint": "0194"}
,{"SourceCharacterCodePoint": "0085","TargetCharacterCodePoint": "0195"}
,{"SourceCharacterCodePoint": "0008","TargetCharacterCodePoint": "0196"}
,{"SourceCharacterCodePoint": "0087","TargetCharacterCodePoint": "0197"}
,{"SourceCharacterCodePoint": "0018","TargetCharacterCodePoint": "0198"}
,{"SourceCharacterCodePoint": "0019","TargetCharacterCodePoint": "0199"}
,{"SourceCharacterCodePoint": "0092","TargetCharacterCodePoint": "019A"}
,{"SourceCharacterCodePoint": "008F","TargetCharacterCodePoint": "019B"}
,{"SourceCharacterCodePoint": "001C","TargetCharacterCodePoint": "019C"}
,{"SourceCharacterCodePoint": "001D","TargetCharacterCodePoint": "019D"}
,{"SourceCharacterCodePoint": "001E","TargetCharacterCodePoint": "019E"}
,{"SourceCharacterCodePoint": "001F","TargetCharacterCodePoint": "019F"}
,{"SourceCharacterCodePoint": "0080","TargetCharacterCodePoint": "01A0"}
,{"SourceCharacterCodePoint": "0081","TargetCharacterCodePoint": "01A1"}
,{"SourceCharacterCodePoint": "0082","TargetCharacterCodePoint": "01A2"}
,{"SourceCharacterCodePoint": "0083","TargetCharacterCodePoint": "01A3"}
,{"SourceCharacterCodePoint": "0084","TargetCharacterCodePoint": "01A4"}
,{"SourceCharacterCodePoint": "000A","TargetCharacterCodePoint": "01A5"}
,{"SourceCharacterCodePoint": "0017","TargetCharacterCodePoint": "01A6"}
,{"SourceCharacterCodePoint": "001B","TargetCharacterCodePoint": "01A7"}
,{"SourceCharacterCodePoint": "0088","TargetCharacterCodePoint": "01A8"}
,{"SourceCharacterCodePoint": "0089","TargetCharacterCodePoint": "01A9"}
,{"SourceCharacterCodePoint": "008A","TargetCharacterCodePoint": "01AA"}
,{"SourceCharacterCodePoint": "008B","TargetCharacterCodePoint": "01AB"}
,{"SourceCharacterCodePoint": "008C","TargetCharacterCodePoint": "01AC"}
,{"SourceCharacterCodePoint": "0005","TargetCharacterCodePoint": "01AD"}
,{"SourceCharacterCodePoint": "0006","TargetCharacterCodePoint": "01AE"}
,{"SourceCharacterCodePoint": "0007","TargetCharacterCodePoint": "01AF"}
,{"SourceCharacterCodePoint": "0090","TargetCharacterCodePoint": "01B0"}
,{"SourceCharacterCodePoint": "0091","TargetCharacterCodePoint": "01B1"}
,{"SourceCharacterCodePoint": "0016","TargetCharacterCodePoint": "01B2"}
,{"SourceCharacterCodePoint": "0093","TargetCharacterCodePoint": "01B3"}
,{"SourceCharacterCodePoint": "0094","TargetCharacterCodePoint": "01B4"}
,{"SourceCharacterCodePoint": "0095","TargetCharacterCodePoint": "01B5"}
,{"SourceCharacterCodePoint": "0096","TargetCharacterCodePoint": "01B6"}
,{"SourceCharacterCodePoint": "0004","TargetCharacterCodePoint": "01B7"}
,{"SourceCharacterCodePoint": "0098","TargetCharacterCodePoint": "01B8"}
,{"SourceCharacterCodePoint": "0099","TargetCharacterCodePoint": "01B9"}
,{"SourceCharacterCodePoint": "009A","TargetCharacterCodePoint": "01BA"}
,{"SourceCharacterCodePoint": "009B","TargetCharacterCodePoint": "01BB"}
,{"SourceCharacterCodePoint": "0014","TargetCharacterCodePoint": "01BC"}
,{"SourceCharacterCodePoint": "0015","TargetCharacterCodePoint": "01BD"}
,{"SourceCharacterCodePoint": "009E","TargetCharacterCodePoint": "01BE"}
,{"SourceCharacterCodePoint": "001A","TargetCharacterCodePoint": "01BF"}
,{"SourceCharacterCodePoint": "009F","TargetCharacterCodePoint": "027F"}
```
**fi\$1FI-278b** 和 **fi-FI-1143b**  
程式碼轉移：  

```
0180    0180
0001    0181
0002    0182
0003    0183
009C    0184
0009    0185
0086    0186
007F    0187
0097    0188
008D    0189
008E    018A
000B    018B
000C    018C
000D    018D
000E    018E
000F    018F
0010    0190
0011    0191
0012    0192
0013    0193
009D    0194
0085    0195
0008    0196
0087    0197
0018    0198
0019    0199
0092    019A
008F    019B
001C    019C
001D    019D
001E    019E
001F    019F
0080    01A0
0081    01A1
0082    01A2
0083    01A3
0084    01A4
000A    01A5
0017    01A6
001B    01A7
0088    01A8
0089    01A9
008A    01AA
008B    01AB
008C    01AC
0005    01AD
0006    01AE
0007    01AF
0090    01B0
0091    01B1
0016    01B2
0093    01B3
0094    01B4
0095    01B5
0096    01B6
0004    01B7
0098    01B8
0099    01B9
009A    01BA
009B    01BB
0014    01BC
0015    01BD
009E    01BE
001A    01BF
009F    027F
```
 AWS DMS 任務對應的輸入映射：  

```
 {"SourceCharacterCodePoint": "0180","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "0001","TargetCharacterCodePoint": "0181"}
,{"SourceCharacterCodePoint": "0002","TargetCharacterCodePoint": "0182"}
,{"SourceCharacterCodePoint": "0003","TargetCharacterCodePoint": "0183"}
,{"SourceCharacterCodePoint": "009C","TargetCharacterCodePoint": "0184"}
,{"SourceCharacterCodePoint": "0009","TargetCharacterCodePoint": "0185"}
,{"SourceCharacterCodePoint": "0086","TargetCharacterCodePoint": "0186"}
,{"SourceCharacterCodePoint": "007F","TargetCharacterCodePoint": "0187"}
,{"SourceCharacterCodePoint": "0097","TargetCharacterCodePoint": "0188"}
,{"SourceCharacterCodePoint": "008D","TargetCharacterCodePoint": "0189"}
,{"SourceCharacterCodePoint": "008E","TargetCharacterCodePoint": "018A"}
,{"SourceCharacterCodePoint": "000B","TargetCharacterCodePoint": "018B"}
,{"SourceCharacterCodePoint": "000C","TargetCharacterCodePoint": "018C"}
,{"SourceCharacterCodePoint": "000D","TargetCharacterCodePoint": "018D"}
,{"SourceCharacterCodePoint": "000E","TargetCharacterCodePoint": "018E"}
,{"SourceCharacterCodePoint": "000F","TargetCharacterCodePoint": "018F"}
,{"SourceCharacterCodePoint": "0010","TargetCharacterCodePoint": "0190"}
,{"SourceCharacterCodePoint": "0011","TargetCharacterCodePoint": "0191"}
,{"SourceCharacterCodePoint": "0012","TargetCharacterCodePoint": "0192"}
,{"SourceCharacterCodePoint": "0013","TargetCharacterCodePoint": "0193"}
,{"SourceCharacterCodePoint": "009D","TargetCharacterCodePoint": "0194"}
,{"SourceCharacterCodePoint": "0085","TargetCharacterCodePoint": "0195"}
,{"SourceCharacterCodePoint": "0008","TargetCharacterCodePoint": "0196"}
,{"SourceCharacterCodePoint": "0087","TargetCharacterCodePoint": "0197"}
,{"SourceCharacterCodePoint": "0018","TargetCharacterCodePoint": "0198"}
,{"SourceCharacterCodePoint": "0019","TargetCharacterCodePoint": "0199"}
,{"SourceCharacterCodePoint": "0092","TargetCharacterCodePoint": "019A"}
,{"SourceCharacterCodePoint": "008F","TargetCharacterCodePoint": "019B"}
,{"SourceCharacterCodePoint": "001C","TargetCharacterCodePoint": "019C"}
,{"SourceCharacterCodePoint": "001D","TargetCharacterCodePoint": "019D"}
,{"SourceCharacterCodePoint": "001E","TargetCharacterCodePoint": "019E"}
,{"SourceCharacterCodePoint": "001F","TargetCharacterCodePoint": "019F"}
,{"SourceCharacterCodePoint": "0080","TargetCharacterCodePoint": "01A0"}
,{"SourceCharacterCodePoint": "0081","TargetCharacterCodePoint": "01A1"}
,{"SourceCharacterCodePoint": "0082","TargetCharacterCodePoint": "01A2"}
,{"SourceCharacterCodePoint": "0083","TargetCharacterCodePoint": "01A3"}
,{"SourceCharacterCodePoint": "0084","TargetCharacterCodePoint": "01A4"}
,{"SourceCharacterCodePoint": "000A","TargetCharacterCodePoint": "01A5"}
,{"SourceCharacterCodePoint": "0017","TargetCharacterCodePoint": "01A6"}
,{"SourceCharacterCodePoint": "001B","TargetCharacterCodePoint": "01A7"}
,{"SourceCharacterCodePoint": "0088","TargetCharacterCodePoint": "01A8"}
,{"SourceCharacterCodePoint": "0089","TargetCharacterCodePoint": "01A9"}
,{"SourceCharacterCodePoint": "008A","TargetCharacterCodePoint": "01AA"}
,{"SourceCharacterCodePoint": "008B","TargetCharacterCodePoint": "01AB"}
,{"SourceCharacterCodePoint": "008C","TargetCharacterCodePoint": "01AC"}
,{"SourceCharacterCodePoint": "0005","TargetCharacterCodePoint": "01AD"}
,{"SourceCharacterCodePoint": "0006","TargetCharacterCodePoint": "01AE"}
,{"SourceCharacterCodePoint": "0007","TargetCharacterCodePoint": "01AF"}
,{"SourceCharacterCodePoint": "0090","TargetCharacterCodePoint": "01B0"}
,{"SourceCharacterCodePoint": "0091","TargetCharacterCodePoint": "01B1"}
,{"SourceCharacterCodePoint": "0016","TargetCharacterCodePoint": "01B2"}
,{"SourceCharacterCodePoint": "0093","TargetCharacterCodePoint": "01B3"}
,{"SourceCharacterCodePoint": "0094","TargetCharacterCodePoint": "01B4"}
,{"SourceCharacterCodePoint": "0095","TargetCharacterCodePoint": "01B5"}
,{"SourceCharacterCodePoint": "0096","TargetCharacterCodePoint": "01B6"}
,{"SourceCharacterCodePoint": "0004","TargetCharacterCodePoint": "01B7"}
,{"SourceCharacterCodePoint": "0098","TargetCharacterCodePoint": "01B8"}
,{"SourceCharacterCodePoint": "0099","TargetCharacterCodePoint": "01B9"}
,{"SourceCharacterCodePoint": "009A","TargetCharacterCodePoint": "01BA"}
,{"SourceCharacterCodePoint": "009B","TargetCharacterCodePoint": "01BB"}
,{"SourceCharacterCodePoint": "0014","TargetCharacterCodePoint": "01BC"}
,{"SourceCharacterCodePoint": "0015","TargetCharacterCodePoint": "01BD"}
,{"SourceCharacterCodePoint": "009E","TargetCharacterCodePoint": "01BE"}
,{"SourceCharacterCodePoint": "001A","TargetCharacterCodePoint": "01BF"}
,{"SourceCharacterCodePoint": "009F","TargetCharacterCodePoint": "027F"}
```
**fr-FR-297b** 和 **fr-FR-1147b**  
程式碼轉移：  

```
0180    0180
0001    0181
0002    0182
0003    0183
009C    0184
0009    0185
0086    0186
007F    0187
0097    0188
008D    0189
008E    018A
000B    018B
000C    018C
000D    018D
000E    018E
000F    018F
0010    0190
0011    0191
0012    0192
0013    0193
009D    0194
0085    0195
0008    0196
0087    0197
0018    0198
0019    0199
0092    019A
008F    019B
001C    019C
001D    019D
001E    019E
001F    019F
0080    01A0
0081    01A1
0082    01A2
0083    01A3
0084    01A4
000A    01A5
0017    01A6
001B    01A7
0088    01A8
0089    01A9
008A    01AA
008B    01AB
008C    01AC
0005    01AD
0006    01AE
0007    01AF
0090    01B0
0091    01B1
0016    01B2
0093    01B3
0094    01B4
0095    01B5
0096    01B6
0004    01B7
0098    01B8
0099    01B9
009A    01BA
009B    01BB
0014    01BC
0015    01BD
009E    01BE
001A    01BF
009F    027F
```
 AWS DMS 任務對應的輸入映射：  

```
{"SourceCharacterCodePoint": "0180","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "0001","TargetCharacterCodePoint": "0181"}
,{"SourceCharacterCodePoint": "0002","TargetCharacterCodePoint": "0182"}
,{"SourceCharacterCodePoint": "0003","TargetCharacterCodePoint": "0183"}
,{"SourceCharacterCodePoint": "009C","TargetCharacterCodePoint": "0184"}
,{"SourceCharacterCodePoint": "0009","TargetCharacterCodePoint": "0185"}
,{"SourceCharacterCodePoint": "0086","TargetCharacterCodePoint": "0186"}
,{"SourceCharacterCodePoint": "007F","TargetCharacterCodePoint": "0187"}
,{"SourceCharacterCodePoint": "0097","TargetCharacterCodePoint": "0188"}
,{"SourceCharacterCodePoint": "008D","TargetCharacterCodePoint": "0189"}
,{"SourceCharacterCodePoint": "008E","TargetCharacterCodePoint": "018A"}
,{"SourceCharacterCodePoint": "000B","TargetCharacterCodePoint": "018B"}
,{"SourceCharacterCodePoint": "000C","TargetCharacterCodePoint": "018C"}
,{"SourceCharacterCodePoint": "000D","TargetCharacterCodePoint": "018D"}
,{"SourceCharacterCodePoint": "000E","TargetCharacterCodePoint": "018E"}
,{"SourceCharacterCodePoint": "000F","TargetCharacterCodePoint": "018F"}
,{"SourceCharacterCodePoint": "0010","TargetCharacterCodePoint": "0190"}
,{"SourceCharacterCodePoint": "0011","TargetCharacterCodePoint": "0191"}
,{"SourceCharacterCodePoint": "0012","TargetCharacterCodePoint": "0192"}
,{"SourceCharacterCodePoint": "0013","TargetCharacterCodePoint": "0193"}
,{"SourceCharacterCodePoint": "009D","TargetCharacterCodePoint": "0194"}
,{"SourceCharacterCodePoint": "0085","TargetCharacterCodePoint": "0195"}
,{"SourceCharacterCodePoint": "0008","TargetCharacterCodePoint": "0196"}
,{"SourceCharacterCodePoint": "0087","TargetCharacterCodePoint": "0197"}
,{"SourceCharacterCodePoint": "0018","TargetCharacterCodePoint": "0198"}
,{"SourceCharacterCodePoint": "0019","TargetCharacterCodePoint": "0199"}
,{"SourceCharacterCodePoint": "0092","TargetCharacterCodePoint": "019A"}
,{"SourceCharacterCodePoint": "008F","TargetCharacterCodePoint": "019B"}
,{"SourceCharacterCodePoint": "001C","TargetCharacterCodePoint": "019C"}
,{"SourceCharacterCodePoint": "001D","TargetCharacterCodePoint": "019D"}
,{"SourceCharacterCodePoint": "001E","TargetCharacterCodePoint": "019E"}
,{"SourceCharacterCodePoint": "001F","TargetCharacterCodePoint": "019F"}
,{"SourceCharacterCodePoint": "0080","TargetCharacterCodePoint": "01A0"}
,{"SourceCharacterCodePoint": "0081","TargetCharacterCodePoint": "01A1"}
,{"SourceCharacterCodePoint": "0082","TargetCharacterCodePoint": "01A2"}
,{"SourceCharacterCodePoint": "0083","TargetCharacterCodePoint": "01A3"}
,{"SourceCharacterCodePoint": "0084","TargetCharacterCodePoint": "01A4"}
,{"SourceCharacterCodePoint": "000A","TargetCharacterCodePoint": "01A5"}
,{"SourceCharacterCodePoint": "0017","TargetCharacterCodePoint": "01A6"}
,{"SourceCharacterCodePoint": "001B","TargetCharacterCodePoint": "01A7"}
,{"SourceCharacterCodePoint": "0088","TargetCharacterCodePoint": "01A8"}
,{"SourceCharacterCodePoint": "0089","TargetCharacterCodePoint": "01A9"}
,{"SourceCharacterCodePoint": "008A","TargetCharacterCodePoint": "01AA"}
,{"SourceCharacterCodePoint": "008B","TargetCharacterCodePoint": "01AB"}
,{"SourceCharacterCodePoint": "008C","TargetCharacterCodePoint": "01AC"}
,{"SourceCharacterCodePoint": "0005","TargetCharacterCodePoint": "01AD"}
,{"SourceCharacterCodePoint": "0006","TargetCharacterCodePoint": "01AE"}
,{"SourceCharacterCodePoint": "0007","TargetCharacterCodePoint": "01AF"}
,{"SourceCharacterCodePoint": "0090","TargetCharacterCodePoint": "01B0"}
,{"SourceCharacterCodePoint": "0091","TargetCharacterCodePoint": "01B1"}
,{"SourceCharacterCodePoint": "0016","TargetCharacterCodePoint": "01B2"}
,{"SourceCharacterCodePoint": "0093","TargetCharacterCodePoint": "01B3"}
,{"SourceCharacterCodePoint": "0094","TargetCharacterCodePoint": "01B4"}
,{"SourceCharacterCodePoint": "0095","TargetCharacterCodePoint": "01B5"}
,{"SourceCharacterCodePoint": "0096","TargetCharacterCodePoint": "01B6"}
,{"SourceCharacterCodePoint": "0004","TargetCharacterCodePoint": "01B7"}
,{"SourceCharacterCodePoint": "0098","TargetCharacterCodePoint": "01B8"}
,{"SourceCharacterCodePoint": "0099","TargetCharacterCodePoint": "01B9"}
,{"SourceCharacterCodePoint": "009A","TargetCharacterCodePoint": "01BA"}
,{"SourceCharacterCodePoint": "009B","TargetCharacterCodePoint": "01BB"}
,{"SourceCharacterCodePoint": "0014","TargetCharacterCodePoint": "01BC"}
,{"SourceCharacterCodePoint": "0015","TargetCharacterCodePoint": "01BD"}
,{"SourceCharacterCodePoint": "009E","TargetCharacterCodePoint": "01BE"}
,{"SourceCharacterCodePoint": "001A","TargetCharacterCodePoint": "01BF"}
,{"SourceCharacterCodePoint": "009F","TargetCharacterCodePoint": "027F"}
```
**it-IT-280b** 和 **it-IT-1144b**  
程式碼轉移：  

```
0180    0180
0001    0181
0002    0182
0003    0183
009C    0184
0009    0185
0086    0186
007F    0187
0097    0188
008D    0189
008E    018A
000B    018B
000C    018C
000D    018D
000E    018E
000F    018F
0010    0190
0011    0191
0012    0192
0013    0193
009D    0194
0085    0195
0008    0196
0087    0197
0018    0198
0019    0199
0092    019A
008F    019B
001C    019C
001D    019D
001E    019E
001F    019F
0080    01A0
0081    01A1
0082    01A2
0083    01A3
0084    01A4
000A    01A5
0017    01A6
001B    01A7
0088    01A8
0089    01A9
008A    01AA
008B    01AB
008C    01AC
0005    01AD
0006    01AE
0007    01AF
0090    01B0
0091    01B1
0016    01B2
0093    01B3
0094    01B4
0095    01B5
0096    01B6
0004    01B7
0098    01B8
0099    01B9
009A    01BA
009B    01BB
0014    01BC
0015    01BD
009E    01BE
001A    01BF
009F    027F
```
 AWS DMS 任務對應的輸入映射：  

```
 {"SourceCharacterCodePoint": "0180","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "0001","TargetCharacterCodePoint": "0181"}
,{"SourceCharacterCodePoint": "0002","TargetCharacterCodePoint": "0182"}
,{"SourceCharacterCodePoint": "0003","TargetCharacterCodePoint": "0183"}
,{"SourceCharacterCodePoint": "009C","TargetCharacterCodePoint": "0184"}
,{"SourceCharacterCodePoint": "0009","TargetCharacterCodePoint": "0185"}
,{"SourceCharacterCodePoint": "0086","TargetCharacterCodePoint": "0186"}
,{"SourceCharacterCodePoint": "007F","TargetCharacterCodePoint": "0187"}
,{"SourceCharacterCodePoint": "0097","TargetCharacterCodePoint": "0188"}
,{"SourceCharacterCodePoint": "008D","TargetCharacterCodePoint": "0189"}
,{"SourceCharacterCodePoint": "008E","TargetCharacterCodePoint": "018A"}
,{"SourceCharacterCodePoint": "000B","TargetCharacterCodePoint": "018B"}
,{"SourceCharacterCodePoint": "000C","TargetCharacterCodePoint": "018C"}
,{"SourceCharacterCodePoint": "000D","TargetCharacterCodePoint": "018D"}
,{"SourceCharacterCodePoint": "000E","TargetCharacterCodePoint": "018E"}
,{"SourceCharacterCodePoint": "000F","TargetCharacterCodePoint": "018F"}
,{"SourceCharacterCodePoint": "0010","TargetCharacterCodePoint": "0190"}
,{"SourceCharacterCodePoint": "0011","TargetCharacterCodePoint": "0191"}
,{"SourceCharacterCodePoint": "0012","TargetCharacterCodePoint": "0192"}
,{"SourceCharacterCodePoint": "0013","TargetCharacterCodePoint": "0193"}
,{"SourceCharacterCodePoint": "009D","TargetCharacterCodePoint": "0194"}
,{"SourceCharacterCodePoint": "0085","TargetCharacterCodePoint": "0195"}
,{"SourceCharacterCodePoint": "0008","TargetCharacterCodePoint": "0196"}
,{"SourceCharacterCodePoint": "0087","TargetCharacterCodePoint": "0197"}
,{"SourceCharacterCodePoint": "0018","TargetCharacterCodePoint": "0198"}
,{"SourceCharacterCodePoint": "0019","TargetCharacterCodePoint": "0199"}
,{"SourceCharacterCodePoint": "0092","TargetCharacterCodePoint": "019A"}
,{"SourceCharacterCodePoint": "008F","TargetCharacterCodePoint": "019B"}
,{"SourceCharacterCodePoint": "001C","TargetCharacterCodePoint": "019C"}
,{"SourceCharacterCodePoint": "001D","TargetCharacterCodePoint": "019D"}
,{"SourceCharacterCodePoint": "001E","TargetCharacterCodePoint": "019E"}
,{"SourceCharacterCodePoint": "001F","TargetCharacterCodePoint": "019F"}
,{"SourceCharacterCodePoint": "0080","TargetCharacterCodePoint": "01A0"}
,{"SourceCharacterCodePoint": "0081","TargetCharacterCodePoint": "01A1"}
,{"SourceCharacterCodePoint": "0082","TargetCharacterCodePoint": "01A2"}
,{"SourceCharacterCodePoint": "0083","TargetCharacterCodePoint": "01A3"}
,{"SourceCharacterCodePoint": "0084","TargetCharacterCodePoint": "01A4"}
,{"SourceCharacterCodePoint": "000A","TargetCharacterCodePoint": "01A5"}
,{"SourceCharacterCodePoint": "0017","TargetCharacterCodePoint": "01A6"}
,{"SourceCharacterCodePoint": "001B","TargetCharacterCodePoint": "01A7"}
,{"SourceCharacterCodePoint": "0088","TargetCharacterCodePoint": "01A8"}
,{"SourceCharacterCodePoint": "0089","TargetCharacterCodePoint": "01A9"}
,{"SourceCharacterCodePoint": "008A","TargetCharacterCodePoint": "01AA"}
,{"SourceCharacterCodePoint": "008B","TargetCharacterCodePoint": "01AB"}
,{"SourceCharacterCodePoint": "008C","TargetCharacterCodePoint": "01AC"}
,{"SourceCharacterCodePoint": "0005","TargetCharacterCodePoint": "01AD"}
,{"SourceCharacterCodePoint": "0006","TargetCharacterCodePoint": "01AE"}
,{"SourceCharacterCodePoint": "0007","TargetCharacterCodePoint": "01AF"}
,{"SourceCharacterCodePoint": "0090","TargetCharacterCodePoint": "01B0"}
,{"SourceCharacterCodePoint": "0091","TargetCharacterCodePoint": "01B1"}
,{"SourceCharacterCodePoint": "0016","TargetCharacterCodePoint": "01B2"}
,{"SourceCharacterCodePoint": "0093","TargetCharacterCodePoint": "01B3"}
,{"SourceCharacterCodePoint": "0094","TargetCharacterCodePoint": "01B4"}
,{"SourceCharacterCodePoint": "0095","TargetCharacterCodePoint": "01B5"}
,{"SourceCharacterCodePoint": "0096","TargetCharacterCodePoint": "01B6"}
,{"SourceCharacterCodePoint": "0004","TargetCharacterCodePoint": "01B7"}
,{"SourceCharacterCodePoint": "0098","TargetCharacterCodePoint": "01B8"}
,{"SourceCharacterCodePoint": "0099","TargetCharacterCodePoint": "01B9"}
,{"SourceCharacterCodePoint": "009A","TargetCharacterCodePoint": "01BA"}
,{"SourceCharacterCodePoint": "009B","TargetCharacterCodePoint": "01BB"}
,{"SourceCharacterCodePoint": "0014","TargetCharacterCodePoint": "01BC"}
,{"SourceCharacterCodePoint": "0015","TargetCharacterCodePoint": "01BD"}
,{"SourceCharacterCodePoint": "009E","TargetCharacterCodePoint": "01BE"}
,{"SourceCharacterCodePoint": "001A","TargetCharacterCodePoint": "01BF"}
,{"SourceCharacterCodePoint": "009F","TargetCharacterCodePoint": "027F"}
```
**nl-BE-500b** 和 **nl-BE-1148b**  
程式碼轉移：  

```
0180    0180
0001    0181
0002    0182
0003    0183
009C    0184
0009    0185
0086    0186
007F    0187
0097    0188
008D    0189
008E    018A
000B    018B
000C    018C
000D    018D
000E    018E
000F    018F
0010    0190
0011    0191
0012    0192
0013    0193
009D    0194
0085    0195
0008    0196
0087    0197
0018    0198
0019    0199
0092    019A
008F    019B
001C    019C
001D    019D
001E    019E
001F    019F
0080    01A0
0081    01A1
0082    01A2
0083    01A3
0084    01A4
000A    01A5
0017    01A6
001B    01A7
0088    01A8
0089    01A9
008A    01AA
008B    01AB
008C    01AC
0005    01AD
0006    01AE
0007    01AF
0090    01B0
0091    01B1
0016    01B2
0093    01B3
0094    01B4
0095    01B5
0096    01B6
0004    01B7
0098    01B8
0099    01B9
009A    01BA
009B    01BB
0014    01BC
0015    01BD
009E    01BE
001A    01BF
009F    027F
```
 AWS DMS 任務對應的輸入映射：  

```
 {"SourceCharacterCodePoint": "0180","TargetCharacterCodePoint": "0180"}
,{"SourceCharacterCodePoint": "0001","TargetCharacterCodePoint": "0181"}
,{"SourceCharacterCodePoint": "0002","TargetCharacterCodePoint": "0182"}
,{"SourceCharacterCodePoint": "0003","TargetCharacterCodePoint": "0183"}
,{"SourceCharacterCodePoint": "009C","TargetCharacterCodePoint": "0184"}
,{"SourceCharacterCodePoint": "0009","TargetCharacterCodePoint": "0185"}
,{"SourceCharacterCodePoint": "0086","TargetCharacterCodePoint": "0186"}
,{"SourceCharacterCodePoint": "007F","TargetCharacterCodePoint": "0187"}
,{"SourceCharacterCodePoint": "0097","TargetCharacterCodePoint": "0188"}
,{"SourceCharacterCodePoint": "008D","TargetCharacterCodePoint": "0189"}
,{"SourceCharacterCodePoint": "008E","TargetCharacterCodePoint": "018A"}
,{"SourceCharacterCodePoint": "000B","TargetCharacterCodePoint": "018B"}
,{"SourceCharacterCodePoint": "000C","TargetCharacterCodePoint": "018C"}
,{"SourceCharacterCodePoint": "000D","TargetCharacterCodePoint": "018D"}
,{"SourceCharacterCodePoint": "000E","TargetCharacterCodePoint": "018E"}
,{"SourceCharacterCodePoint": "000F","TargetCharacterCodePoint": "018F"}
,{"SourceCharacterCodePoint": "0010","TargetCharacterCodePoint": "0190"}
,{"SourceCharacterCodePoint": "0011","TargetCharacterCodePoint": "0191"}
,{"SourceCharacterCodePoint": "0012","TargetCharacterCodePoint": "0192"}
,{"SourceCharacterCodePoint": "0013","TargetCharacterCodePoint": "0193"}
,{"SourceCharacterCodePoint": "009D","TargetCharacterCodePoint": "0194"}
,{"SourceCharacterCodePoint": "0085","TargetCharacterCodePoint": "0195"}
,{"SourceCharacterCodePoint": "0008","TargetCharacterCodePoint": "0196"}
,{"SourceCharacterCodePoint": "0087","TargetCharacterCodePoint": "0197"}
,{"SourceCharacterCodePoint": "0018","TargetCharacterCodePoint": "0198"}
,{"SourceCharacterCodePoint": "0019","TargetCharacterCodePoint": "0199"}
,{"SourceCharacterCodePoint": "0092","TargetCharacterCodePoint": "019A"}
,{"SourceCharacterCodePoint": "008F","TargetCharacterCodePoint": "019B"}
,{"SourceCharacterCodePoint": "001C","TargetCharacterCodePoint": "019C"}
,{"SourceCharacterCodePoint": "001D","TargetCharacterCodePoint": "019D"}
,{"SourceCharacterCodePoint": "001E","TargetCharacterCodePoint": "019E"}
,{"SourceCharacterCodePoint": "001F","TargetCharacterCodePoint": "019F"}
,{"SourceCharacterCodePoint": "0080","TargetCharacterCodePoint": "01A0"}
,{"SourceCharacterCodePoint": "0081","TargetCharacterCodePoint": "01A1"}
,{"SourceCharacterCodePoint": "0082","TargetCharacterCodePoint": "01A2"}
,{"SourceCharacterCodePoint": "0083","TargetCharacterCodePoint": "01A3"}
,{"SourceCharacterCodePoint": "0084","TargetCharacterCodePoint": "01A4"}
,{"SourceCharacterCodePoint": "000A","TargetCharacterCodePoint": "01A5"}
,{"SourceCharacterCodePoint": "0017","TargetCharacterCodePoint": "01A6"}
,{"SourceCharacterCodePoint": "001B","TargetCharacterCodePoint": "01A7"}
,{"SourceCharacterCodePoint": "0088","TargetCharacterCodePoint": "01A8"}
,{"SourceCharacterCodePoint": "0089","TargetCharacterCodePoint": "01A9"}
,{"SourceCharacterCodePoint": "008A","TargetCharacterCodePoint": "01AA"}
,{"SourceCharacterCodePoint": "008B","TargetCharacterCodePoint": "01AB"}
,{"SourceCharacterCodePoint": "008C","TargetCharacterCodePoint": "01AC"}
,{"SourceCharacterCodePoint": "0005","TargetCharacterCodePoint": "01AD"}
,{"SourceCharacterCodePoint": "0006","TargetCharacterCodePoint": "01AE"}
,{"SourceCharacterCodePoint": "0007","TargetCharacterCodePoint": "01AF"}
,{"SourceCharacterCodePoint": "0090","TargetCharacterCodePoint": "01B0"}
,{"SourceCharacterCodePoint": "0091","TargetCharacterCodePoint": "01B1"}
,{"SourceCharacterCodePoint": "0016","TargetCharacterCodePoint": "01B2"}
,{"SourceCharacterCodePoint": "0093","TargetCharacterCodePoint": "01B3"}
,{"SourceCharacterCodePoint": "0094","TargetCharacterCodePoint": "01B4"}
,{"SourceCharacterCodePoint": "0095","TargetCharacterCodePoint": "01B5"}
,{"SourceCharacterCodePoint": "0096","TargetCharacterCodePoint": "01B6"}
,{"SourceCharacterCodePoint": "0004","TargetCharacterCodePoint": "01B7"}
,{"SourceCharacterCodePoint": "0098","TargetCharacterCodePoint": "01B8"}
,{"SourceCharacterCodePoint": "0099","TargetCharacterCodePoint": "01B9"}
,{"SourceCharacterCodePoint": "009A","TargetCharacterCodePoint": "01BA"}
,{"SourceCharacterCodePoint": "009B","TargetCharacterCodePoint": "01BB"}
,{"SourceCharacterCodePoint": "0014","TargetCharacterCodePoint": "01BC"}
,{"SourceCharacterCodePoint": "0015","TargetCharacterCodePoint": "01BD"}
,{"SourceCharacterCodePoint": "009E","TargetCharacterCodePoint": "01BE"}
,{"SourceCharacterCodePoint": "001A","TargetCharacterCodePoint": "01BF"}
,{"SourceCharacterCodePoint": "009F","TargetCharacterCodePoint": "027F"}
```