

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

# 將 SQL Server 資料庫遷移至 Babelfish for Aurora PostgreSQL
<a name="babelfish-migration"></a>

您可以使用 Babelfish for Aurora PostgreSQL 將 SQL Server 資料庫遷移至 Amazon Aurora PostgreSQL 資料庫叢集。遷移之前，請檢閱[搭配單一資料庫或多個資料庫來使用 Babelfish](babelfish-architecture.md#babelfish-single_vs_multi_db)。

**Topics**
+ [遷移程序概觀](#babelfish-migration.process-summary)
+ [評估和處理 SQL Server 與 Babelfish 之間的差異](#babelfish-migration.assessing-the-source)
+ [用於從 SQL Server 遷移至 Babelfish 的匯入/匯出工具](#babelfish-migration.import-export-tools)

## 遷移程序概觀
<a name="babelfish-migration.process-summary"></a>

下列摘要列出成功遷移 SQL Server 應用程式並使其適用於 Babelfish 所需的步驟。如需與可用於匯出與匯入程序的工具相關的資訊，或其他詳細資料，請參閱 [用於從 SQL Server 遷移至 Babelfish 的匯入/匯出工具](#babelfish-migration.import-export-tools)。若要載入資料，建議您使用 AWS DMS 搭配 Aurora PostgreSQL 資料庫叢集做為目標端點。

1. 建立一個 Babelfish 開啟的新 Aurora PostgreSQL 資料庫叢集。若要了解作法，請參閱[建立 Babelfish for Aurora PostgreSQL DB 叢集](babelfish-create.md)。

   若要匯入從 SQL Server 資料庫匯出的各種 SQL 成品，請使用 SQL Server 工具 (例如 [sqlcmd](https://docs.microsoft.com/en-us/sql/tools/sqlcmd-utility?view=sql-server-ver15)) 來連線至 Babelfish 叢集。如需詳細資訊，請參閱[使用 SQL Server 用戶端來連線至資料庫叢集](babelfish-connect-sqlserver.md)。

1. 在您要遷移的 SQL Server 資料庫上，匯出資料定義語言 (DDL)。DDL 是描述資料庫物件的 SQL 程式碼，這些物件包含使用者資料 (例如資料表、索引和檢視表) 和使用者撰寫的資料庫程式碼 (例如預存程序、使用者定義函數和觸發程序)。

   如需詳細資訊，請參閱[使用 SQL Server Management Studio (SSMS) 遷移至 Babelfish](#babelfish-migration.import-export-tools.ssms)。

1. 執行評估工具來評估您可能需要進行任何變更的範圍，讓 Babelfish 能夠有效地支援在 SQL Server 上執行的應用程式。如需詳細資訊，請參閱[評估和處理 SQL Server 與 Babelfish 之間的差異](#babelfish-migration.assessing-the-source)。

1. 檢閱 AWS DMS 目標端點限制，並視需要更新 DDL 指令碼。如需詳細資訊，請參閱[使用 Babelfish for Aurora PostgreSQL 作為目標](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html#CHAP_Target.PostgreSQL.Babelfish)中將 PostgreSQL 目標端點與 Babelfish 資料表搭配使用的限制。

1. 在新的 Babelfish 資料庫叢集上，於您指定的 T-SQL 內執行 DDL，以僅建立結構描述、使用者定義的資料類型，以及具有主索引鍵條件約束的資料表。

1. 使用 AWS DMS 將資料從 SQL Server 遷移至 Babelfish 資料表。對於使用 SQL Server 變更資料擷取或 SQL 複寫的連續複寫，請使用 Aurora PostgreSQL 而不是 Babelfish 作為端點。若要這樣做，請參閱[使用 Babelfish for Aurora PostgreSQL 作為 AWS Database Migration Service的目標](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html#CHAP_Target.PostgreSQL.Babelfish)。

1. 資料載入完成時，建立所有支援 Babelfish 叢集上應用程式的剩餘 T-SQL 物件。

1.  將用戶端應用程式重新設定成連線至 Babelfish 端點，而不是 SQL Server 資料庫。如需詳細資訊，請參閱[連線至 Babelfish 資料庫叢集](babelfish-connect.md)。

1. 視需要修改應用程式並重新測試。如需詳細資訊，請參閱[Babelfish for Aurora PostgreSQL 與 SQL Server 之間的差異](babelfish-compatibility.md)。

您仍然需要評估您的用戶端 SQL 查詢。從 SQL Server 執行個體產生的結構描述僅轉換伺服器端 SQL 程式代碼。建議您採取下列步驟：
+ 透過將 SQL Server Profiler 與 TSQL\_Replay 預先定義的範本搭配使用，來擷取用戶端查詢。此範本會擷取 T-SQL 陳述式資訊，之後您可以重播這些資訊以進行反覆調校與測試。您可以從 **Tools** (工具) 功能表啟動 SQL Server Management Studio 內的分析工具。選擇 **SQL Server Profiler** 開啟分析器，然後選擇 TSQL\_Replay 範本。

  若要用於 Babelfish 遷移，請啟動追蹤，然後使用功能測試執行應用程式。分析器會擷取 T-SQL 陳述式。完成測試後，請停止追蹤。將結果連同您的用戶端查詢儲存至 XML 檔案 (File (檔案) > Save as (另存新檔) > Trace XML File for Replay (追蹤用於重播的 XML 檔案))。

  如需詳細資訊，請參閱 Microsoft 文件中的 [SQL Server Profiler](https://docs.microsoft.com/en-us/sql/tools/sql-server-profiler/sql-server-profiler?view=sql-server-ver16)。如需 TSQL\_Replay 範本的詳細資訊，請參閱 [SQL Server Profiler 範本](https://docs.microsoft.com/en-us/sql/tools/sql-server-profiler/sql-server-profiler-templates?view=sql-server-ver16)。
+ 如果應用程式執行複雜的用戶端 SQL 查詢，建議您使用 Babelfish Compass 來分析這些查詢是否相容於 Babelfish。如果分析指出用戶端 SQL 陳述式包含不支援的 SQL 功能，請檢閱用戶端應用程式的 SQL 部分，並視需要修改。
+ 您也可以擷取 SQL 查詢作為延伸事件 (.xel 格式)。若要這樣做，請使用 SSMS XEvent Profiler。在產生 .xel 檔案之後，請將 SQL 陳述式擷取到 Compass 隨後可以處理的 .xml 檔案。如需詳細資訊，請參閱 Microsoft 文件中的[使用 SSMS XEvent Profler](https://learn.microsoft.com/en-us/sql/relational-databases/extended-events/use-the-ssms-xe-profiler?view=sql-server-ver16)。

如果您對所遷移應用程式需要的所有測試、分析和任何修改都滿意，便可開始將 Babelfish 資料庫用於生產環境。若要這麼做，請停止原始資料庫，並將即時用戶端應用程式轉向使用 Babelfish TDS 連接埠。

**注意**  
AWS DMS 現在支援從 Babelfish 複寫資料。如需詳細資訊，請參閱 [AWS DMS 現支援 Babelfish for Aurora PostgreSQL 作為來源](https://aws.amazon.com/about-aws/whats-new/2024/06/aws-dms-babelfish-aurora-postgresql-source/)。

## 評估和處理 SQL Server 與 Babelfish 之間的差異
<a name="babelfish-migration.assessing-the-source"></a>

 為了獲得最佳結果，建議您先評估產生的 DDL/DML 和用戶端查詢程式碼，再真正地將 SQL Server 資料庫應用程式遷移到 Babelfish。根據 Babelfish 的版本及應用程式實作的 SQL Server 特有功能，您可能需要重構您的應用程式，或使用 Babelfish 中尚未完全支援功能的替代功能。
+ 若要評估 SQL Server 應用程式碼，請在產生的 DDL 上使用 Babelfish Compass，來判斷 Babelfish 對 T-SQL 程式碼支援的程度。在 Babelfish 上執行之前，請找出可能需要修改的 T-SQL 程式碼。如需此工具的詳細資訊，請參閱 GitHub 上的 [Babelfish Compass 工具](https://github.com/babelfish-for-postgresql/babelfish_compass/releases/latest)。
**注意**  
Babelfish Compass 是一種開放原始碼工具。請透過 GitHub 回報 Babelfish Compass 的任何問題，而不是透過 AWS Support。

您可以使用產生指令碼精靈搭配 SQL Server Management Studio (SSMS) 來產生由 Babelfish Compass 評估的 SQL 檔案。我們建議採取下列步驟來簡化評估。

1. 在 **Choose Objects** (選擇物件) 頁面上，選擇 **Script entire database and all database objects** (編寫整個資料庫和所有資料庫物件的指令碼)。  
![使用 SSMS 產生指令碼精靈來選擇物件。](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/AuroraUserGuide/images/Babelfish-wizard-choose-objects.png)

1. 針對 **Set Scripting Options** (設定指令碼選項)，選擇 **Save as script file** (儲存為指令碼檔案) 作為 **Single script file** (單一指令碼檔案)。  
![使用 SSMS 產生指令碼精靈來設定指令碼選項。](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/AuroraUserGuide/images/Babelfish-wizard-set-scripting-options.png)

1. 選擇 **Advanced** (進階) 來變更預設指令碼選項，以識別通常設定為 false 進行完整評估的功能：
   + Script Change Tracking (指令碼變更追蹤) 設為 True
   + Script Full-Text Indexes (指令碼全文檢索) 設為 True
   + Script Triggers (指令碼觸發條件) 設為 True
   + Script Logins (指令碼登入) 設為 True
   + Script Owner (指令碼擁有者) 設為 True
   + Script Object-Level Permissions (指令碼物件層級許可) 設為 True
   + Script Collations (指令碼定序) 設為 True  
![使用 SSMS 產生指令碼精靈來設定進階指令碼選項。](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/AuroraUserGuide/images/Babelfish-advanced-scripting-options.png)

1. 執行精靈中的其餘步驟來產生檔案。

## 用於從 SQL Server 遷移至 Babelfish 的匯入/匯出工具
<a name="babelfish-migration.import-export-tools"></a>

 我們建議您使用 AWS DMS 做為從 SQL Server 遷移至 Babelfish 的主要工具。不過，Babelfish 支援數種其他方式，使用 SQL Server 工具遷移資料，其中包括下列項目。
+ SQL Server Integration Services (SSIS)，適用於 Babelfish 的所有版本。如需詳細資訊，請參閱[使用 SSIS 和 Babelfish 從 SQL Server 遷移至 Aurora PostgreSQL](https://aws.amazon.com/blogs/database/migrate-from-sql-server-to-aurora-postgresql-using-ssis-and-babelfish/)。
+ 針對 Babelfish 2.1.0 及更新版本使用 SSMS 匯入/匯出精靈。此工具可透過 SSMS 取得，但也可作為獨立工具使用。如需詳細資訊，請參閱 Microsoft 文件中的[歡迎使用 SQL Server 匯入和匯出精靈](https://docs.microsoft.com/en-us/sql/integration-services/import-export-data/welcome-to-sql-server-import-and-export-wizard?view=sql-server-ver16)。
+ Microsoft 大量資料複製程式 (bcp) 公用程式可讓您將 Microsoft SQL Server 執行個體中的資料以您指定的格式複製到資料檔案。如需詳細資訊，請參閱 Microsoft 文件中的 [bcp 公用程式](https://docs.microsoft.com/en-us/sql/tools/bcp-utility?view=sql-server-ver16)。Babelfish 現在支援使用 BCP 用戶端進行資料遷移，而 bcp 公用程式現在支援 `-E`旗標 (用於身分資料欄) 和 -b 旗標 (用於批次插入)。不支援某些 bcp 選項，包括 `-C`、`-T`、`-G`、`-K`、`-R`、`-V` 和 `-h`。

### 使用 SQL Server Management Studio (SSMS) 遷移至 Babelfish
<a name="babelfish-migration.import-export-tools.ssms"></a>

建議針對每個特定物件類型產生個別的檔案。您可以針對每組 DDL 陳述式使用 SSMS 中的產生指令碼精靈，然後以群組的形式修改物件，來修正評估期間找到的任何問題。

執行這些步驟，以使用 AWS DMS 或其他資料遷移方法遷移資料。首先執行這些建立指令碼類型，來取得更好、更快的方法，以在 Aurora PostgreSQL 中的 Babelfish 資料表上載入資料。

1. 執行 `CREATE SCHEMA` 陳述式。

1. 執行 `CREATE TYPE` 陳述式來建立使用者定義的資料類型。

1. 執行具有主索引鍵或唯一條件約束的基本 `CREATE TABLE` 陳述式。

使用建議的匯入/匯出工具執行資料載入。針對下列步驟執行修改的指令碼，以新增剩餘的資料庫物件。您需要建立資料表陳述式來針對條件約束、觸發條件和索引執行這些指令碼。在指令碼產生之後，請刪除建立資料表陳述式。

1. 針對檢查條件約束、外部索引鍵條件約束、預設條件約束執行 `ALTER TABLE` 陳述式。

1. 執行 `CREATE TRIGGER` 陳述式。

1. 執行 `CREATE INDEX` 陳述式。

1. 執行 `CREATE VIEW` 陳述式。

1. 執行 `CREATE STORED PROCEDURE` 陳述式。

**針對每個物件類型產生指令碼**

請使用下列步驟，使用 SSMS 中的產生程式碼精靈，來建立基本建立資料表陳述式。遵循相同步驟，針對不同的物件類型產生指令碼。

1. 連線至現有的 SQL Server 執行個體。

1. 在資料庫名稱上開啟內容選單 (按一下滑鼠右鍵)。

1. 選擇 **Tasks** (任務)，然後選擇 **Generate Scripts...** (產生指令碼...)。

1. 在 **Choose Objects** (選擇物件) 窗格中，選擇 **Select specific database objects** (選取特定資料庫物件)。選擇 **Tables** (資料表)，然後選取所有資料表。選擇 **Next** (下一步) 繼續。  
![使用 SSMS Generate Scripts (產生指令碼) 精靈來選擇物件和資料表。](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/AuroraUserGuide/images/Babelfish-choose-objects-tables.png)

1. 在 **Set Scripting Options** (設定指令碼選項) 頁面上，選擇 **Advanced** (進階) 以開啟 **Options** (選項) 設定。若要產生基本建立資料表陳述式，請變更下列預設值：
   + Script Defaults (指令碼預設值) 變更為 False。
   + Script Extended Properties (指令碼延伸屬性) 變更為 False。Babelfish 不支援延伸屬性。
   + Script Check Constraints (指令碼檢查條件約束) 變更為 False。Script Foreign Keys (指令碼外部索引鍵) 變更為 False。  
![使用 SSMS 產生指令碼精靈來設定進階選項。](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/AuroraUserGuide/images/Babelfish-advance-scripting-def-values.png)

1. 選擇**確定**。

1. 在 **Set Scripting Options** (設定指令碼選項) 頁面上，選擇 **Save as script file** (儲存為指令碼檔案)，然後選擇 **Single script file** (單一指令碼檔案)。輸入您的 **File name** (檔案名稱)。  
![使用 SSMS 產生指令碼精靈來設定指令碼的預設值。](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/AuroraUserGuide/images/Babelfish-set-scripting-def-values.png)

1. 選擇 **Next** (下一步) 以檢視 **Summary wizard** (摘要精靈) 頁面。

1. 選擇 **Next** (下一步) 以開始產生指令碼。

   您可以繼續針對精靈中的其他物件類型產生指令碼。請選擇三次 **Previous** (上一步」按鈕，以回到 **Choose Objects** (選擇物件) 頁面，而不是在儲存檔案之後選擇 **Finish** (完成)。然後重複精靈中的步驟，針對其他物件類型產生指令碼。