このページでは、SQL Server の Always On 可用性グループの概要と、フェイルオーバーとデータ復旧のシナリオで Datastream がどのようにサポートしているかについて説明します。
Always On 可用性グループの概要
SQL Server の Always On 可用性グループは、障害復旧シナリオ用にデータベースを準備できる高可用性ソリューションです。
Always On 可用性グループは、ビジネスのデータベースの可用性を最大化します。可用性グループは、可用性データベースと呼ばれる選択されたデータベースのセットのレプリケートされた環境をサポートします。各グループには、読み取りタスクと書き込みタスク用のプライマリ データベースのセットが 1 つと、対応するセカンダリ データベースのセットが最大 8 つ含まれます。セカンダリ データベースでは、読み取り専用アクセスまたはバックアップ オペレーションを許可できます。
Always On 可用性グループの詳細については、SQL Server のドキュメントの Always On 可用性グループとはをご覧ください。
SQL Server インスタンスの Always On 可用性グループの前提条件については、SQL Server のドキュメントをご覧ください。
Always On 可用性グループで使用するようにデータストリームを構成する
Datastream は、テーブル変更の CDC メソッドで synchronous-commit 可用性モードをサポートしています。このモードでは、データ同期が停止するまで、セカンダリ データベースは対応するプライマリと同期されたままになります。トランザクションの確認は、セカンダリ レプリカが受信したトランザクション ログレコードをディスクに書き込んだ場合にのみクライアントに送信されます。
可用性モードについては、Always On 可用性グループの可用性モードの違いをご覧ください。
Always On 可用性グループで使用するように SQL Server インスタンスを構成するには、フェイルオーバーが発生したときにログをキャプチャするように SQL Server エージェントを有効にしてから、クリーンアップ ジョブを実行する必要があります。これを行うには、現在のレプリカが実際にプライマリであるかどうかを確認するように CDC エージェントのジョブステップを変更する必要があります。これは、sys.fn_hadr_is_primary_replica 関数を使用して行われます。
次のコマンドを使用して、インスタンスを設定します。
-- Check if the current replica is a primary for the corresponding database.
USE [DATABASE_NAME];
DECLARE @DatabaseName SYSNAME = DB_NAME();
IF (SELECT sys.fn_hadr_is_primary_replica(@DatabaseName)) = 1
BEGIN
-- If the replica isn't a primary, the code block that follows is skipped
EXECUTE sys.sp_cdc_add_job @job_type = 'capture';
EXECUTE sys.sp_cdc_add_job @job_type = 'cleanup';
END
既知の制限事項
Always On 可用性グループで Datastream を使用する場合の既知の制限事項は次のとおりです。
- Datastream は、リスナー IP アドレスに基づくプライベート DNS の解決をサポートしていません。レプリカの IP アドレスを手動で切り替える必要があります。
- 可用性グループのフェイルオーバー後、SQL Server エージェントのキャプチャ ジョブとクリーンアップ ジョブが新しいプライマリで実行されていることを手動で確認する必要があります。そうしないと、Datastream が変更を読み取る前にトランザクション ログが切り捨てられ、データ損失が発生する可能性があります。
- レプリカがプライマリよりも前に作成された場合は、データ整合性の問題を回避するために、ストリームに
always_on_availability: trueラベルを追加する必要があります。ストリームにラベルを追加する方法については、ストリームの設定を定義するをご覧ください。
次のステップ
- Datastream と SQL Server ソースの連携の仕組みの詳細を確認します。