Aurora 用の Babelfish PostgreSQL の使用 - Amazon Aurora

Aurora 用の Babelfish PostgreSQL の使用

Aurora 用の Babelfish PostgreSQL は、Microsoft SQL Server クライアントからデータベース接続を受け入れる機能を使用して Amazon Aurora PostgreSQL 互換エディションデータベースを拡張します。これにより、従来の移行に比べて少ないコード変更で、またデータベースドライバを変更せずに、元々 SQL Server 用に構築されているアプリケーションを直接 Aurora PostgreSQL で利用できるようになります。行に関する詳細については、Babelfish を使った PostgreSQL への移行 を参照してください。

注記

Babelfish for Aurora PostgreSQL は、Aurora PostgreSQL 13.4 以上のバージョンで使用できます。

Babelfish は、Aurora PostgreSQL データベースクラスターに追加のエンドポイントを提供します。これにより Aurora PostgreSQL データベースクラスターは SQL Server ワイヤレベルプロトコルと一般的に使用される SQL Server ステートメントを理解することができます。この方法により、テーブル式データストリーミング (TDS) ワイヤプロトコルを使用するクライアントアプリケーションは Aurora PostgreSQL の TDS リスナーポートにネイティブ接続できます。Babelfish は TDSバージョン 7.1 以降をサポートしています。SQL Server ワイヤレベルプロトコルの詳細については、Microsoft ウェブサイトの [MS-TDS]: テーブル形式データストリーミングプロトコルを参照してください。

一つのアプリケーションからの Babelfish TDS 接続と、別のアプリケーションからのネイティブ PostgreSQL 接続を使用して、同時にデータにアクセスできます。クラスターの作成時、または後ほど Aurora PostgreSQL パラメータグループより、各クライアント接続に使用するポートをカスタマイズできます。Babelfish を管理するパラメータの詳細については、Babelfish のデータベースを設定する を参照してください。

デフォルトでは、次のダイアレクトを使用するには以下のポートを使用します。

  • SQL Server ダイアレクト、クライアントはポート 1433 に接続します。

  • PostgreSQL ダイアレクト、クライアントはポート 5432 に接続します。

Aurora PostgreSQL と Babelfish と SQL Server の違い で説明されている例外を除き、Babelfish は Transact-SQL (T-SQL) 言語を実行します。

Babelfish の使用方法について次に説明します。

Babelfish のアーキテクチャ

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

注記

Aurora PostgreSQL クラスターでは、babelfish_db データベース名は Babelfish 用に予約されています。Aurora PostgreSQL の Babelfish に独自の「babelfish_db」データベースを作成すると、Aurora は正常に Babelfish のプロビジョニングができなくなります。

TDS ポートに接続すると、セッションは babelfish_db データベースに置かれます。T-SQL からは、構造は SQL Server インスタンスに接続されている状態と似た見た目になります。mastertempdb データベース、そして sys.databases カタログが確認できます。USE ステートメントを使用して追加のユーザーデータベースを作成し、データベース間で切り替えることができます。SQL Server ユーザーデータベースを作成すると、そのデータベースは babelfish_db PostgreSQL データベースにフラット化されます。ユーザーのデータベースは、SQL Server が提供するものと等しい、またはそれに類するクロスデータベース構文およびセマンティクスを保持します。

1 つのデータベースまたは複数のデータベースでの babelfish の使用

Babelfish で使用する Aurora PostgreSQL クラスターを作成する場合は、単独で 1 つの SQL Server データベースを使用するか、複数の SQL Server データベースを一緒に使用するかを選択します。選択した内容は、babelfish_db データベース内の SQLServer スキーマの名前が Aurora PostgreSQL からどのように表示されるかに影響します。移行モードは migration_mode パラメータに保存されます。クラスターの作成後は、このパラメータを変更できません。

シングルデータベースモードでは、babelfish_dbデータベース内のユーザーデータベースのスキーマ名は SQL Server と同じままです。単一のデータベースの移動を選択した場合、スキーマはデータベース内に再作成され、SQL Server で使用される名前と同じ名前で参照できます。例えば、dbosmith スキーマは dbAデータベース内に存在します


					単一のデータベースを移行する。

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

マルチデータベースモードでは、PostgreSQL から見た際のユーザーデータベースのスキーマ名は dbname_schemaname になります。T-SQL から見た場合のスキーマ名は変わりません。


					複数のデータベースを移行する。

TDS 経由で接続すると、SQL Server の場合と同様に、 USE dbA を実行して T-SQL からスキーマ dbo と  smith を表示することができます。 dbA_dbo  や dbA_smith などのマップされたスキーマ名は、PostgreSQL から確認できます。

各データベースには引き続きスキーマが含まれます。各データベースの名前は、以下の例のようにアンダースコアを区切り文字として、SQL Server スキーマ名に付加されます。

  • dbAdbA_dbodbA_smith を含む。

  • dbBdbB_dbodbB_jones を含む。

  • dbCdbC_dbodbC_miller を含む。

babelfish_db データベース内で、T-SQL ユーザーは引き続き USE dbname を実行してデータベースコンテキストを変更する必要があります。そうすることで外観が SQL Server と似たままになります。

移行モードの選択

各移行モードにはメリットとデメリットがあります。使用しているユーザーデータベース数と移行計画に基づいて、移行モードを選択します。Babelfish で使用するクラスターの作成後は、移行モードを変更できません。移行モードを選択する際は、ユーザーデータベースとクライアントの要件を考慮してください。

Babelfish で使用するクラスターを作成すると、Aurora PostgreSQL はシステムデータベース、master および tempdb を作成します。システムデータベース (master または tempdb) のオブジェクトを作成または変更した場合、新しいクラスターにこれらのオブジェクトを必ず再作成してください。SQL Server と異なり、Babelfish は クラスターの再起動後、 tempdb を再初期化しません。

シングルデータベース移行モードは、以下の場合に使用します。

  • 単一の SQL Server データベースを移行する場合。シングルデータベースモードでは、移行されたスキーマの名前は元の SQL Server スキーマ名と同じです。アプリケーションを移行する場合、SQL コードに加える変更は少なくなります。

  • 最終目標がネイティブ Aurora PostgreSQL への完全移行である場合。移行する前にスキーマを 1 つのスキーマに統合 (dbo) し、それから単一のクラスターに移行すると、必要な変更が少なく済みます。

次の場合は、複数のデータベース移行モードを使用します。

  • Babelfish を試用中で、将来的な必要性が分からない場合。

  • 複数のユーザーデータベースを一緒に移行する必要があり、最終目標が完全ネイティブの PostgreSQL 移行の実行ではない場合。

  • 将来、複数のデータベースを移行する可能性がある場合。