SQL Server データベースのクラウド内の SQL Database への移行

この記事では、SQL Server 2005 以降のデータベースを Azure SQL Database に移行するための 2 つの主な方法について説明します。 1 つ目の方法の方が簡単ですが、移行中にダウンタイムが必要です。これは長時間にわたる可能性があります。 2 つ目の方法はより複雑ですが、移行中のダウンタイムは大幅に解消されます。

どちらの場合も、Data Migration Assistant (DMA) を使用してソース データベースに Azure SQL Database との互換性があることを確認する必要があります。 SQL Database V12 は、SQL Server との機能の同等性を目指していますが、サーバーレベルの操作とデータベース間の操作に関連した問題は残っています。 データベースやアプリケーションで、部分的にしかサポートされていない機能またはサポートされていない機能を使用している場合には、SQL Server データベースの移行前にリエンジニアリングを実施してこれらの非互換性を修正する必要があります。

注意

Microsoft Access、Sybase、MySQL Oracle、DB2 などの SQL Server 以外のデータベースを Azure SQL Database に移行する場合は、 SQL Server Migration Assistantチームのブログ記事を参照してください。

方法 1: 移行中にダウンタイムを伴う移行

ある程度のダウンタイムが許容される場合、または将来の移行に備えて運用データベースの移行をテストする場合には、この方法を使用してください。 チュートリアルについては、SQL Server データベースを移行するを参照してください。

次の一覧は、この方法を使用した SQL Server データベース移行の一般的なワークフローを示します。

VSSSDT の移行ダイアグラム

  1. Data Migration Assistant (DMA) の最新バージョンを使用して、データベースの互換性を評価します。
  2. 必要な修正を Transact-SQL スクリプトとして準備します。
  3. トランザクション上の一貫性が維持された、移行されるソース データベースのコピーを作成し、ソース データベースにそれ以上変更が行われないようにします (または、移行が完了した後に、このような変更を手動で適用することもできます)。 クライアント接続を無効にしたり、 データベース スナップショットを作成したりするなど、データベースはさまざまな方法で停止できます。
  4. Transact-SQL スクリプトをデプロイして、データベースのコピーに修正を適用します。
  5. データベースのコピーをローカル ドライブの .BACPAC ファイルにエクスポートします。
  6. 任意の BACPAC インポート ツールを使用して、.BACPAC ファイルを新しい Azure SQL データベースとしてインポートします。最適なパフォーマンスを得るには、SQLPackage.exe の使用をお勧めします。

移行中のデータ転送パフォーマンスの最適化

次の一覧は、インポート処理中に最適なパフォーマンスを得るための推奨事項です。

  • 転送のパフォーマンスが最大限に高めるために、予算が許す限り最も高いサービス レベルとパフォーマンス レベルを選択する。 移行の完了後にスケールダウンすることでコストを削減できます。
  • .BACPAC ファイルと移行先のデータ センターの間の距離を最短にする。
  • 移行中の自動統計を無効にする。
  • テーブルとインデックスをパーティション分割する。
  • インデックス付きビューを削除し、完了したら作成し直す。
  • ほとんど照会されない履歴データを別のデータベースに移動し、この履歴データを別の Azure SQL データベースに移行する。 その後、この履歴データは、エラスティック クエリを使用して照会できます。

移行完了後のパフォーマンスの最適化

移行が完了した後に、フル スキャンを実施して統計を更新します。

方法 2: トランザクション レプリケーションの使用

移行中、SQL Server データベースを外す余裕がない場合、移行ソリューションとして SQL Server トランザクション レプリケーションを使用できます。 この方法を使用するには、ソース データベースがトランザクション レプリケーションの要件を満たしているほか、Azure SQL Database に対する互換性を持っている必要があります。 AlwaysOn を使った SQL レプリケーションの詳細については、「Always On 可用性グループのレプリケーションの構成 (SQL Server)」をご覧ください。

このソリューションを使用するには、Azure SQL Database を移行対象のSQL Server インスタンスへのサブスクライバーとして構成します。 トランザクション レプリケーション ディストリビューターは、新しいトランザクションが発生し続ける中で、同期対象のデータベース (パブリッシャー) からデータを同期します。

トランザクション レプリケーションでは、データやスキーマのすべての変更が Azure SQL Database に表示されます。 同期が完了し、移行の準備ができたら、アプリケーションの接続文字列を変更し、Azure SQL Database をポイントするようにします。 トランザクション レプリケーションがソース データベースに残っているすべての変更を抜き取り、すべてのアプリケーションが Azure DB をポイントしたら、トランザクション レプリケーションをアンインストールできます。 これで、Azure SQL Database が実稼働システムになります。

SeedCloudTR ダイアグラム

ヒント

トランザクション レプリケーションを使用して、ソース データベースの一部を移行することもできます。 Azure SQL Database に複製するパブリケーションは、複製されるデータベースのテーブルの一部に制限できます。 複製されるテーブルごとに、行の一部または列の一部にデータを制限できます。

トランザクション レプリケーション ワークフローを使用した SQL Database への移行

重要

最新バージョンの SQL Server Management Studio を使用して、Microsoft Azure と SQL Database の更新プログラムとの同期を維持します。 以前のバージョンの SQL Server Management Studio では、サブスクライバーとして SQL Database を設定できません。 SQL Server Management Studio を更新します

  1. ディストリビューションの設定
  2. パブリケーションの作成
  3. サブスクリプションの作成

SQL Database への移行に関するヒントと相違点

  1. ローカル ディストリビューターを使用します。
    • これにより、サーバーのパフォーマンスに影響が生じます。
    • パフォーマンスへの影響を許容できない場合は、別のサーバーを使用できますが、管理がさらに複雑になります。
  2. スナップショット フォルダーを選択する際は、選択したフォルダーが、レプリケートするすべてのテーブルの BCP を保持するのに十分な大きさであることを確認してください。
  3. スナップショットの作成では、その処理が完了するまで関連付けられたテーブルがロックされるため、スナップショットは適宜スケジュールしてください。
  4. Azure SQL Database でサポートされているのは、プッシュ サブスクリプションのみです。 サブスクライバーを追加できるのは、ソース データベースからのみです。

データベース移行に関する互換性の問題の解決

ソース データベースの SQL Server のバージョンと移行するデータベースの複雑さに応じて、さまざまな互換性の問題が発生する可能性があります。 SQL Server のバージョンが古いほど、互換性の問題が多く発生します。 任意の検索エンジンを使用する対象のインターネット検索に加え、以下のリソースを使用します。

インターネット検索やこれらのリソースの参照に加えて、MSDN SQL Server コミュニティ フォーラムStackOverflow も参照してください。

次のステップ