

# Babelfish のアーキテクチャ
<a name="babelfish-architecture"></a>

Babelfish を有効にして Aurora PostgreSQL クラスターを作成すると、Aurora は `babelfish_db` という名前の PostgreSQL データベースを使用してクラスターをプロビジョンします。このデータベースは、移行されたすべての SQL Server オブジェクトおよび構造が存在する場所です。

**注記**  
Aurora PostgreSQL クラスターでは、`babelfish_db` データベース名は 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 が提供するものと等しい、またはそれに類するクロスデータベース構文およびセマンティクスを保持します。

## 1 つのデータベースまたは複数のデータベースでの babelfish の使用
<a name="babelfish-single_vs_multi_db"></a>

Babelfish で使用する Aurora PostgreSQL クラスターを作成する場合は、単独で 1 つの SQL Server データベースを使用するか、複数の SQL Server データベースを一緒に使用するかを選択します。選択した内容は、`babelfish_db` データベース内の SQLServer スキーマの名前が Aurora PostgreSQL からどのように表示されるかに影響します。移行モードは `migration_mode` パラメータに保存されます。以前に作成したすべての SQL オブジェクトにアクセスできなくなる可能性があるため、クラスターの作成後にこのパラメータを変更しないでください。

シングルデータベースモードでは、SQL Server データベースのスキーマ名は、PostgreSQL の `babelfish_db` データベースと同じままです。1 つのデータベースだけを移行する場合には、移行したユーザーデータベースのスキーマ名は、SQL Server で使用されているのと同じ名前の PostgreSQL で参照できます。例えば、`dbo` と `smith` スキーマは `dbA`データベース内に存在します*。*

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


TDS 経由で接続すると、SQL Server の場合と同様に、`USE dba` を実行して T-SQL から スキーマ `dbo` と `dev` を表示することができます。変更されていないスキーマ名は PostgreSQL からも確認できます。

マルチデータベースモードでは、PostgreSQL からアクセスされたとき、ユーザーデータベースのスキーマ名は `dbname_schemaname` になります。T-SQL からアクセスされたときのスキーマ名は変わりません。

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


図のように、TDS ポート経由で接続し T-SQL を使用する場合、マルチデータベースモードとシングルデータベースモードは SQL Server と同じです。例えば、`USE dbA` はスキーマ `dbo` と `dev` を SQL Serverの場合と同じように列挙します。`dba_dbo`  や `dba_dev` などのマップされたスキーマ名は、PostgreSQL から確認できます。

各データベースには引き続きスキーマが含まれます。各データベースの名前は、以下の例のようにアンダースコアを区切り文字として、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 と異なり、Babelfish は クラスターの再起動後、 `tempdb` を再初期化しません。

シングルデータベース移行モードは、以下の場合に使用します。
+ 単一の SQL Server データベースを移行する場合。シングルデータベースモードでは、PostgreSQL からアクセスされたときの移行されたスキーマ名は、元の SQL Server スキーマ名と同じです。これにより、PostgreSQL 接続で実行するように最適化する場合に、既存の SQL クエリへのコード変更を減らすことができます。
+ 最終目標がネイティブ Aurora PostgreSQL への完全移行である場合。移行する前にスキーマを 1 つのスキーマに統合 (`dbo`) し、それから単一のクラスターに移行すると、必要な変更が少なく済みます。

次の場合は、複数のデータベース移行モードを使用します。
+ 同じインスタンス内の複数のユーザーデータベースでデフォルトの SQL Server エクスペリエンスを実現する場合。
+ 複数のユーザーデータベースを一緒に移行する必要がある場合。