オンプレの SQL Server から Azure SQL Database に移行してみる

9 min read読了の目安(約8800字

この記事について

この記事は、Azure SQL & Synapse Analytics Advent Calendar 2020 4 日目の記事です。

この記事では、オンプレミスの SQL Server を Microsoft Azure で提供されている PaaS の Azure SQL Database へ移行する手順について解説します。

SQL Server から Azure SQL Database への移行

移行を始める前に

オンプレミス、または IaaS の VM 上に展開されている SQL Server を Azure SQL Database に移行するには、大きく分けて、以下を実施することになります。

  • 移行元となる SQL Server の準備
  • 移行先となる Azure SQL Database インスタンスの作成
  • Data Migration Assistant (DMA)ダウンロードインストール
  • DMA でデータベースの移行に関する影響調査を実施
  • DMA でデータベースを移行

移行元となる SQL Server の作成

移行元となる SQL Server の環境を準備します。
今回は、Windows PC 上に SQL Server 2019 Developer を作成し、移行用 DB のサンプルとして、AdventureWorks2019 のデータベースを用意しています。

SQL Server のサンプルデータについては、Microsoft Docs にて無償で公開がされています。
URL: https://docs.microsoft.com/ja-jp/sql/samples/adventureworks-install-configure?view=sql-server-ver15&tabs=ssms

移行先となる Azure SQL Database の作成

Azure SQL Database の作成ついては、本記事では詳しくは触れません。
以下のリンクの情報などを参考に、移行先となる Azure SQL Database を用意します。

必要に応じて、サーバーファイアウォールの設定を行ってください。

PC 端末を使用している時などは、サーバーファイアウォールの設定で、クライアント IP の追加を実施することを忘れないようにしてください。

移行先のデータベースを新規作成
az login
$resourceGroupName = "selfstudy-dataplatform-japaneast"
$location = "japaneast"
$adminlogin = "azureuser"
$password = <任意のパスワード>
$serverName = <移行先の SQL Database サーバー名>
$startip = "0.0.0.0"
$endip = "0.0.0.0"
az group create --name $resourceGroupName --location $location
az sql server create --name $serverName --resource-group $resourceGroupName --location $location --admin-user $adminlogin --admin-password $password
az sql db create --resource-group $resourceGroupName --server $serverName --name migrationSample --edition GeneralPurpose --compute-model Serverless --family Gen5 --capacity 2
az sql server firewall-rule create --resource-group $resourceGroupName --server $serverName -n AllowYourIp --start-ip-address $startip --end-ip-address $endip

Data Migration Assistant のインストール

Windows OS の環境に Data Migration Assistant をインストールします。
ダウンロードサイトから、インストーラーをダウンロードして、インストールを行ってください。
インストールする環境は、移行元の SQL Server、および、移行先の Azure SQL Database に接続できる場所であればどこでも OK です。

Microsoft.DataMigration リソース プロバイダーの登録

Azure ポータル上で、Microsoft.DataMigration リソース プロバイダー を登録していない場合は、登録します。
Azure ポータル画面で、すべてのサービス選択します。

カテゴリで全般を選択し、サブスクリプションを選択します。

Azure Database Migration Service のインスタンス作成に使用する Azure サブスクリプションを選択します。

リソースプロバイダーを選択し、Microsoft.DataMigrationRegistered になっているか確認します。Registered 担っていない場合は、登録 ボタンを選択して、登録を行ってください。

Data Migration Assistant の実行

Data Migration Assistant を実行して、SQL Server と Azure SQL Database との間でデータベース機能に影響する可能性がある互換性の問題が存在しないかどうか、事前に検出を行います。
互換性の問題の内容としては、大きく分類して以下の内容が示されます。

  • 互換性に影響する変更
  • 動作の変更
  • 非推奨の機能

移行するにあたっての問題を解決した後、Data Migration Assistant を使用して、そのままデータ移行を行うこともできます。

互換性の問題の検出

Data Migration Assistant を起動します。
画面左にある + (New) を選択 します。

Project TypeAssessment選択します。
Assessment TypeDatabase Engine選択します。
Project name には任意の名前を入力します。
Source server typeTarget server type には、今回は SQL ServerAzure SQL Database をそれぞれ選択します。
設定が完了したら、Create選択します。

Select report type 画面で、確認する内容について選択します。
希望する確認項目にチェックを入れ、Next を選択します。

移行元のデータベースの接続情報入力します。
入力が完了したら、Connect選択します。

移行元のデータベースへの接続が完了したら、アセスメントを行う対象のデータベースのチェックボックスをチェック ON にします。
その後、Add を選択します。

確認画面が表示されるので、Start Assessment選択して、アセスメントを開始します。

アセスメントが完了したら、先ほど選択した確認内容に関するレポートが出力されます。
記載の内容に従って、移行のために必要な対処を実施してください。
また、アセスメント結果はレポートとして出力することも可能です。

今回の例では、特別何かの対処を行うことはありません。

データ移行

移行に必要な対処が完了したら、実際にデータを移行していきます。
Microsoft Docs などでは、Azure Database Migration Service へのリンクなどがありますが、今回は Data Migration Assistant で行います。

Azure Database Migration Service で移行を行う場合、移行元のデータベースは Azure 側からアクセスできる必要があります。
社内のイントラネット上にあるオンプレミス環境の SQL Server などは、この制約をクリアすることが困難なことが想定されるため、Data Migration Assistant 経由で実施する方が簡単です。

先ほど同様、Data Migration Assistant の画面左にある + (New) を選択 します。

Project TypeMigrate選択します。
Project name には任意の名前を入力します。
Source server typeTarget server type には、今回は SQL ServerAzure SQL Database をそれぞれ選択します。
今回は、テーブルとデータ両方を移行するため、Migration scope には、Schema and data選択 します。
設定が完了したら、Create選択します。

移行元の SQL Server の接続情報を入力します。
入力後、Connect選択します。

移行元の SQL Server インスタンス内に存在するデータベース一覧が表示されます。
今回は AdventureWorks2019 データベースを移行するので、こちらを選択し、Next選択します。

次に、移行先の Azure SQL Database サーバーの接続情報を入力します。
入力後、Connect選択します。

Azure SQL Database サーバ上にある、Azure SQL Database データベース一覧が表示されます。
今回は、migrationSample という名前の Single Database (単一データベース) にデータを移行するので、こちらを選択します。

移行元の SQL Server から、移行先の Azure SQL Database に移行するスキーマのオブジェクト選択します。
今回は、特に指定などはしないので、すべてにチェックを入れた状態にしています。
Generate SQL script選択します。

Data Migration Assistant がスキーマオブジェクトなどを移行するためのスクリプトを生成します。処理が完了するまで少し待ちます。
スクリプトの生成が完了したら、内容を確認の上、Deploy schema選択します。

スクリプトの実行が正常終了したら、Migrate data選択して、データの移行に入ります。

データを移行するテーブル選択します。
今回は、特に指定などはしないので、すべてにチェックを入れた状態にしています。
Start data migration選択します。

Data Migration Assistant がテーブルデータなどを移行するためのスクリプトを生成し、実行します。処理が完了するまで少し待ちます。
移行対象のテーブルすべての移行処理が正常終了したら、データの移行は完了です。

移行データの確認

Azure ポータルから、クエリエディター (プレビュー) を使用して、Azure SQL Database にログインし、データが移行されたか確認します。
下記の画像の通り、スキーマオブジェクト、およびテーブルとその中に含まれるデータが正常に移行されたことを確認できるはずです。

さいごに

今回は、オンプレミスの SQL Server から Azure SQL Database に対して、データ移行を行う方法について紹介しました。
実は、この Data Migration Assistant ですが、オンプレミスの SQL Server から、オンプレミスの SQL Server に対して、データを移行することも可能だったりします。

ぜひ、この機会に、Data Migration Assistant を使い始めてみてください。

参考情報

Azure Database Migration Guide (英語)

Microsoft Docs