SSMS でリンクを構成する - Azure SQL Managed Instance

適用対象:Azure SQL Managed Instance

この記事では、SQL Server Management Studio (SSMS) を使用して SQL Server と Azure SQL Managed Instance 間でリンクを構成する方法を説明します。 リンクを使用すると、初期プライマリのデータベースが準リアルタイムでセカンダリ レプリカにレプリケーションされます。

リンクが作成されたら、移行またはディザスター リカバリーのためにセカンダリ レプリカにフェールオーバーできます。

Note

  • スクリプトを使用してリンクを構成することもできます。
  • 初期プライマリとして Azure SQL Managed Instance を構成することは現在プレビュー段階であり、SQL Server 2022 CU10 以降でのみサポートされています。

概要

リンク機能を使用して、最初のプライマリからセカンダリ レプリカにデータベースをレプリケーションします。 SQL Server 2022 の場合、初期プライマリは SQL Server または Azure SQL Managed Instance のいずれかになります。 SQL Server 2019 以前のバージョンの場合、初期プライマリは SQL Server である必要があります。 リンクが構成されると、初期プライマリのデータベースがセカンダリ レプリカにレプリケーションされます。

プライマリ レプリカとセカンダリ レプリカ間のハイブリッド環境での継続的なデータ レプリケーション用のリンクをそのままにするか、データベースをセカンダリ レプリカにフェールオーバーし、Azure に移行したり、ディザスター リカバリーを行ったりするかを選択できます。 SQL Server 2019 以前のバージョンでは、Azure SQL Managed Instance にフェールオーバーするとリンクが切断されます。フェールバックはサポートされていません。 SQL Server 2022 では、リンクを維持し、2 つのレプリカ間でフェールバックすることができます。この機能は現在プレビュー段階です。

セカンダリ マネージド インスタンスをディザスター リカバリーにのみ使用する場合は、ハイブリッド フェールオーバー特典をアクティブ化することで、ライセンス コストを節約できます。

この記事の手順を使用して、SQL Server と Azure SQL Managed Instance の間のリンクを手動で設定します。 リンクが作成されると、ソースのデータベースはターゲットのセカンダリ レプリカ上の読み取り専用コピーを取得します。

前提条件

Note

リンクの一部の機能は一般提供されていますが、一部は現在プレビュー段階です。 詳細については、「バージョンのサポート可能性」を確認してください。

リンクを通じてデータベースをセカンダリ レプリカにレプリケーションするには、次の前提条件を満たす必要があります。

以下、具体例に沿って説明します。

  • リンク機能では、リンクごとに 1 つのデータベースをサポートします。 1 つのインスタンスで複数のデータベースをレプリケーションするには、個々のデータベースごとにリンクを作成します。 たとえば、10 個のデータベースを SQL Managed Instance にレプリケートするには、10 個のリンクを作成します。
  • 照合順序は、SQL Server と SQL Managed Instance 間で同じにする必要があります。 照合順序が一致していないとサーバー名の大文字と小文字が一致せず、SQL Server から SQL Managed Instance に正常に接続できません。
  • 最初の SQL Server プライマリで発生するエラー 1475 は、COPY ONLY オプションを指定せずに完全バックアップを作成することで新しいバックアップ チェーンを開始する必要があることを示します。

アクセス許可

SQL Server の場合、sysadmin アクセス許可が必要です。

Azure SQL Managed Instance の場合、SQL Managed Instance 共同作成者のメンバーであるか、次のカスタム ロールのアクセス許可を持っている必要があります。

Microsoft.Sql/ リソース 必要なアクセス許可
Microsoft.Sql/managedInstances /read、/write
Microsoft.Sql/managedInstances/hybridCertificate /action
Microsoft.Sql/managedInstances/databases /read、/delete、/write、/completeRestore/action、/readBackups/action、/restoreDetails/read
Microsoft.Sql/managedInstances/distributedAvailabilityGroups /read、/write、/delete、/setRole/action
Microsoft.Sql/managedInstances/endpointCertificates /read
Microsoft.Sql/managedInstances/hybridLink /read、/write、/delete
Microsoft.Sql/managedInstances/serverTrustCertificates /write、/delete、/read

データベースを準備する

SQL Server が最初のプライマリである場合は、データベースのバックアップを作成する必要があります。 Azure SQL Managed Instance はバックアップを自動的に取得するため、SQL Managed Instance が初期プライマリである場合は、この手順をスキップします。

SSMS を使用して SQL Server 上のデータベースをバックアップします。 次のステップを実行します。

  1. SQL Server Management Studio (SSMS) で SQL Server に接続します。
  2. オブジェクト エクスプローラーで、データベースを右クリックし、[タスク] の上にカーソルを置き、[バックアップ] を選択します。
  3. バックアップの種類として [完全] を選択します。
  4. [バックアップ先] オプションに、十分な空き記憶域を使用できるディスクへのバックアップ パスが設定されていることを確認します。
  5. [OK] を選択して完全バックアップを完了します。

詳細については、「フル データベース バックアップの作成」を参照してください。

Note

このリンクでは、ユーザー データベースのレプリケーションのみをサポートしています。 システム データベースのレプリケーションはサポートされていません。 (master または msdb に格納されている) インスタンス レベルのオブジェクトをレプリケーションするには、それらのスクリプトを作成し、レプリケーション先のインスタンスで T-SQL スクリプトを実行します。

次の手順では、SSMS の新しい Managed Instance リンク ウィザードを使用して最初のプライマリとセカンダリ レプリカとの間のリンクを作成します。

リンクを作成すると、ソースのデータベースはターゲットのセカンダリ レプリカ上の読み取り専用コピーを取得します。

  1. SSMS を開き、最初のプライマリに接続します。

  2. オブジェクト エクスプローラーで、セカンダリにリンクさせるデータベースを右クリックし、Azure SQL Managed Instance のリンクをポイントし、[新規…] を選択して [新しいマネージド インスタンスのリンク] ウィザードを開きます。 お使いの SQL Server バージョンではサポートされていない場合、このオプションはコンテキスト メニューで使用できません。

    Screenshot that shows a database's context menu option to create a new link.

  3. ウィザードの [概要] ページで [次へ] を選択します。

  4. [リンク オプションの指定] ページで、リンクの名前を指定します。複数のデータベースを選択すると、指定した名前の末尾にデータベース名が自動的に追加されるため、自分で含める必要はありません。 接続のトラブルシューティングを有効にする場合、および SQL Server 2022 でリンクを双方向ディザスター リカバリーに使用する場合は、チェック ボックスをオンにします。 [次へ] を選択します。

  5. [要件] ページで、ウィザードが要件を検証し、セカンダリへのリンクを確立します。 すべての要件が検証されたら [次へ] を選択します。または、満たされていない要件を解決して、[検証の再実行] を選択します。

  6. [データベースの選択] ページで、リンクを使用してセカンダリ レプリカにレプリケーションするデータベースを選択します。 複数のデータベースを選択すると、リンクごとに 1 つずつ、複数の分散型可用性グループが作成されます。 [次へ] を選択します。

  7. [セカンダリ レプリカの指定] ページで、[セカンダリ レプリカの追加] を選択します。 最初のプライマリが SQL Server の場合は、[Azure へのサインイン] ウィンドウが開きます。 初期プライマリが SQL Managed Instance の場合、[サーバーへの接続] ダイアログ ボックスが開きます。

    1. SQL Server の初期プライマリの場合は、Azure にサインインし、ドロップダウンからサブスクリプション、リソース グループ、およびセカンダリ SQL Server マネージド インスタンスを選択します。 [ログイン] を選択して [サーバーへの接続] ダイアログ ボックスを開き、データベースをレプリケーションする SQL Managed Instance に接続します。 [サインイン] ウィンドウに「ログインに成功しました」と表示されたら、[OK] を選択してウィンドウを閉じ、新しい Managed Instance リンク ウィザードに戻ります。
    2. SQL Managed Instance の初期プライマリの場合は、データベースをレプリケーションする SQL Server インスタンスに接続します。
  8. カンダリ レプリカを追加した後、必要に応じてウィザードのタブを使用してエンドポイント設定を変更し、バックアップとリンク エンドポイントに関する情報を他のタブで確認します。 続行する準備ができたら、[次へ] を選択します。

  9. SQL Managed Instance が最初のプライマリである場合、ウィザードの次のページは [Azure へのログイン] ページです。 必要に応じてもう一度サインインし、[次へ] を選択します。 このページは、SQL Server が最初のプライマリである場合は使用できません。

  10. [検証] ページで、すべての検証が成功していることを確認します。 失敗した場合は、それらを解決してから、検証を再実行します。 準備ができたら、[次へ] を選択します。

  11. [概要] ページで、構成をもう一度確認します。 必要に応じて、[スクリプト] を選択してスクリプトを生成し、後で同じリンクを簡単に再作成できるようにします。 リンクを作成する準備ができたら、[完了] を選択します。

  12. [アクションの実行] ページには、各アクションの進行状況が表示されます。

  13. すべての手順が完了すると、[結果] ページで、正常に完了したアクションの横にチェック マークが表示されます。 これで、ウィンドウを終了できます。

レプリケートされたデータベースを表示する

リンクが作成されると、データベースがセカンダリ レプリカにレプリケーションされます。 データベースのサイズとネットワーク速度によっては、セカンダリ レプリカ上のデータベースの最初の状態が [復元中] になっていることがあります。 最初のシード処理が終了すると、データベースはセカンダリ レプリカに復元され、読み取り専用ワークロードの準備が完了します。

どちらのレプリカでも、SSMS のオブジェクト エクスプローラーを使用すると、レプリケーションされたデータベースの同期状態を表示できます。 [Always On 高可用性][Availability Groups] (可用性グループ) を展開して、各リンク用に作成された分散型可用性グループを表示します。

Screenshot that shows the state of the SQL Server database and distributed availability group in S S M S.Screenshot that shows the state of the SQL Managed Instance database and distributed availability group.

どのインスタンスがプライマリであるかにかかわらず、SQL Server でリンクされた分散型可用性グループを右クリックし、[ダッシュボードの表示] を選択して、分散型可用性グループのダッシュボードを表示することもできます。このダッシュボードには、分散型可用性グループ内のリンクされたデータベースの状態が表示されます。

ワークロードを停止する

データベースをセカンダリ レプリカに移行またはフェールオーバーする準備ができたら、まず、メンテナンス時間中にプライマリ レプリカ上のアプリケーション ワークロードを停止します。 これにより、データベース レプリケーションがセカンダリに追いつくことができるため、データを失うことなくセカンダリにフェールオーバーまたは移行できます。 フェールオーバーする前に、アプリケーションがプライマリにトランザクションをコミットしていないことを確認します。

データベースのフェールオーバー

SSMS の SQL Server とマネージド インスタンス間のフェールオーバー ウィザードを使用して、プライマリ レプリカからセカンダリ レプリカにデータベースをフェールオーバーします。

プライマリ レプリカまたはセカンダリ レプリカから計画フェールオーバーを実行できます。 強制フェールオーバーを実行するには、セカンダリ レプリカに接続します。

注意

  • フェールオーバーを行う前に、レプリケーションされたデータベースが完全に追いつき、フェールオーバーによるデータ損失を防ぐために、ソース データベース上のワークロードを停止します。 強制フェールオーバーを実行している場合は、データが失われる可能性があります。
  • SQL Server 2019 以前のバージョンのデータベースをフェールオーバーすると、2 つのレプリカ間のリンクが解除され、削除されます。 初期プライマリにフェールバックすることはできません。
  • SQL Server 2022 とのリンクを維持しつつ、データベースをフェールオーバーすることは現在プレビュー段階です。

データベースをフェールオーバーするには、次の手順に従います。

  1. SSMS を開き、いずれかのレプリカに接続します。

  2. オブジェクト エクスプローラーで、レプリケーションされたデータベースを右クリックし、Azure SQL Managed Instance のリンクにマウス ポインターを合わせ、[フェールオーバー…] を選択して、SQL Server と Managed Instance 間のフェールオーバー ウィザードを開きます。 同じデータベースから複数のリンクがある場合は、オブジェクト エクスプローラー[Always On 可用性グループ] の下にある [可用性グループ] を展開し、フェールオーバーするリンクの分散型可用性グループを右クリックします。 [フェールオーバー...] を選択すると、その特定のリンクに対する SQL Server と Managed Instance の間のフェールオーバー ウィザードが開きます。

    Screenshot that shows a database's context menu option for failover.

  3. 概要ページで、次へを選択します。

  4. [フェールオーバーの種類の選択] ページには、各レプリカ、選択したデータベースのロール、サポートされているフェールオーバーの種類の詳細が表示されます。 任意のレプリカからフェールオーバーを開始できます。 強制フェールオーバーを選択した場合は、データ損失の可能性があることを受け入れるために、ボックスをチェックする必要があります。 [次へ] を選択します。

  5. [Azure とリモート インスタンスへのログイン] ページで、[サインイン] を選択して資格情報を入力し、Azure アカウントにサインインします。 [ログイン] を選択して、SQL Server または SQL Managed Instance のセカンダリ レプリカにサインインするように求められたらサインインします。

  6. [フェールオーバー後の操作] ページでは、SQL Server 2022 と、それよりも古いバージョンでオプションが異なります。

    1. SQL Server 2022 では、レプリカ間のレプリケーションを停止し、フェールオーバーの完了後にリンクと分散型可用性グループを削除することができます。 リンクを維持し、レプリカ間でデータのレプリケーションを続行する場合は、ボックスをオフチェックのままにします。 リンクを削除する場合は、データベースを Azure にレプリケーションするためだけに作成した可用性グループが不要になった場合は、このボックスをチェックして可用性グループを削除することもできます。 シナリオに合ったチェック ボックスをオンにし、[次へ] を選択します。
    2. SQL Server 2019 以前のバージョンの場合、リンクを削除するオプションは既定でチェックされ、SQL Managed Instance にフェールオーバーするとレプリケーションが停止し、リンクが切断され、分散型可用性グループが削除されるため、リンクをチェック解除することはできません。 リンクが削除されることを理解したことを示すチェック ボックスをオンにし、[次へ] を選択します。
  7. [要約] ページでアクションを確認します。 必要に応じて、[スクリプト] を選択してスクリプトを生成し、後で同じリンクを使用してデータベースのフェールオーバーを行えるようにします。 データベースのフェールオーバーを行う準備ができたら、[完了] を選択します。

  8. すべての手順が完了すると、[結果] ページで、正常に完了したアクションの横にチェック マークが表示されます。 これで、ウィンドウを終了できます。

SQL Server 2022 のリンクを維持する場合、セカンダリは新しいプライマリになり、リンクはまだアクティブのままで、セカンダリにフェールバックできます。

SQL Server 2019 以前のバージョンを使用している場合、または SQL Server 2022 のリンクを削除することを選択した場合、リンクは削除され、フェールオーバーの完了後に存在しなくなります。 それぞれのレプリカ上のソース データベースとターゲット データベースは両方、読み取り/書き込みワークロードを実行できます。 これらは完全に独立しています。

重要

SQL Managed Instance へのフェールオーバーが成功した後、アプリケーションの接続文字列が SQL マネージド インスタンスの FQDN を指すように手動で設定し直し、移行またはフェールオーバー プロセスを完了して、Azure での実行を続けます。

フェールオーバー後のデータベースを確認する

SQL Server 2022 の場合、リンク維持する場合は、SQL Server または SQL Managed Instance のオブジェクト エクスプローラーでデータベースを確認できます。 データベースの状態が [同期済み] で、[可用性グループ] の下に分散可用性グループが存在します。

フェールオーバー中にリンクを削除した場合は、オブジェクト エクスプローラーを使用して分散型可用性グループが存在しなくなったかどうかを確認できますが、可用性グループを保持することを選択した場合でも、データベースは同期されます。

トラブルシューティング

このセクションでは、リンクの構成と使用に関する問題に対処するためのガイダンスを提供します。

エラー

リンクの作成時またはデータベースのフェールオーバー時にエラー メッセージが表示された場合は、エラーを選択して、エラーに関する詳細を表示するウィンドウを開きます。

リンクの操作中にエラーが発生した場合、SSMS ウィザードは失敗した段階で実行を停止し、再度再起動することはできません。 この問題に対処し、必要に応じて、分散型高可用性グループおよび可用性グループ (リンクの設定時に作成された場合) を削除して元の状態に戻すことで環境をクリーンアップします。 次に、ウィザードをもう一度起動して最初からやり直します。

強制フェールオーバー後の一貫性のない状態

強制フェールオーバーを使用すると、プライマリ レプリカとセカンダリ レプリカの間で一貫性のない状態が発生し、両方のレプリカが同じ役割となるスプリット ブレイン シナリオが発生する可能性があります。 1 つのレプリカを手動でプライマリとして指定し、もう一方のレプリカをセカンダリとして指定することで、ユーザーが状況を解決するまで、データ レプリケーションはこの状態では失敗します。

リンク機能の詳細については、以下のリソースを確認してください。