Azure Database Migration Service を使って SQL Server を Azure SQL Database に持っていこう
Microsoft Japan Data Platform Tech Sales Team
岩淵 健
これまでプレビュー版としてのご提供でした Azure Database Migration Service (Azure DMS) が 2018/5/7 より GA としてリリースされました。Azure DMS をご利用いただくことでオンプレミスの SQL Server データベースを Azure SQL Database へスムーズに移行することができます。特に、他の移行ツールと比較して、大規模なデータベースの移行に適していますので是非ともご利用ください。
本エントリでは SQL Server 2008 R2 のデータベースを Azure DMS を使って Azure SQL Database へ移行する手順をご紹介させていただきます。
ご存知の方も多いかと思いますが、SQL Server 2008/2008 R2 は2019年7月をもってサポートを終了いたしますので、移行を検討いただく際の参考にしていただけますと幸いです。
Azure DMS を利用したデータベース移行の流れ
Azure DMSを利用してデータベースの移行を行う場合、移行を開始する前に次のような流れで Data Migration Assistant を使用し、移行を妨げる問題がないか評価し必要な修正を行ったうえで、データベースを移行していきます。
Data Migration Assistantによるスキーマの移行
- 移行元データベースの評価
- スキーマの移行
Azure DMSによるデータの移行
- Azure DMS インスタンスの作成
- Azure DMS インスタンスでの移行プロジェクトの作成
- データ移行
1. 移行元データベースの評価
それでは早速、移行元データベースの評価から始めていきましょう。
Data Migration Assistant はこちらからダウンロードいただけます。
- Data Migration Assistant を起動して "+" アイコンから新規プロジェクトを作成します。
- Project type に [Assessment] を選択します。
- Source server type に [SQL Server] を Targert server type に [Azure SQL Databse] を選択します。
- 任意のプロジェクト名をつけて [Create] を選択しプロジェクトを作成します。
- オプション選択画面で、[Check database compatibility] と [Check feature parity] を選択し、データベースの互換性と機能の類似性を確認します。
- 移行元の接続情報を入力し、移行対象のデータベースを選択します。
- ダイアログを閉じたら [Start Assessment ] を選択し、評価を開始します。
評価が完了すると次のようなレポートが表示されます。
今回の環境には、SQL Server 2012 でサポートが終了した WITH APPEND を含むトリガーが含まれていましたが、しっかりとこれが検知されています。本来であれば、このような互換性の問題を解消してから次のステップに進みますが、今回は検証ということでそのまま進んでみることにします。
2. スキーマの移行
評価が完了したら、再度 Data Migration Assistant を使用して、対象スキーマを移行します。
- Data Migration Assistant を起動して "+" アイコンから新規プロジェクトを作成します。
- Project type に [Migration] を選択します。
- Source server type に [SQL Server] を Targert server type に [Azure SQL Databse] を Migration Scope に [Schema only] を選択します。
- 任意のプロジェクト名をつけて [Create] を選択しプロジェクトを作成します。
- 移行元の接続情報を入力し、移行対象のデータベースを選択します。
- 移行先の接続情報を入力し、移行先の SQL Database を選択します。
今回は、事前に作成済みの環境に移行しますが、"Create a new Azure SQL Database" から新規に移行先のデータベースを作成することも出来ます。
- [Next] を選択し、移行対象のオブジェクトを選択する画面に進みます。
規定では、すべてのオブジェクトが選択された状態になりますが、チェックボックスで移行対象から外すことも可能です。
- [Generate SQL script] を選択し移行スクリプトを確認します。
スクリプトに問題が検知された場合は、ここで修正します。
検証で検知された WITH APPEND を含むトリガーはこのステップではエラーとして検知されませんでした。
作成されたスクリプトを確認すると、次のように sp_executesql で実行されているため実行時までエラーとして検出されない状態となっていました。このようなケースがありますので、事前の検証で検知された問題を解消しておくことが重要となります。
- [Deploy schema] を選択し、スキーマをデプロイします。
問題がないか [Deployment results]を確認します。
エラーが発生した場合は、次のように表示されますので必要に応じて対応します。
3. Azure DMS インスタンスの作成
ここからはブラウザを起動して Azure Portal での作業となります。
- Azure Portal にログインして、[すべてのサービス] から [サブスクリプション] を選択します。
- Azure DMS インスタンスを作成するサブスクリプションを選択し、[リソース プロバイダー] から Microsoft.DataMigration の右側の [登録] を選択します。
- Azure Portal で [+ リソースの作成] から Azure Database Migration Service を検索し Azure ADM の画面から[作成] を選択します。
- 移行サービスの作成画面からサービス名やサブスクリプションなどの必要な情報を入力しサービスを作成します。
4. Azure DMS インスタンスでの移行プロジェクトの作成
- [すべてのサービス] から Azure Database Migration Service を選択し、先ほど作成した移行サービスを選択します。
- 移行サービスを選択し、[新しい移行プロジェクト] 画面からプロジェクトを作成します。
ソースには [SQL Server] ターゲットには [Azure SQL Database] を選択します。
- 移行元と移行先の接続情報を入力し移行対象のデータベースを選択します。
このステップで Azure DMS からソース データベースへ接続できる状態である必要があります。うまく接続できない場合は、ネットワークやファイアウォールの設定なども確認してみてください。筆者はここでハマりました。 - 入力した情報を確認し保存します。
5. データ移行
ここからいよいよ実際の移行作業に入ります。
- 先ほど作成したプロジェクトを選択し [+新しい活動] から [移行を実行する] を選択します。
- 移行元と移行先の接続情報を入力して、対象のデータベースをマッピングします。
- 移行対象のテーブルを選択し [保存] します。
- プロジェクトの活動名を指定し、オプションを設定します。
今回は [データベースの検証] から次の3つを選択しました。- スキーマ比較
- データの整合性
- クエリの正確さ
- [保存] を選択し、移行の概要に問題がなければ [移行の実行] を選択し移行を開始します。
- 移行が完了したらレポートから移行の状況を確認します。
今回は、次のようなレポートになりました。Code objects が一つ少ないのは、WITH APPEND を含むトリガーを修正せずに移行を行ったためです。
以上でデータベースの移行が完了しました。
いかがでしたでしょうか?
問題点の検知からデータベースの移行まで簡単に行えると思います。
ぜひ Azure DMS を利用してデータベースを Azure に移行してみてください。
また、本サービスですが、今後ソース データベースとして Oracle をはじめ Netezza や MySQL、PostgresSQL に対応していく予定となっております。
移行先としても Azure SQL Database Managed Instance がご利用いただけるようになる予定となっておりますので、様々なデータ ソースを本サービスで簡単に Azure Data Service へ移行できるようになりますので是非ともご活用ください。
関連情報として Data Migration Assistant については、こちらのエントリにも記載がございますので、あわせてご参照ください。
- 2019年7月 SQL Server 2008 の延長サポートが終了します。
https://blogs.msdn.microsoft.com/dataplatjp/2018/02/27/sqlserver-2008-eos/