NOBTAの気ままにITブログ

Azure全般 / SQL Serverに関する情報を発信していきます。

【第12回】基本から始める Azure Database for PostgreSQL 【メジャー バージョン アップグレード/DMS】


スポンサーリンク

第11回では、Azure Database for PostgreSQL フレキシブル サーバーのデータベースをバックアップする方法として、「pg_dump」コマンドの使用例をまとめてみました。

 

今回は、Azure Database for PostgreSQL フレキシブル サーバーのメジャー アップグレードする方法について、自分の整理も兼ねて、まとめてみようと思います。

※ Azure Database for PostgreSQL フレキシブル サーバー バージョン 13.7 および 14.3 を使用して検証

 

 

メジャー アップグレードについて

Azure Database for PostgreSQL フレキシブル サーバーでは、マイナー バージョン アップグレード (例えば 14.1 -> 14.2 など) は、定期的なメンテナンスの一環として自動的に実行されます。

しかしながら、メジャー バージョン アップグレード (例えば 13 -> 14 など) は、自動的にアップグレードは行われません。

また、Azure Database for PostgreSQL フレキシブル サーバー (シングル サーバーも同様) では、インプレース による メジャー バージョン アップグレードがサポートされていないため、上位のメジャー バージョンにアップグレードするためには、データベースの移行作業が発生します。

上位のメジャー バージョンにアップグレードする方法として、以下の方法があります。

  • Database Migration Service (DMS) を使用した移行 (オンライン移行)
  • PostgreSQL「pg_dump」,「pg_restore (pg_sql)」を使用した移行 (オフライン移行)

 

今回は、ダウンタイムを許容できない要件がある場合に選択可能な Database Migration Service (DMS) によるオンライン移行の方法について、まとめてみようと思います。

 

Database Migration Service (DMS) を使用した移行 (オンライン移行)

[事前作業]

1) 移行先用の 新しい Azure Database for PostgreSQL フレキシブル サーバーをデプロイします。

2) 移行元の Azure Database for PostgreSQL フレキシブル サーバーと同様のオプション設定などを、移行先のAzure Database for PostgreSQL フレキシブル サーバーに設定します。

3) 移行元の Azure Database for PostgreSQL フレキシブル サーバーのサーバー パラメータを以下のように変更します。

  • wal_level : 「LOGICAL
    ※ 設定変更を反映させるために再起動が必要

 

 


4) 移行元の Azure Database for PostgreSQL フレキシブル サーバーに接続し、pg_dump コマンドにより、テーブル スキーマ、インデックス、ストアドプロシージャ などの移行対象となっているすべてのデータベース オブジェクトを含む Dump ファイルを作成します。

 

 [コマンド例]

pg_dump -h azpostgre01.postgres.database.azure.com -U sqladmin -d db1 --port=5432 --schema-only --format=p --file=c:\dump\db1.dump  

 

pg_dump コマンドの詳細については、以下の URL を参照

 

5) 移行先のAzure Database for PostgreSQL フレキシブル サーバー上に空のデータベースを作成します。
※ 新規データベースの作成については、以下の URL を参照

 

※「新規データベース作成 (lc_collate, lc_ctype パラメータ指定) 」参照

 

6) 移行先のAzure Database for PostgreSQL フレキシブル サーバー上に作成したデータベース (今回は「db1」) に対して、4) で作成した Dump ファイル より スキーマをインポートします。

 

 [コマンド例]

psql -h azpostgre14.postgres.database.azure.com -U sqladmin -d db1 --port=5432 --file=c:\dump\db1.sql

 

[Database Migration Service (DMS) 設定]

1) Azure ポータル にログインし、検索欄に「サブスクリプション」と入力後、「サブスクリプション」を選択します。

 

 

2) 「リソース プロバイダー」- 検索欄に「DataMigration」と入力後、「Microsoft.DataMigration」を選択し、「登録」を選択します。

「Microsoft.DataMigration」リソース プロバイダーが登録され、「Azure Database Migration Service」をデプロイすることが出来るようになります。

 


3) 「リソース」検索欄に「azure database migration service」と入力後、「Azure Database Migration Service」を選択します。

 

 

4) 「+作成」を選択します。

 

5) 以下のように選択後、「選択」を選択します。

・ソース サーバーの種類:「PostgreSQL」

※ ソースサーバーが Azure Database for PostgreSQL の場合も「PostgreSQL」を選択します。

・ターゲット サーバーの種類 :「Azure Database for PostgreSQL」

 


6) 「移行サービス名」などを任意で入力後、価格レベルを「Premium」に変更し、「次: ネットワーク」を選択します。

※ オンライン移行を実施するためには、価格レベルを「Premium」に変更する必要があります。


 

※ Azure Database Migration Service で 仮想コア 4つ備えた Premium SKU を利用する場合、最初の6ヶ月間 (183日) は無料で利用可能

 

7)  既存の「仮想ネットワーク」もしくは、新規で「仮想ネットワーク」を作成し、「確認および作成」より、Database Migration Service (DMS) インスタンスをデプロイします。

※ 10分~15分 程度、デプロイに時間を要します。

※ Azure Database Migration Service に紐づく仮想ネットワーク から ソース サーバー、ターゲット サーバーへのアクセスが行われます。

 

 


8)  Database Migration Service (DMS) インスタンスのデプロイが完了後、デプロイしたインスタンス (今回は「adms01」) を選択します。

 

 

9) 「+新しい移行プロジェクト」を選択します。

 

 

 

10) 以下のように選択後、「アクティビティの作成と実行」を選択します。

・移行プロジェクト名 : 任意

・ソース サーバーの種類:「PostgreSQL」

※ ソースサーバーが Azure Database for PostgreSQL の場合も「PostgreSQL」を選択します。

・ターゲット サーバーの種類 :「Azure Database for PostgreSQL」

・移行アクティビティの種類:「オンライン データの移行」

 

11) ソース サーバーの情報を入力後、「次 : ターゲットの選択」を選択します。

※ オンライン移行を実施するためには、指定するユーザーが「userepl (replication)」権限を保持している必要があります。

 

 

12) ターゲット サーバーの情報を入力後、「次 : データベースの選択」を選択します。

 

 

13) ソース サーバー上の移行対象のデータベース および ターゲット サーバー上の移行先データベース を選択後、「次: テーブルの選択」を選択します。

 

 

15) 移行対象のテーブルを選択後、「次 : 移行の設定の構成」を選択します。

 

 

16) 「同時に読み込むテーブルの最大数」の設定などを変更後、「次 : サマリー」を選択します。

 

 

17) 「活動名」に任意の内容を記入後、サマリーの内容に誤りがないことを確認し、「移行の開始」を選択します。

 

 

18) 「移行の詳細」:「一括移行の準備完了」とステータスが変わったことを確認後、データベース名 (今回は「db1」) を選択します。

※「一括移行の準備完了」ステータスは、移行元データベース(ソース サーバー)の全データが、移行先データベース(ターゲット サーバー)上に反映された状態となります。

 

 

19) ソース サーバー上のデータベース上のデータを挿入、更新、削除のトランザクションが反映されていることを確認します。

 

[補足]

Azure Databaes Migration Serviceのオンライン移行を実施する場合の制限事項

  • 主キー (プライマリ キー) が存在しないテーブルの場合、INSERT 処理は反映されるが、UPDATE/DELETE 処理は反映されない。
  • 主キー (プライマリ キー) が更新された場合、データは反映されない。
  • 同じ名前でかつ、大文字、小文字が異なるテーブルの移行はサポートされていない。 (例えば、「Table」、「TABLE」など)

 

Azure Database Migration Service の詳細な制限事項については、以下の URL を参照。

 

[Database Migration Service (DMS) 最終移行設定]

1)  実行中のDMS アクティビティ(今回は「act4」) を選択します。

 

 

2) 移行対象のデータベース(今回は「db1」) を選択します。

 

 

3)「一括移行の開始」を選択します。

4) 保留中の変更が「0」になっていることを確認後、保留中の変更:確認 にチェックし、「適用」を選択します。

 

5) 正常にデータ移行が完了したことを確認し、アプリケーションから接続するデータベースを移行先のデータベースに変更します。

※「一括移行を完了する」処理を実行することで、ソース サーバー - ターゲット サーバー間のレプリケーション処理も停止します。

 

 

[参考URL]

 

まとめ

今回は、Azure Database for PostgreSQL フレキシブル サーバーのメジャー アップグレードを Azure Database Migration Service (オンライン移行) を利用して実施する方法について整理してみました。

Azure Database Migration Service (オンライン移行) を利用する場合の制約事項はありますが、ダウンタイムを可能な限り減らしたデータ移行が可能であり、また、Azure Database Migration Service を仮想コア 4つ備えた Premium SKU で利用する場合、最初の6ヶ月間 (183日) は無料で利用可能であるため、制約事項を許容できる場合は、積極的に利用を検討してみても良いかと思います。

また、今回、Azure Database Migration Service (DMS) を Azure Database for PostgreSQL フレキシブル サーバー から Azure Database for PostgreSQL フレキシブル サーバー への移行目的で利用してみましたが、以下のような移行パスがサポートされているため、Azure 環境にデータ移行を実施する必要がある場合、Azure Database Migration Service (DMS) を利用することが可能となるか、確認してみると良いかと思います。

 

[Azure Database Migration Service 移行パス]

SQL Server -> Azure SQL Database

SQL Server -> Azure SQL Database Managed Instance

AWS RDS for SQL Server -> Azure SQL Database

AWS RDS for PostgreSQL -> Azure Database for PostgreSQL フレキシブル サーバー

MongoDB -> Cosmos DB

※一部抜粋

 

インデックス : 基本から始める Azure Database for PostgreSQL 

 

※ 2022年9月 現在