

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

# 使用 AWS DMS 將 Oracle 分割的資料表遷移至 PostgreSQL
<a name="migrate-an-oracle-partitioned-table-to-postgresql-by-using-aws-dms"></a>

*Saurav Mishra 和 Eduardo Valentim，Amazon Web Services*

## 總結
<a name="migrate-an-oracle-partitioned-table-to-postgresql-by-using-aws-dms-summary"></a>

此模式說明如何使用不支援原生分割的 AWS Database Migration Service (AWS DMS)，加速將分割的資料表從 Oracle 載入 PostgreSQL。目標 PostgreSQL 資料庫可以安裝在 Amazon Elastic Compute Cloud (Amazon EC2) 上，也可以是 PostgreSQL 的 Amazon Relational Database Service (Amazon RDS) 或 Amazon Aurora PostgreSQL 相容版本資料庫執行個體。 

上傳分割的資料表包含下列步驟：

1. 建立類似於 Oracle 分割區資料表的父資料表，但不包含任何分割區。

1. 建立將繼承自您在步驟 1 中建立之父資料表的子資料表。

1. 建立程序函數和觸發程序來處理父資料表中的插入。

不過，由於每次插入都會觸發觸發，因此使用 AWS DMS 的初始負載可能會非常慢。

為了加速從 Oracle 到 PostgreSQL 9.0 的初始載入，此模式會為每個分割區建立個別的 AWS DMS 任務，並載入對應的子資料表。然後，您可以在切換期間建立觸發。 

PostgreSQL 第 10 版支援原生分割。不過，在某些情況下，您可能會決定使用繼承的分割。如需詳細資訊，請參閱[其他資訊](#migrate-an-oracle-partitioned-table-to-postgresql-by-using-aws-dms-additional)一節。

## 先決條件和限制
<a name="migrate-an-oracle-partitioned-table-to-postgresql-by-using-aws-dms-prereqs"></a>

**先決條件**
+ 作用中的 AWS 帳戶
+ 具有分割資料表的來源 Oracle 資料庫
+ AWS 上的 PostgreSQL 資料庫

**產品版本**
+ PostgreSQL 9.0

## Architecture
<a name="migrate-an-oracle-partitioned-table-to-postgresql-by-using-aws-dms-architecture"></a>

**來源技術堆疊**
+ Oracle 中的分割資料表

**目標技術堆疊**
+ PostgreSQL 中的分割資料表 （在 Amazon EC2、Amazon RDS for PostgreSQL 或 Aurora PostgreSQL 上）

**目標架構**

![\[Oracle 中的分割資料表資料會移至每個分割區的 AWS DMS 任務，然後移至 PostgreSQL。\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/images/pattern-img/7fa2898e-3308-436a-aec8-ab6f680d7bac/images/1b9742ea-a13d-434c-83a7-56686cf76ea0.png)


## 工具
<a name="migrate-an-oracle-partitioned-table-to-postgresql-by-using-aws-dms-tools"></a>
+ [AWS Database Migration Service (AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) 可協助您將資料存放區遷移至 AWS 雲端，或在雲端和內部部署設定的組合之間遷移。

## 史詩
<a name="migrate-an-oracle-partitioned-table-to-postgresql-by-using-aws-dms-epics"></a>

### 設定 AWS DMS
<a name="set-up-aws-dms"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 在 PostgreSQL 中建立資料表。 | 在 PostgreSQL 中建立父資料表和對應的子資料表，其中包含分割區所需的檢查條件。 | DBA | 
| 為每個分割區建立 AWS DMS 任務。 | 在 AWS DMS 任務中包含分割區的篩選條件。將分割區對應至對應的 PostgreSQL 子資料表。 | DBA | 
| 使用完全載入和變更資料擷取 (CDC) 執行 AWS DMS 任務。 | 請確定 `StopTaskCachedChangesApplied` 參數設定為 ，`true`且 `StopTaskCachedChangesNotApplied` 參數設定為 `false`。 | DBA | 

### 剪下
<a name="cut-over"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 停止複寫任務。 | 在您停止任務之前，請確認來源和目的地是同步的。 | DBA | 
| 在父資料表上建立觸發。 | 由於父資料表會收到所有插入和更新命令，請建立觸發程序，根據分割條件將這些命令路由至個別的子資料表。 | DBA | 

## 相關資源
<a name="migrate-an-oracle-partitioned-table-to-postgresql-by-using-aws-dms-resources"></a>
+ [AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)
+ [資料表分割 (PostgreSQL 文件）](https://www.postgresql.org/docs/10/ddl-partitioning.html)

## 其他資訊
<a name="migrate-an-oracle-partitioned-table-to-postgresql-by-using-aws-dms-additional"></a>

雖然 PostgreSQL 第 10 版支援原生分割區，但您可能會決定將繼承的分割區用於下列使用案例：
+ 分割會強制執行規則，表示所有分割區都必須具有與父系相同的資料欄集，但資料表繼承支援具有額外資料欄的子系。
+ 資料表繼承支援多個繼承。
+ 宣告式分割僅支援清單和範圍分割。使用資料表繼承，您可以根據需要分割資料。不過，如果限制排除無法有效剔除分割區，則查詢效能會受到影響。
+ 與使用資料表繼承相比，某些操作在使用宣告式分割時需要更強大的鎖定。例如，在分割資料表中新增或移除分割區時，需要在父資料表上`ACCESS EXCLUSIVE`鎖定，而`SHARE UPDATE EXCLUSIVE`鎖定足以進行一般繼承。

使用個別任務分割區時，如果有任何 AWS DMS 驗證問題，您也可以重新載入分割區。為了獲得更好的效能和複寫控制，請在不同的複寫執行個體上執行任務。