強制フェイルオーバー (FORCE_FAILOVER_ALLOW_DATA_LOSS) とフェイルオーバー後の復旧
SQL ServerAlways On と HAコマンド
-- 1) On each candidate secondary: pick the most current one (highest end_of_log_lsn)
SELECT ag.name AS ag_name, DB_NAME(drs.database_id) AS db,
drs.synchronization_state_desc, drs.end_of_log_lsn, drs.last_commit_time
FROM sys.dm_hadr_database_replica_states drs
JOIN sys.availability_groups ag ON ag.group_id = drs.group_id
WHERE drs.is_local = 1;
-- 2) On the chosen replica (while the primary is unreachable):
ALTER AVAILABILITY GROUP [AG_Musteri] FORCE_FAILOVER_ALLOW_DATA_LOSS;
-- 3) On the other secondaries, resume the suspended data movement:
ALTER DATABASE [Musteri] SET HADR RESUME;
-- 4) When the old primary returns (now a SUSPENDED secondary):
-- take a snapshot first to inspect the lost transactions, then resume
CREATE DATABASE [Musteri_lost_snap]
ON (NAME = N'Musteri', FILENAME = N'D:\Data\Musteri_lost_snap.ss')
AS SNAPSHOT OF [Musteri];
ALTER DATABASE [Musteri] SET HADR RESUME;概要
プライマリが完全に失われた場合に、データ損失を受け入れて DR レプリカをプライマリにする。その後、他のレプリカで中断されたデータ移動を再開し、旧プライマリが復帰したら、新しいプライマリに到達しなかったトランザクションを調べるためにスナップショットを取得する。
使用する場面
プライマリデータセンターがダウンした場合、非同期レプリカしか残っていない場合、または同期レプリカが SYNCHRONIZED でないにもかかわらずフェイルオーバーが必要な場合。
注意
データ損失: 最後に確定 (hardened) した LSN 以降のトランザクションは失われる。先に業務側から RPO の承認を得る。強制フェイルオーバー後、すべてのセカンダリデータベースは SUSPENDED になる。HADR RESUME まではログが切り捨てられず増大し続ける。WSFC クォーラムが失われている場合は、先にクォーラムを強制してクラスタを起動する (PowerShell: Start-ClusterNode -FixQuorum)。そうしないとコマンドは失敗する。旧プライマリで HADR RESUME を実行すると、失われたトランザクションは完全に破棄される。スナップショットを取得せずに再開しない。