

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

# 使用具體化視觀表和 AWS DMS，從 Oracle 8i 或 9i 遷移至 Amazon RDS for PostgreSQL
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-materialized-views-and-aws-dms"></a>

*Kumar Babu P G 和 Pragnesh Patel，Amazon Web Services*

## 總結
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-materialized-views-and-aws-dms-summary"></a>

此模式說明如何將內部部署舊版 Oracle 8i 或 9i 資料庫遷移至 Amazon Relational Database Service (Amazon RDS) for PostgreSQL 或 Amazon Aurora PostgreSQL 相容版本。 

AWS Database Migration Service (AWS DMS) 不支援 Oracle 8i 或 9i 作為來源，因此此模式使用與 AWS DMS 相容的中繼 Oracle 資料庫執行個體，例如 Oracle 10g 或 11g。它也會使用具體化視觀表功能，將資料從來源 Oracle 8i/9i 執行個體遷移至中繼 Oracle 10g/11g 執行個體。

AWS Schema Conversion Tool (AWS SCT) 會轉換資料庫結構描述，而 AWS DMS 會將資料遷移至目標 PostgreSQL 資料庫。 

此模式可協助想要從舊版 Oracle 資料庫遷移的使用者，將資料庫停機時間降至最低。在此實作中，停機時間會受限於在目標資料庫上建立或驗證所有外部金鑰、觸發條件和序列所需的時間長度。 

模式使用已安裝 Oracle 10g/11g 資料庫的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體，以協助 AWS DMS 串流資料。您可以暫停從現場部署 Oracle 資料庫到中繼 Oracle 執行個體的串流複寫，讓 AWS DMS 能夠跟上資料驗證的進度，或使用其他資料驗證工具。當 AWS DMS 已完成遷移目前的變更時，PostgreSQL 資料庫執行個體和中繼 Oracle 資料庫將具有相同的資料。

## 先決條件和限制
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-materialized-views-and-aws-dms-prereqs"></a>

**先決條件**
+ 作用中的 AWS 帳戶
+ 內部部署資料中心中的來源 Oracle 8i 或 9i 資料庫 
+ 在內部部署資料中心和 AWS 之間設定的 AWS Direct Connect
+ 在本機電腦或安裝 AWS SCT 的 EC2 執行個體上安裝的 AWS SCT 連接器的 Java Database Connectivity (JDBC) 驅動程式
+ 熟悉[使用 Oracle 資料庫做為 AWS DMS 來源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)
+ 熟悉[使用 PostgreSQL 資料庫做為 AWS DMS 目標](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html)

**限制**
+ 資料庫大小限制為 64 TB

**產品版本**
+ 來源資料庫的 Oracle 8i 或 9i
+ 適用於中繼資料庫的 Oracle 10g 或 11g
+ PostgreSQL 10.17 或更新版本

## Architecture
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-materialized-views-and-aws-dms-architecture"></a>

**來源技術堆疊**
+ Oracle 8i 或 9i 資料庫 

**目標技術堆疊**
+ Amazon RDS for PostgreSQL 或 Aurora PostgreSQL 相容

**目標架構**

![\[從舊版 Oracle 資料庫遷移至 Amazon RDS 或 Aurora 的架構\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/images/pattern-img/8add9b21-1b62-46a2-bb8e-0350f36a924a/images/f34f9b0f-f1da-4c27-a385-71b12d16c375.png)


## 工具
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-materialized-views-and-aws-dms-tools"></a>
+ [AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.html) 有助於快速安全地遷移資料庫。來源資料庫在遷移期間保持完全運作，將依賴資料庫的應用程式停機時間降至最低。AWS DMS 可以在最廣泛使用的商業和開放原始碼資料庫之間遷移您的資料。
+ [AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) 會自動將來源資料庫結構描述和大多數資料庫程式碼物件，包括檢視、預存程序和函數，轉換為與目標資料庫相容的格式。無法自動轉換的物件會清楚標示，以便手動轉換以完成遷移。AWS SCT 也可以掃描應用程式原始碼以取得內嵌 SQL 陳述式，並將其轉換為資料庫結構描述轉換專案的一部分。在此過程中，AWS SCT 會透過將舊版 Oracle 和 SQL Server 函數轉換為其 AWS 對等函數來執行雲端原生程式碼最佳化，協助您在遷移資料庫的同時現代化應用程式。當結構描述轉換完成時，AWS SCT 可以使用內建的資料遷移代理程式，協助將資料從各種資料倉儲遷移到 Amazon Redshift。 

## 最佳實務
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-materialized-views-and-aws-dms-best-practices"></a>

如需重新整理具體化視觀表的最佳實務，請參閱下列 Oracle 文件：
+ [重新整理具體化視觀表](https://docs.oracle.com/database/121/DWHSG/refresh.htm#DWHSG-GUID-64068234-BDB0-4C12-AE70-75571046A586)
+ [具體化視觀表的快速重新整理](https://docs.oracle.com/database/121/DWHSG/refresh.htm#DWHSG8361)

## 史詩
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-materialized-views-and-aws-dms-epics"></a>

### 在 EC2 執行個體上安裝 Oracle 並建立具體化視觀表
<a name="install-oracle-on-an-ec2-instance-and-create-materialized-views"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 設定 EC2 執行個體的網路。 | 建立虛擬私有雲端 (VPC)、子網路、網際網路閘道、路由表和安全群組。 | AWS SysAdmin | 
| 建立 EC2 執行個體。 | 選取 EC2 執行個體的 Amazon Machine Image (AMI)。選擇執行個體大小並設定執行個體詳細資訊：執行個體數量 (1)、上一個步驟的 VPC 和子網路、自動指派公有 IP 和其他選項。新增儲存體、設定安全群組，以及啟動執行個體。出現提示時，請建立並儲存下一個步驟的金鑰對。 | AWS SysAdmin | 
| 在 EC2 執行個體上安裝 Oracle。 | 取得授權和必要的 Oracle 二進位檔，並在 EC2 執行個體上安裝 Oracle 10g 或 11g。 | DBA | 
| 設定 Oracle 聯網。 | 在 中修改或新增項目`listener.ora`，以連線至內部部署來源 Oracle 8i/9i 資料庫，然後建立資料庫連結。 | DBA | 
| 建立具體化視觀表。 | 識別要在來源 Oracle 8i/9i 資料庫中複寫的資料庫物件，然後使用資料庫連結為所有物件建立具體化檢視。 | DBA | 
| 部署指令碼，以所需的間隔重新整理具體化視觀表。 | 開發和部署指令碼，以在 Amazon EC2 Oracle 10g/11g 執行個體上以所需的間隔重新整理具體化視觀表。使用增量重新整理選項來重新整理具體化視觀表。 | DBA | 

### 將 Oracle 資料庫結構描述轉換為 PostgreSQL
<a name="convert-the-oracle-database-schema-to-postgresql"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 設定 AWS SCT。 | 建立新的報告，然後連接至 Oracle 做為來源，而 PostgreSQL 做為目標。在專案設定中，開啟 **SQL 指令碼**索引標籤。將目標 SQL 指令碼變更為**多個檔案**。(AWS SCT 不支援 Oracle 8i/9i 資料庫，因此您必須在中繼 Oracle 10g/11g 執行個體上還原僅限結構描述的傾印，並將其用作 AWS SCT 的來源。) | DBA | 
| 轉換 Oracle 資料庫結構描述。 | 在**動作**索引標籤上，選擇**產生報告**、**轉換結構描述**，然後**儲存為 SQL**。 | DBA | 
| 修改 SQL 指令碼。 | 根據最佳實務進行修改。例如，切換到適當的資料類型，並為 Oracle 特定函數開發 PostgreSQL 對等項目。 | DBA、DevDBA | 

### 建立和設定 Amazon RDS 資料庫執行個體以託管轉換後的資料庫
<a name="create-and-configure-the-amazon-rds-db-instance-to-host-the-converted-database"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 建立 Amazon RDS 資料庫執行個體。 | 在 Amazon RDS 主控台中，建立新的 PostgreSQL 資料庫執行個體。 | AWS SysAdmin、DBA | 
| 設定資料庫執行個體。 | 指定資料庫引擎版本、資料庫執行個體類別、異地同步備份部署、儲存類型和配置的儲存。輸入資料庫執行個體識別符、主要使用者名稱和主要密碼。 | AWS SysAdmin、DBA | 
| 設定網路和安全性。 | 指定 VPC、子網路群組、公有可存取性、可用區域偏好設定和安全群組。 | DBA、SysAdmin | 
| 設定資料庫選項。 | 指定資料庫名稱、連接埠、參數群組、加密和主金鑰。 | DBA、AWS SysAdmin | 
| 設定備份。 | 指定備份保留期、備份時段、開始時間、持續時間，以及是否要將標籤複製到快照。 | AWS SysAdmin、DBA | 
| 設定監控選項。 | 啟用或停用增強型監控和效能洞察。 | AWS SysAdmin、DBA | 
| 設定維護選項。 | 指定自動次要版本升級、維護時段，以及開始日期、時間和持續時間。 | AWS SysAdmin、DBA | 
| 從 AWS SCT 執行預遷移指令碼。 | 在目標 Amazon RDS for PostgreSQL 執行個體上，使用 AWS SCT 中的 SQL 指令碼和其他修改來建立資料庫結構描述。這些可能包括執行多個指令碼，包括使用者建立、資料庫建立、結構描述建立、資料表、檢視、函數和其他程式碼物件。 | AWS SysAdmin、DBA | 

### 使用 AWS DMS 遷移資料
<a name="migrate-data-by-using-aws-dms"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 在 AWS DMS 中建立複寫執行個體。 | 完成名稱、執行個體類別、VPC （與 EC2 執行個體相同）、異地同步備份和公有可存取性的欄位。在進階組態區段中，指定配置的儲存、子網路群組、可用區域、VPC 安全群組和 AWS Key Management Service (AWS KMS) 金鑰。 | AWS SysAdmin、DBA | 
| 建立來源資料庫端點。 | 指定端點名稱、類型、來源引擎 (Oracle)、伺服器名稱 (EC2 執行個體的私有 DNS 名稱）、連接埠、SSL 模式、使用者名稱、密碼、SID、VPC （指定具有複寫執行個體的 VPC) 和複寫執行個體。若要測試連線，請選擇**執行測試**，然後建立端點。您也可以設定下列進階設定：**maxFileSize** 和 **numberDataTypeScale**。 | AWS SysAdmin、DBA | 
| 將 AWS DMS 連線至 Amazon RDS for PostgreSQL。 | 如果您的 PostgreSQL 資料庫位於另一個 VPCs，請建立跨 VPC 連線的遷移安全群組。 | AWS SysAdmin、DBA | 
| 建立目標資料庫端點。 | 指定端點名稱、類型、來源引擎 (PostgreSQL)、伺服器名稱 (Amazon RDS 端點）、連接埠、SSL 模式、使用者名稱、密碼、資料庫名稱、VPC （指定具有複寫執行個體的 VPC) 和複寫執行個體。若要測試連線，請選擇**執行測試**，然後建立端點。您也可以設定下列進階設定：**maxFileSize** 和 **numberDataTypeScale**。 | AWS SysAdmin、DBA | 
| 建立 AWS DMS 複寫任務。 | 指定任務名稱、複寫執行個體、來源和目標端點，以及複寫執行個體。針對遷移類型，選擇**遷移現有資料並複寫持續變更**。清除**建立時啟動任務**核取方塊。 | AWS SysAdmin、DBA | 
| 設定 AWS DMS 複寫任務設定。 | 針對目標資料表準備模式，選擇**不執行任何**動作。完全載入完成後停止任務 （以建立主索引鍵）。指定有限或完整 LOB 模式，並啟用控制資料表。或者，您可以設定 **CommitRate** 進階設定。 | DBA | 
| 設定資料表映射。 | 在**資料表映射**區段中，為遷移中包含的所有結構描述中的所有資料表建立包含規則，然後建立排除規則。新增三個轉換規則，將結構描述、資料表和資料欄名稱轉換為小寫，並新增此特定遷移所需的任何其他規則。 | DBA | 
| 啟動 任務。 | 啟動複寫任務。確定完全載入正在執行中。在主要 Oracle 資料庫`ALTER SYSTEM SWITCH LOGFILE`上執行 以啟動任務。 | DBA | 
| 從 AWS SCT 執行中遷移指令碼。 | 在 Amazon RDS for PostgreSQL 中，執行下列指令碼： `create_index.sql`和 `create_constraint.sql`（如果最初未建立完整的結構描述）。 | DBA | 
| 繼續任務以繼續變更資料擷取 (CDC)。 | 在 Amazon RDS for PostgreSQL 資料庫執行個體`VACUUM`上執行，然後重新啟動 AWS DMS 任務以套用快取的 CDC 變更。 | DBA | 

### 切換到 PostgreSQL 資料庫
<a name="cut-over-to-the-postgresql-database"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 檢查 AWS DMS 日誌和驗證資料表。 | 檢查並修正任何複寫或驗證錯誤。 | DBA | 
| 停止使用現場部署 Oracle 資料庫及其相依性。 | 停止所有 Oracle 相依性、關閉 Oracle 資料庫上的接聽程式，然後執行 `ALTER SYSTEM SWITCH LOGFILE`。在未顯示活動時停止 AWS DMS 任務。 | DBA | 
| 從 AWS SCT 執行遷移後指令碼。 | 在 Amazon RDS for PostgreSQL 中，執行這些指令碼：`create_foreign_key_constraint.sql and create_triggers.sql`。請確定序列是最新的。 | DBA | 
| 完成其他 Amazon RDS for PostgreSQL 步驟。 | 視需要遞增序列以符合 Oracle、執行 `VACUUM`和 `ANALYZE`，並拍攝快照以符合規範。 | DBA | 
| 開啟 Amazon RDS for PostgreSQL 的連線。 | 從 Amazon RDS for PostgreSQL 移除 AWS DMS 安全群組、新增生產安全群組，並將您的應用程式指向新的資料庫。 | DBA | 
| 清除 AWS DMS 物件。 | 移除端點、複寫任務、複寫執行個體和 EC2 執行個體。 | SysAdmin、DBA | 

## 相關資源
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-materialized-views-and-aws-dms-resources"></a>
+ [AWS DMS 文件](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.html)
+ [AWS SCT 文件](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)
+ [Amazon RDS for PostgreSQL 定價](https://aws.amazon.com/rds/postgresql/pricing/)
+ [使用 Oracle 資料庫做為 AWS DMS 的來源](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)
+ [使用 PostgreSQL 資料庫做為 AWS DMS 的目標](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html)