

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

# Babelfish 架構
<a name="babelfish-architecture"></a>

建立啟用 Babelfish 的 Aurora PostgreSQL 叢集時，Aurora 會在叢集上佈建名為 `babelfish_db` 的 PostgreSQL 資料庫。所有遷移的 SQL Server 物件和結構都位於此資料庫。

**注意**  
在 Aurora PostgreSQL 叢集中，為 Babelfish 保留了 `babelfish_db` 資料庫名稱。若自行在 Babelfish 資料庫叢集上建立 "babelfish\$1db" 資料庫，可能會導致 Aurora 無法成功佈建 Babelfish。

連線至 TDS 連接埠時，工作階段就放在 `babelfish_db` 資料庫中。就 T-SQL 而言，結構看似連線至 SQL Server 執行個體。您會看到 `master`、`msdb` 和 `tempdb` 資料庫，以及 `sys.databases` 目錄。您可以建立其他使用者資料庫，並使用 USE 陳述式來切換資料庫。您建立的 SQL Server 使用者資料庫會扁平化為 `babelfish_db` PostgreSQL 資料庫。您的資料庫保留同於或類似於 SQL Server 提供的跨資料庫語法和語意。

## 搭配單一資料庫或多個資料庫來使用 Babelfish
<a name="babelfish-single_vs_multi_db"></a>

建立適用於 Babelfish 的 Aurora PostgreSQL 叢集時，您可以選擇單獨使用一個 SQL Server 資料庫，或同時使用多個 SQL Server 資料庫。您的選擇會影響 `babelfish_db` 資料庫內的 SQL Server 結構描述名稱如何出現在 Aurora PostgreSQL 中。遷移模式存放在 `migration_mode` 參數中。您不得在建立叢集之後變更此參數，因為您可能會失去先前建立之所有 SQL 物件的存取權。

在單一資料庫模式中，SQL Server 資料庫的結構描述名稱在 PostgreSQL 的 `babelfish_db` 資料庫中仍保持相同。如果您選擇只遷移單一資料庫，則可以利用 SQL Server 中使用的同一名稱，在 PostgreSQL 中參考已遷移之使用者資料庫的結構描述名稱。例如，`dbo` 和 `smith` 結構描述位於 `dbA` 資料庫內*。*

![\[\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/AuroraUserGuide/images/babelfish_single_db_mode.png)


透過 TDS 連線時，您可以執行 `USE dba` 來查看架構描述 `dbo` 和 `dev`，就像在 SQL Server 中一樣。從 PostgreSQL 也可以看到未變更的結構描述名稱。

在多資料庫模式中，若從 PostgreSQL 存取，使用者資料庫的結構描述名稱變成 `dbname_schemaname`。若從 T-SQL 存取，結構描述名稱保持不變。

![\[\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/AuroraUserGuide/images/babelfish_multi_db_mode.png)


如圖所示，當透過 TDS 連接埠連線及使用 T-SQL 時，多資料庫模式和單資料庫模式與 SQL Server 相同。例如：`USE dbA` 會列出結構描述 `dbo` 和 `dev`，就如同在 SQL 伺服器中一樣。從 PostgreSQL 可以看到對應的結構描述名稱，例如 `dba_dbo` 和 `dba_dev`。

每個資料庫仍然包含您的結構描述。SQL Server 結構描述名稱的前面加上每個資料庫的名稱，以底線為分隔符號，例如：
+ `dba` 包含 `dba_dbo` 和 `dba_dev`。
+ `dbb` 包含 `dbb_dbo` 和 `dbb_test`。
+ `dbc` 包含 `dbc_dbo` 和 `dbc_prod`。

在 `babelfish_db` 資料庫內，T-SQL 使用者仍需執行 `USE dbname` 來切換資料庫環境，外觀和風格上仍類似於 SQL Server。

## 選擇遷移模式
<a name="babelfish-choosing_single_vs_multi"></a>

每個遷移模式各有優缺點。請根據您的使用者資料庫數目和遷移計畫來選擇遷移模式。在建立與 Babelfish 搭配使用的叢集之後，您不得變更遷移模式，因為可能失去所有先前建立之 SQL 物件的存取權。選擇移轉模式時，請考量使用者資料庫和用戶端的需求。

建立適用於 Babelfish 的叢集時，Aurora PostgreSQL 會建立系統資料庫 `master` 和 `tempdb`。如果您在系統資料庫中 (`master` 或 `tempdb`) 建立或修改物件，請務必在新叢集中重新建立這些物件。與 SQL Server 不同，在 `tempdb` 叢集重新啟動後，Babelfish 不會重新初始化。

在下列情況下，請使用單一資料庫遷移模式：
+ 如果您遷移單一 SQL Server 資料庫。在單一資料庫模式中，從 PostgreSQL 存取的遷移結構描述名稱與原始 SQL Server 結構描述名稱相同。若您想要最佳化現有 SQL 查詢，以便透過 PostgreSQL 連線執行，這會減少對現有 SQL 查詢的程式碼變更。
+ 如果最終目標是完整遷移至原生 Aurora PostgreSQL。在遷移之前，請將結構描述合併為單一結構描述 (`dbo`)，然後遷移至單一叢集，以減少必要的變更。

在下列情況下，請使用多資料庫遷移模式：
+ 若您想要在同一個執行個體中擁有多個使用者資料庫的預設 SQL Server 體驗。
+ 若需要一起移轉多個使用者資料庫。