次の方法で共有


フェールオーバー リンク - Azure SQL マネージド インスタンス

Applies to:Azure SQL Managed Instance

この記事では、ディザスター リカバリーまたは移行のために SQL Server Management Studio (SSMS) または PowerShell を使用して、SQL ServerとAzure SQL Managed Instanceの間でデータベース リンクをフェールオーバーする方法について説明します。

前提条件

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

ワークロードを停止する

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

レプリケーションのラグを確認する

計画されたフェールオーバーを実行する前に、セカンダリ レプリカがプライマリ レプリカに追いつくことが重要です。 セカンダリ レプリカがプライマリ レプリカから大幅に遅れている場合、計画されたフェールオーバーはタイムアウトになり、失敗する可能性があります。

レプリカ間のレプリケーションのラグを監視するには、SQL ServerとSQL Managed Instanceの両方で次の T-SQL クエリを使用します。

-- Execute on SQL Server and SQL Managed Instance 
USE master
DECLARE @link_name varchar(max) = '<DAGname>'
SELECT
   ag.name [Link name], 
   ars1.role_desc [Link role],
   ars2.connected_state_desc [Link connected state],
   ars2.synchronization_health_desc [Link sync health],
   drs.secondary_lag_seconds [Link replication latency (seconds)]
FROM
   sys.availability_groups ag 
   JOIN sys.dm_hadr_availability_replica_states ars1
   ON ag.group_id = ars1.group_id
   JOIN sys.dm_hadr_availability_replica_states ars2
   ON ag.group_id = ars2.group_id
   JOIN sys.dm_hadr_database_replica_states drs
   ON ars2.replica_id = drs.replica_id
WHERE 
   ag.is_distributed = 1 AND ag.name = @link_name AND ars1.is_local = 1 AND ars2.is_local = 0
GO

レプリケーションのラグが大きい場合は、セカンダリ レプリカがプライマリ レプリカに追いつくのを待ちます。 2 つのインスタンス間のリンク ネットワーク スループットの向上やセカンダリ レプリカのリソース容量の増加など、ラグが続く場合は、追加のトラブルシューティング手順を実行する必要があります。

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

Transact-SQL (T-SQL)、SQL Server Management Studio、または PowerShell を使用して、リンクされたデータベースをフェールオーバーできます。

SQL Server 2022 CU13 (KB5036432) 以降では、Transact-SQLを使用してリンクをフェールオーバーできます。

リンクの計画フェールオーバーを行うには、プライマリ レプリカで次の T-SQL コマンドを使用します。

ALTER AVAILABILITY GROUP [<DAGname>] FAILOVER

強制フェールオーバーを行うには、セカンダリ レプリカで次の T-SQL コマンドを使用します。

ALTER AVAILABILITY GROUP [<DAGname>] FORCE_FAILOVER_ALLOW_DATA_LOSS

重要

計画されたフェールオーバーを実行した後、レプリケーション モードは非同期に設定されます。

複数のデータベースをフェールオーバーする

パフォーマンスと予測可能性を最適化するために、同じサーバー上のインスタンスから複数のデータベースをフェールオーバーする場合は、インスタンスごとに一度に 8 つのデータベースをフェールオーバーします。 たとえば、それぞれ 32 個のリンクされたデータベースを持つ 10 個のインスタンスがある場合は、各インスタンスから一度に 8 つのデータベースをフェールオーバーし、すべてのデータベースがフェールオーバーされるまでプロセスを繰り返します。

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

SQL Server 2022 の場合、リンクを維持することを選択した場合は、SQL Server Management Studioの オブジェクト エクスプローラー の Availability Groups に分散可用性グループが存在することを確認できます。

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

フェールオーバー後のクリーンアップ

フェールオーバーの成功後にリンクを削除が選択されていない限り、SQL Server 2022 でフェールオーバーしてもリンクは中断されません。 フェールオーバー後もリンクは維持され、可用性グループと分散型可用性グループはアクティブなままとなります。 これ以外の操作は必要ありません。

リンクを削除すると、分散型可用性グループのみが削除され、可用性グループはアクティブなままとなります。 可用性グループを保持するか、削除するかを決定できます。

可用性グループを削除する場合は、次の値を置き換えてからサンプルの T-SQL コードを実行します。

  • <AGName>、SQL Server (リンクの作成に使用) の可用性グループの名前を指定します。
-- Run on SQL Server
USE MASTER
GO
DROP AVAILABILITY GROUP <AGName> 
GO

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

強制フェールオーバー後、両方のレプリカがプライマリ ロールに存在するスプリット ブレイン シナリオが発生し、リンクが不整合な状態のままになる場合があります。 これは、障害発生時にセカンダリ レプリカにフェールオーバーした後、プライマリ レプリカがオンラインに戻った場合に発生する可能性があります。

この問題を解決するには、「スプリット ブレイン シナリオのを修正する」を参照してください。

リンクの使用については、以下を参照してください。

リンクの詳細については、以下を参照してください。

他のレプリケーションおよび移行シナリオについては、以下を検討してください。