Azure Portal を介して Azure Database Migration Service を使用して、SQL Server のオンプレミス インスタンスから Azure SQL Database (オフライン) にデータベースを移行できます。
このチュートリアルでは、Database Migration Service を使用して、サンプル AdventureWorks2022 データベースを SQL Server のオンプレミス インスタンスから Azure SQL Database に移行する方法について説明します。 移行プロセス中に許容できるダウンタイムを考慮して、このチュートリアルではオフライン移行モードを使用します。
このチュートリアルでは、以下の内容を学習します。
- Azure Database Migration Service のインスタンスを作成する
- 移行を開始して完了までの進行状況を監視する
重要
現時点では、Azure SQL Database ターゲットの オンライン 移行は、Azure Database Migration Service では使用できません。 "オフライン" 移行では、移行の開始時がアプリケーションのダウンタイムの起点になります。 ダウンタイムが許容できるかどうかを判断するには、オフライン移行のテストをお勧めします。
移行オプション
次のセクションでは、Azure Portal で Azure Database Migration Service を使用する方法について説明します。
前提条件
チュートリアルを開始する前に:
Azure portal にアクセスできることを確認します。
Microsoft.DataMigration リソース プロバイダーがサブスクリプションに登録されていることを確認します。
次に示す組み込みロールのいずれかに割り当てられている Azure アカウントを用意します。
- ターゲット Azure SQL Database の共同作成者
- ターゲットの Azure SQL Database を含む Azure リソース グループの閲覧者ロール
- Azure サブスクリプションの所有者ロールまたは共同作成者ロール (Azure Database Migration Service の新しいインスタンスを作成する場合に必要)
いずれかの組み込みロールを使用する代わりに、カスタム ロールを割り当てることもできます。
移行先となる Azure SQL Database を作成します。
移行元 SQL Server インスタンスに接続する SQL Server ログインが db_datareader ロールのメンバーであること、また移行先 SQL Server インスタンスのログインが db_owner ロールのメンバーであることを確認します。
Database Migration Service を使用してソースからターゲットの Azure SQL Database にデータベース スキーマを移行するには、サポートされている SHIR の最小バージョン は 5.37 以上です。
スキーマ移行の場合、ソース SQL Server に対する最小限のアクセス許可はデータベースにアクセスするために db_owner され、ターゲットの Azure SQL Database では、ユーザーは次の表のすべての サーバー レベル ロール のメンバーである必要があります。
| 役割 | 説明 |
|---|---|
| ##MS_DatabaseManager## |
##MS_DatabaseManager## 固定サーバー ロールのメンバーは、データベースを作成および削除できます。 データベースを作成する ##MS_DatabaseManager## ロールのメンバーがそのデータベースの所有者になり、そのユーザーは dbo ユーザーとしてそのデータベースに接続できます。 dbo ユーザーには、データベースでのすべてのデータベース権限があります。
##MS_DatabaseManager## ロールのメンバーには、所有していないデータベースにアクセスするためのアクセス許可が必ずしも付与されているわけではありません。 このサーバー ロールを、master データベースに存在する dbmanager データベース レベルのロールの代わりに使用することをお勧めします。 |
| ##MS_DatabaseConnector## | ##MS_DatabaseConnector## 固定サーバー ロールのメンバーは、データベース内のユーザー アカウントに接続しなくても、任意のデータベースに接続できます。 |
| ##MS_DefinitionReader## |
##MS_DefinitionReader## 固定サーバー ロールのメンバーは、このロールのメンバーがユーザー アカウントを持つ任意のデータベースで、VIEW ANY DEFINITIONの対象となるすべてのカタログ ビューを読み取ることができます。 |
| ##MS_LoginManager## |
##MS_LoginManager## 固定サーバー ロールのメンバーは、ログインを作成および削除できます。 このサーバー ロールは、それが存在するmasterデータベースのloginmanagerデータベース レベルのロールよりも使用することをお勧めします。 |
ターゲットの Azure SQL Database を準備する
ターゲットの Azure SQL Database にログインとユーザーを作成するには、 master データベースで次のスクリプトを実行します。
CREATE LOGIN testuser WITH PASSWORD = '<password>';
ALTER SERVER ROLE ##MS_DefinitionReader## ADD MEMBER [testuser];
GO
ALTER SERVER ROLE ##MS_DatabaseConnector## ADD MEMBER [testuser];
GO
ALTER SERVER ROLE ##MS_DatabaseManager## ADD MEMBER [testuser];
GO
ALTER SERVER ROLE ##MS_LoginManager## ADD MEMBER [testuser];
GO
CREATE USER testuser FOR LOGIN testuser;
EXECUTE sp_addRoleMember 'dbmanager', 'testuser';
EXECUTE sp_addRoleMember 'loginmanager', 'testuser';
これで、Database Migration Service を使用して、データベース スキーマとデータの両方を移行できるようになりました。 移行するテーブルの一覧を選択する前に、Visual Studio Code の SQL Database Projects 拡張機能 などの他のツールを使用してスキーマを移行することもできます。
注
Azure SQL Database ターゲットにテーブルが存在しない場合、または移行を開始する前にテーブルが選択されていない場合は、[ 次へ ] ボタンを使用して移行を開始することはできません。 ターゲットにテーブルが存在しない場合は、スキーマ移行オプションを選択して先に進む必要があります。
Database Migration Service インスタンスを作成する
ステップ 1:Azure portal で、Azure Database Migration Service のページに移動します。 Azure Database Migration Service の新しいインスタンスを作成するか、前に作成した既存のインスタンスを再利用します。
Database Migration Service の既存のインスタンスを使用する
Database Migration Service の既存のインスタンスを使用するには:
Azure portal の [Azure Database Migration Services] で、使用する Database Migration Service の既存のインスタンスを選び、それが適切なリソース グループとリージョンに存在することを確認します。
Database Migration Service の新しいインスタンスを作成する
Database Migration Service の新しいインスタンスを作成するには:
Azure portal の [Azure Database Migration Service] で、[作成] を選びます。
[移行シナリオと Database Migration Service の選択] で、移行元と移行先のサーバーの種類などの必要な入力を選び、Database Migration Service を選んで、[選択] を選びます。
次の [データ移行サービスの作成] 画面で、サブスクリプションとリソース グループを選び、[場所] を選んで、Database Migration Service の名前を入力します。 [確認および作成] を選択します。 これにより、Azure Database Migration Service が作成されます。
セルフホステッド統合ランタイム (SHIR) が必要な場合は、Database Migration Service の概要ページの [設定] で [統合ランタイム] を選んで、次の手順のようにします。
[統合ランタイムの構成] を選び、[統合ランタイムのダウンロードとインストール] リンクを選んで、Web ブラウザーでダウンロード リンクを開きます。 統合ランタイムをダウンロードし、移行元の SQL Server インスタンスに接続するための前提条件を満たしているコンピューターに、それをインストールします。 詳細については、 データベース移行用のセルフホステッド統合ランタイムに関するページを参照してください。
インストールが完了すると、Microsoft Integration Runtime Configuration Manager が自動的に起動して登録プロセスが開始されます。
[認証キー] テーブルで、ウィザードから提供されたいずれかの認証キーをコピーし、それを Microsoft Integration Runtime 構成マネージャーに貼り付けます。
認証キーが有効であれば、Integration Runtime Configuration Manager に緑色のチェック マーク アイコンが表示されます。 緑色のチェック マークは、引き続き登録に進むことができることを示します。
セルフホステッド統合ランタイムの登録後、Microsoft Integration Runtime 構成マネージャーを閉じます。 Azure portal で Database Migration Service の [設定] > [統合ランタイム] にノードの詳細が反映されるまで、数分かかる場合があります。
注
セルフホステッド統合ランタイムについて詳しくは、「セルフホステッド統合ランタイムを作成して構成する」をご覧ください。
新しい移行を開始する
新しい移行を開始するには、Azure portal で Azure Database Migration Service に移動し、 +Create を使用して Database Migration Service の新しいインスタンスを作成するか、既存のインスタンスを選択してから、Azure Database Migration Service インスタンスに移動します。
Azure Database Migration Service インスタンスの [概要 ] ウィンドウで、[ 新しい移行] を選択します。
[新しい移行シナリオの選択] で、移行元と移行先のサーバーの種類および移行モードを選んでから、[選択] を選びます。
Azure SQL Database オフライン移行ウィザードで、次の手順に従います。
[ ソースの詳細 ] タブで、ソース SQL Server インスタンスの詳細を入力し、[ 次へ: ソース SQL Server に接続する] を選択します。
[ ソース SQL Server への接続 ] タブで、接続の詳細を指定し、[ 次へ: 移行するデータベースの選択] を選択します。
[ 移行するデータベースの選択 ] タブで、移行するデータベースの横にあるチェック ボックスをオンにします。 データベースの一覧を作成するには時間がかかる場合があります。 [次へ: Azure SQL Database をターゲットに接続する] を選択します。
[ ターゲットの Azure SQL Database への接続 ] タブで、接続の詳細を指定し、[ 次へ: ソース データベースとターゲット データベースをマップする] を選択します。
[ ソース データベースとターゲット データベースのマップ ] タブで、ソースとターゲットの間でデータベースをマップします。
(省略可能)[ 不足しているスキーマの移行 ] の横にあるチェック ボックスをオンにして、不足しているスキーマ オブジェクトをソースから Azure SQL Database ターゲットにデプロイし、次のスキーマ オブジェクトを 1 つのチェック ボックスで移行します。
- スキーマ
- 選択済みのテーブル
- 索引
- 見解
- ストアドプロシージャ (Stored procedures)
- シノニム
- DDL トリガー (DdlTriggers)
- デフォルト設定
- フルテキスト カタログ (FullTextCatalogs)
- プランガイド (PlanGuides)
- 役割
- 準則
- アプリケーション役割 (ApplicationRoles)
- ユーザー定義集計 (UserDefinedAggregates)
- ユーザー定義データ型 (UserDefinedDataTypes)
- ユーザー定義関数 (UserDefinedFunctions)
- ユーザー定義テーブル型 (UserDefinedTableTypes)
- ユーザー定義型 (UserDefinedTypes)
- Users* (すべてのユーザーの種類ではない)
- XmlSchemaCollections
注
- [ 不足しているスキーマの移行] を選択した場合、データベース移行サービスは、データが移行される前にスキーマの移行を実行します。
- テーブル オブジェクトに問題がない限り、スキーマの移行でエラーが発生した場合でも、DMS はデータ移行フェーズに進みます。
次に、[ すべてのテーブルの選択] を使用してすべてのテーブルを移行するか、テキスト 入力ボックスを使用してテーブルの一覧をフィルター処理し、移行する個々のテーブルを選択します。 次 に、[次へ: データベース移行の概要] を選択します。
[ データベース移行の概要 ] タブで詳細を確認し、[ 移行の開始] を選択します。これにより、データベースの移行が開始され、データベース移行サービス ダッシュボードに自動的に戻ります。
注
オフライン移行の場合、移行の開始時にアプリケーションのダウンタイムが開始されます。
データベースの移行を監視する
データベース移行を監視するには、Database Migration Service インスタンスの [概要 ] ウィンドウで、[ 移行の監視] を選択します。
[移行] タブでは、進行中、完了済み、失敗 (該当する場合) の移行を追跡したり、すべてのデータベース移行を確認したりできます。 メニュー バーで [更新] を選択して、移行の状態を更新します。
移行状態が更新されるたびに、確認されている最新の移行状態が Database Migration Service から返されます。 次の表は、状態の種類とその説明です。
ステータス 説明 の作成 サービスが移行を開始しています。 コピーの準備 ターゲット テーブルの自動統計、トリガー、インデックスをサービスが無効にしています。 コピー ソース データベースからターゲット データベースにデータがコピーされています。 コピーの完了 データのコピーが完了しました。 サービスは、他のテーブルのコピーが完了するのを待って、テーブルを元のスキーマに戻す最後の手順を開始します。 インデックスの再構築 サービスはターゲット テーブルのインデックスを再構築しています。 成功しました すべてのデータがコピーされ、インデックスが再構築されました。 [ ソース名] で、データベース名を選択してテーブル ビューを開きます。 この詳細ビューには、移行の現在の状態、現在その状態にあるテーブルの数、および各テーブルの詳細な状態が表示されます。
すべてのテーブル データが Azure SQL Database ターゲットに移行されると、Database Migration Service によって移行状態が [進行中] から [成功] に更新されます。
注
Database Migration Service は、データのないテーブル (0 行) をスキップすることで、移行を最適化します。 移行の作成時にテーブルを選択した場合でも、データのないテーブルは一覧に表示されません。
Azure SQL Database への移行が完了しました。 移行後の一連のタスクを実行して、すべてがスムーズかつ効率的に機能することを確認します。
制限事項
Azure SQL Database オフライン移行では、データ移動に Azure Data Factory (ADF) パイプラインが利用されるため、ADF の制限に従います。 データベース移行サービスも作成されると、対応する ADF が作成されます。 したがって、ファクトリの制限はサービスごとに適用されます。
- SHIR がインストールされているマシンは、移行用のコンピューティングとして機能します。 このマシンがデータ コピーの CPU とメモリの負荷を処理できることを確認します。 詳細については、セルフホステッド統合ランタイムを作成して構成するを参照してください。
- データベースあたり 100,000 テーブルの制限。
- サービスごとに 10,000 個の同時データベース移行。
- 移行速度は、ターゲット Azure SQL Database SKU とセルフホステッド統合ランタイム ホストによって大きく異なります。
- Azure SQL データベースの移行では、アクティビティの開始時に ADF のオーバーヘッドが発生するため、テーブル番号のスケーリングが不十分です。 データベースに何千ものテーブルがある場合、1 行 1 ビットのデータで構成されている場合でも、各テーブルの起動プロセスに数秒を要する可能性があります。
- 現在、2 バイト文字の Azure SQL データベース テーブル名は移行でサポートされていません。 軽減策は、移行前にテーブルの名前を変更することです。移行が成功した後は、元の名前に戻すことができます。
- BLOB 列が大きいテーブルは、タイムアウトにより移行に失敗することがあります。
- SQL Server で予約されたデータベース名は現在サポートされていません。
- セミコロンを含むデータベース名は現在サポートされていません。
- 計算列は移行されません。
- 既定の制約があり、
NULL値を含むソース データベース内の列は、NULL を保持するのではなく、ターゲットの Azure SQL データベースで定義された既定値で移行されます。