SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Azure Database Migration Service を使用した SQL Server から SQL Server on Azure VM への移行で今後期待したい改善

leave a comment

Optional settings for database migration for Always On availability group でフィードバックをしてみたのですが、Azure Database Migration Service (DMS) を使用して、SQL Server から SQL Server on Azure VM に移行をする場合に、今後改善してもらえるとよい点について情報を残しておきたいと思います。

SQL Server から SQL Server on Azure VM への移行に使用可能なサービス

DMA と DMS

Database Migration Assistant (DMA) を使用することで、

  • SQL Server から SQL Server ベースの移行についてのアセスメント
  • SQL Server から SQL Server ベースの移行

を実施することができます。

最近の DMA のアップデートでは、DMA を使用して SQL Server から Managed Instance への移行については、アセスメントのみがサポートされるというような機能の制限が加えられています。

image

 

今後は

  • アセスメントは DMA
  • データベース移行は DMS

というようにシフトしていくような気がしますので、SQL Server ベースの環境間のデータ移行については、DMS を主軸に検討をしていくとよさそうだと感じました。(小規模データベース向けに DMA は残りそうな気もしますが)

 

最新の SQL Server 間の DMS の構成

DMS を使用した SQL Server 間のデータベース移行については、

  • SQL Server から SQL Server on Azure VM

への移行がサポートされており、任意の場所で動作している SQL Server から SQL Server on Azure VM への移行がサポートされています。

この組み合わせで DMS を使用する場合、Azure Data Studio 用の Azure SQL Migration 拡張機能を使用してデータベースを移行する に記載されている

  • Azure Data Studio (ADS) 用の Azure SQL Migration 拡張
  • Azure の Database Migartion Service (DMS)
  • セルフホスト統合ランタイム (オプション)
    • バックアップファイルを共有フォルダー (ファイル共有) に配置する場合は、セルフホスト統合ランタイムをインストールした環境を用意する必要がある
    • バックアップファイルを Azure ストレージに直接配置する場合は不要

の両方を利用することになります。

実際のデータベースの移行には DMS という Azure 上に展開したリソースが使用され、ADS については DMS の管理ツールとして使用するという構成になります。

SQL Server 向けの DMS は構成がいろいろと変わっているという経緯があるのですが、現状はこの構成で使用するサービスとなります。

SQL Server から SQL Server on Azure VM へのデータベース移行は、

  • 初回の完全バックアップのリストア
  • 移行は定期的にトランザクションログをリストア

することによる移行となり、SQL Server の ログ配布 に近いような動作を実行してくれるものとなります。

 

DMS とログ配布の違い

ログ配布は 「共有フォルダーへのバックアップの取得 / 共有フォルダーからのバックアップのリストア」 を自動的に実行してくれるものとなります。

DMS は 「共有フォルダーまたは Azure ストレージへのバックアップファイルの格納をプーリングにより検知し、新しいファイルが格納されたらリストアを実行する」 という機能となります。

DMS は容易に設定することが可能なのですが、指定した場所へのバックアップファイルの配置はユーザーが明示的に実施する必要があります。

DMS は、既存のバックアップを流用しやすいという特徴がありますが、バックアップファイルを配置する操作については、どのように実施するかは意識しておく必要があります。

一部の操作で、SQL Server のサービスアカウントから共有フォルダーへのアクセスが必要となった場合は、次の情報を確認しておくと、サービスアカウントを変更しなくても対応ができるかもしれません。

 

DMS で改善してもらい内容

DMS を使用したデータベースの移行を行う際には、動作的にいくつか意識しておく内容がありました。

改善されると嬉しい内容については、冒頭に記載したフィードバックにアイデアとして起票しています。

 

IaaS Agent 拡張機能が使用されている

Azure VM がデータベースをリストアする際ですが、IaaS Agent 拡張機能が使用されているようで、RESTORE DATABASE のクエリを実行するアプリケーション名は「Microsoft SQL Server IaaS Agent Query Service」となっているようです。

リストアの詳細な動作を確認したい場合は、このアプリケーション名で実行されているクエリの情報をトレースするとよいかと思います。

DMS 以外でもこのアプリケーションによるクエリ実行は使用されますので、リストアに特化して情報を集めたい場合は、SQL のテキストに「RESTORE を含むもの」に限定しても良いかと思います。

 

移行をキャンセルするとデータベースが DROP される

DMS を使用したデータベースの移行ですが、「一括移行を完了する」(カットオーバー) を実行することで、データベースの移行が完了し、移行をキャンセルしたい場合には「移行のキャンセル」から実行することができます。

image

 

「移行のキャンセル」ですが、キャンセルを実行すると移行していたデータベースがキャンセル処理の流れの中で、DROP DATABASE されます。

移行シナリオによっては、「移行完了時には「復元中」の状態で固定しておきたい」場合や「キャンセル時はそこまでの復元でアクティブにしておきたい」ケースもあるのですが、残念ながら現在の DMS では、キャンセル時の状態を柔軟に制御することはできません。

キャンセル時に DROP DATABASE を実行するかどうかを制御できると嬉しいですね。

 

一括移行を完了した際に Service Broker 識別子が変更される

移行を完了する際には「一括移行を完了する」を実行しますが、この処理の中では次のクエリが実行されています。

RESTORE DATABASE [<DB Name>] WITH RECOVERY, KEEP_CDC, KEEP_REPLICATION, NEW_BROKER

 

リストアを完了する際に「NEW_BROKER」が実行されているのですよね…。これにより Service Broker 識別子 (service_broker_guid / dbi_svcBrokerGUID) が変更されます。

通常に使用方法であれば、ID の変更は意識しなくてもよいのですが、データベースミラーリングや Always On 可用性グループでは、各レプリカ上のデータベースの Service Broker 識別子は同一になっている必要があるかと思います。

異なる Service Broker 識別子が使用されていると、次のようなエラーが ERRORLOG 等に出力され、データベースの同期を行うことができません。

Error: 1436, Severity: 16, State: 101.

The Service Broker ID for the remote copy of database "<DB Name>" does not match the ID on the principal server.

Always On Availability Groups data movement for database "<DB Name>" has been suspended for the following reason: "system" (Source ID 7; Source string: ‘SUSPEND_FROM_REVALIDATION’). To resume data movement on the database, you will need to resume the database manually. For information about how to resume an availability database, see SQL Server Books Online.

可用性グループ向けのデータベースとして DMS を使用する場合は、NEW_BROKER は指定せず、オリジナルのデータベースと同一の Service Broker 識別子が使われたほうが良いケースもあるので、これも制御できるようになると嬉しいですね。

 

まとめ

DMS による SQL Server から SQL Server on Azure VM への移行は、SQL Server のバックアップ / リストアの機能を使用したものとなります。

SQL Server のバックアップ / リストアのの基礎知識と、クエリをトレースする方法がわかっていると、どのようなクエリにより処理が実行されているかを把握することができますので、動作で気になる点があれば、実際に実行されているクエリを確認し、気になる点があったらフィードバックしてみるとよいのではないでしょうか。

Share

Written by Masayuki.Ozawa

1月 25th, 2023 at 6:04 pm

Posted in Azure,DMS

Tagged with ,

Leave a Reply