チュートリアル: Azure portal を介して DMS を使い、Azure Database for PostgreSQL - 単一サーバーを Azure Database for PostgreSQL - 単一サーバーにオンラインで移行またはアップグレードする
Azure Database Migration Service を使用すると、Azure Database for PostgreSQL - 単一サーバー インスタンスから、同じまたは別のバージョンの Azure Database for PostgreSQL - 単一サーバー インスタンス、または Azure Database for PostgreSQL - フレキシブル サーバーに、最小限のダウンタイムでデータベースを移行できます。 このチュートリアルでは、Azure Database Migration Service のオンライン移行アクティビティを使用して、DVD Rental サンプル データベースを Azure Database for PostgreSQL v10 から Azure Database for PostgreSQL - 単一サーバーに移行します。
このチュートリアルでは、以下の内容を学習します。
- pg_dump ユーティリティを使用して、サンプル スキーマを移行する。
- Azure Database Migration Service のインスタンスを作成する。
- Azure Database Migration Service で移行プロジェクトを作成する。
- 移行を実行する。
- 移行を監視する。
- 一括移行を実行する。
Note
Azure Database Migration Service を使用してオンライン移行を実行するには、Premium 価格レベルに基づいてインスタンスを作成する必要があります。 移行プロセス中のデータの盗難を防ぐために、ディスクは暗号化します。
重要
最適な移行エクスペリエンスのために、ターゲット データベースと同じ Azure リージョンに Azure Database Migration Service のインスタンスを作成することをお勧めします。 リージョンや地域をまたいでデータを移動する場合、移行プロセスが遅くなり、エラーが発生する可能性があります。
重要
Azure Database for PostgreSQL からの移行は、PostgreSQL バージョン 9.x 以降でサポートされています。 また、このチュートリアルを使用して、ある Azure Database for PostgreSQL インスタンスから別の Azure Database for PostgreSQL インスタンスまたは Hyperscale (Citus) インスタンスに移行することもできます。 PostgreSQL 9.5 および 9.6 から移行するには、ソース インスタンスに追加の論理レプリケーション特権が必要です。
前提条件
このチュートリアルを完了するには、以下を実行する必要があります。
サポートされている移行とバージョンの組み合わせについては、「Azure Database Migration Service によってサポートされる移行シナリオの状態」を確認してください。
DVD Rental データベースが稼働している既存の Azure Database for PostgreSQL バージョン 10 以降のインスタンス。
また、ターゲットの Azure Database for PostgreSQL のバージョンは、オンプレミスの PostgreSQL バージョンと同じかそれ以降である必要があることに注意してください。 たとえば、PostgreSQL 10 は Azure Database for PostgreSQL 10 または 11 に移行できますが、Azure Database for PostgreSQL 9.6 には移行できません。
データの移行先となるターゲット データベース サーバーとして、Azure Database for PostgreSQL サーバーを作成するか、Azure Database for PostgreSQL - Hyperscale (Citus) サーバーを作成します。
Azure Resource Manager デプロイ モデルを使用して、Azure Database Migration Service 用の Microsoft Azure 仮想ネットワークを作成します。 仮想ネットワークの作成方法の詳細については、Virtual Network のドキュメントを参照してください。特に、詳細な手順が記載されたクイックスタートの記事を参照してください。
仮想ネットワークのネットワーク セキュリティ グループ (NSG) の規則によって、ServiceBus、Storage、AzureMonitor の ServiceTag の送信ポート 443 がブロックされていないことを確認します。 仮想ネットワークの NSG トラフィックのフィルター処理の詳細については、ネットワーク セキュリティ グループによるネットワーク トラフィックのフィルター処理に関する記事を参照してください。
Azure Database for PostgreSQL ソースのサーバーレベルのファイアウォール規則を作成して、Azure Database Migration Service がソース データベースにアクセスできるようにします。 Azure Database Migration Service に使用する仮想ネットワークのサブネット範囲を指定します。
Azure Database for PostgreSQL ターゲットのサーバーレベルのファイアウォール規則を作成して、Azure Database Migration Service がターゲット データベースにアクセスできるようにします。 Azure Database Migration Service に使用する仮想ネットワークのサブネット範囲を指定します。
Azure Database for PostgreSQL ソースで論理レプリケーションを有効にします。
ソースとして使用されている Azure Database for PostgreSQL インスタンスで、次のサーバー パラメーターを設定します。
- max_replication_slots = [スロットの数]。10 スロットに設定することをお勧めします
- max_wal_senders = [同時実行タスク数] - max_wal_senders パラメーターでは同時に実行できるタスクの数を設定します、10 タスクに設定することをお勧めします
Note
上記のサーバー パラメーターは静的であり、有効にするには Azure Database for PostgreSQL インスタンスを再起動する必要があります。 サーバー パラメーターの切り替えの詳細については、Azure Database for PostgreSQL のサーバー パラメーターの構成に関する記事を参照してください。
重要
変更をターゲット データベースに確実に同期できるようにするには、既存のデータベース内のすべてのテーブルに主キーが必要です。
サンプル スキーマを移行する
テーブル スキーマ、インデックス、ストアド プロシージャなどのすべてのデータベース オブジェクトを完了するには、ソース データベースからスキーマを抽出し、データベースに適用する必要があります。
pg_dump -s コマンドを使用して、データベースのスキーマ ダンプ ファイルを作成します。
pg_dump -O -h hostname -U db_username -d db_name -s > your_schema.sql
たとえば、dvdrental データベース用のスキーマ ダンプ ファイルを作成するには、次のようにします。
pg_dump -O -h mypgserver-source.postgres.database.azure.com -U pguser@mypgserver-source -d dvdrental -s -x > dvdrentalSchema.sql
pg_dump ユーティリティの使用方法の詳細については、 pg-dump チュートリアルの例を参照してください。
ターゲット環境に空のデータベース (Azure Database for PostgreSQL) を作成します。
データベースの接続および作成方法の詳細については、「Azure portal で Azure Database for PostgreSQL サーバーを作成する」または「Azure portal で Azure Database for PostgreSQL - Hyperscale (Citus) を作成する」を参照してください。
注意
Azure Database for PostgreSQL - Hyperscale (Citus) のインスタンスには、citus という単一のデータベースのみがあります。
スキーマ ダンプ ファイルを復元して作成したターゲット データベースに、スキーマをインポートします。
psql -h hostname -U db_username -d db_name < your_schema.sql
次に例を示します。
psql -h mypgserver-source.postgres.database.azure.com -U pguser@mypgserver-source -d dvdrental citus < dvdrentalSchema.sql
注意
移行サービスにより、外部キーの有効化/無効化が内部的に処理され、信頼性のある堅牢なデータ移行が確保されるようトリガーされます。 そのため、ターゲット データベース スキーマの変更は検討する必要はありません。
リソース プロバイダーの登録
Database Migration Service の最初のインスタンスを作成する前に、Microsoft.DataMigration リソース プロバイダーを登録します。
Azure portal にサインインします。 サブスクリプションを検索して選択します。
Azure Database Migration Service のインスタンスを作成するサブスクリプションを選択してから、 [リソース プロバイダー] を選びます。
移行を検索してから、 [Microsoft.DataMigration] の [登録] を選択します。
DMS インスタンスを作成する
Azure portal で [+ リソースの作成] を選択し、Azure Database Migration Service を検索して、ドロップダウン リストから [Azure Database Migration Service] を選択します。
[Azure Database Migration Service] 画面で、 [作成] を選択します。
[移行サービスの作成] 画面で、サービスの名前、サブスクリプション、新規または既存のリソース グループ、および場所を指定します。
既存の仮想ネットワークを選択するか、新しく作成します。
仮想ネットワークによって、Azure Database Migration Service に、ソースの PostgreSQL サーバーとターゲットの Azure Database for PostgreSQL インスタンスへのアクセスが提供されます。
Azure portal で仮想ネットワークを作成する方法の詳細については、「Azure portal を使用した仮想ネットワークの作成」を参照してください。
価格レベルを選択します。
コストと価格レベルの詳細については、価格に関するページを参照してください。
[確認および作成] を選択してサービスを作成します。
サービスの作成は約 10 分から 15 分以内に完了します。
移行プロジェクトを作成する
サービスが作成されたら、Azure portal 内でそのサービスを探して開き、新しい移行プロジェクトを作成します。
Azure ポータルで、 [All services](すべてのサービス) を選択し、Azure Database Migration Service を検索して、Azure Database Migration Service を選択します。
[Azure Database Migration Services] 画面で、作成した Azure Database Migration Service インスタンスの名前を検索し、インスタンスを選択してから、 [+ 新しい移行プロジェクト] を選びます。
[新しい移行プロジェクト] 画面で、プロジェクトの名前を指定し、 [ソース サーバーの種類] テキスト ボックスで [PostgreSQL] を選択して、 [ターゲット サーバーの種類] テキスト ボックスで [Azure Database for PostgreSQL] を選択します。
Note
ソース サーバーは Azure Database for PostgreSQL インスタンスですが、 [ソース サーバーの種類] で [PostgreSQL] を選択します。
[アクティビティの種類を選択します] セクションで、 [オンライン データの移行] を選択します。
Note
または、 [プロジェクトのみを作成します] を選択して移行プロジェクトを作成しておき、移行は後で実行することもできます。
[保存] を選択します。Azure Database Migration Service を使用して正常にデータを移行するための要件を確認してから、 [アクティビティの作成と実行] を選択します。
ソース詳細を指定する
[ソースの追加に関する詳細] 画面で、ソース PostgreSQL インスタンスの接続の詳細を指定します。
Note
"サーバー名"、"サーバー ポート"、"データベース名" などの詳細については、Azure Database for PostgreSQL ポータルを参照してください。
[保存] を選択します。
ターゲット詳細を指定する
[ターゲットの詳細] 画面で、事前プロビジョニングされており、pg_dump を使用して DVD Rentals スキーマがデプロイされている、ターゲットの Hyperscale (Citus) サーバーの接続の詳細を指定します。
注意
ある Azure Database for PostgreSQL インスタンスから別の Azure Database for PostgreSQL シングル サーバー インスタンスまたは Hyperscale (Citus) サーバーに移行することができます。
[保存] を選択し、 [ターゲット データベースへマッピング] 画面で、移行用のソース データベースとターゲット データベースをマップします。
ターゲット データベースにソース データベースと同じデータベース名が含まれている場合、Azure Database Migration Service では、既定でターゲット データベースが選択されます。
[保存] を選択してから、 [移行の設定] 画面で既定値をそのまま使用します。
[保存] を選択し、 [移行の概要] 画面で、 [アクティビティ名] テキスト ボックスに移行アクティビティの名前を指定します。概要を見直して、ソースとターゲットの詳細が先ほど指定した内容と一致していることを確認します。
移行を実行する
- [移行の実行] を選択します。
移行アクティビティ ウィンドウが表示され、アクティビティの [状態] が更新されて、 [バックアップが進行中です] と示されるはずです。 Azure Database for PostgreSQL 9.5 または 9.6 からアップグレードすると、次のエラーが発生する場合があります。
シナリオが不明なエラーを報告しました。 28000: no pg_hba.conf entry for replication connection from host "40.121.141.121", user "sr"
これは、必要な論理レプリケーション アーティファクトを作成するための適切な特権が PostgreSQL にないために起こります。 必要な特権を有効にするには、次の操作を行います。
- 移行元またはアップグレード元のソース Azure Database for PostgreSQL サーバーの [接続のセキュリティ] 設定を開きます。
- 名前が "_replrule" で終わる新しいファイアウォール規則を追加し、エラー メッセージの IP アドレスを開始 IP および終了 IP フィールドに追加します。 上記のエラーの場合は、次のようにします。
ファイアウォール規則 = sr_replrule、開始 IP = 40.121.141.121、終了 IP = 40.121.141.121
- [保存] をクリックして、変更を完了します。
- DMS アクティビティを再試行します。
移行を監視する
移行アクティビティ画面で、移行の [状態] が [完了] になるまで [最新の情報に更新] を選択して表示を更新します。
移行が完了したら、 [データベース名] で、特定のデータベースを選択して、データ全体の読み込みおよび増分データ同期操作の移行状態を取得します。
注意
データ全体の読み込み には初回の読み込みの移行状態が表示され、増分データ同期 には変更データ キャプチャ (CDC) の状態が表示されます。
一括移行を実行する
初回の全体の読み込みが完了すると、データベースは [一括準備完了] とマークされます。
データベースの移行を完了する準備ができたら、 [一括で開始] を選択します。
[保留中の変更] カウンターに 0 と表示されるまで待ってソース データベースへのすべての受信トランザクションが停止していることを確認し、 [確認] チェックボックスをオンにしてから [適用] を選択します。
データベースの移行状態に [完了] と表示されたら、順序を再作成 (該当する場合) して、アプリケーションを Azure Database for PostgreSQL の新しいターゲット インスタンスに接続します。
注意
Azure Database Migration Service を使用すると、Azure Database for PostgreSQL - 単一サーバーのダウンタイムを短縮して、メジャー バージョンのアップグレードを実行できます。 最初に、目的とする高バージョンの PostgreSQL、ネットワーク設定およびパラメーターを使用して、ターゲット データベースを構成します。 上記の手順に従うことで、ターゲット データベースへの移行を開始することができます。 ターゲット データベース サーバーに切り替えると、そのターゲット データベース サーバーを指すようにアプリケーションの接続文字列を更新できます。
次のステップ
- Azure Database for PostgreSQL へのオンライン移行の実行時の既知の問題と制限事項については、Azure Database for PostgreSQL のオンライン移行に伴う既知の問題と回避策に関する記事を参照してください。
- Azure Database Migration Service の詳細については、「Azure Database Migration Service とは」を参照してください。
- Azure Database for PostgreSQL の詳細については、「Azure Database for PostgreSQL とは」を参照してください。