適用対象:SQL Server 2022 (16.x)
包含可用性グループは、以下をサポートする Always On 可用性グループ (AG) です。
インスタンス レベルに加え、AG レベルでのメタデータ オブジェクト (ユーザー、ログイン、アクセス許可、SQL Agent ジョブなど) を管理する
AG内の特殊なコンテインドシステムデータベース。
この記事では、包含 AG の類似点、相違点、および機能について詳しく説明します。
概要
AG は、一般に、調整されたグループとして動作することを目的とした 1 つ以上のユーザー データベースで構成され、クラスター内の一部のノード上にレプリケートされます。 ノードまたはプライマリ コピーをホストするノード上の SQL Server の正常性で障害が発生した場合、データベースのグループは、AG 内の別のレプリカ ノードにユニットとして移動します。 すべてのユーザー データベースは、同期モードまたは非同期モードで AG のすべてのレプリカ間で同期された状態を維持します。
このアーキテクチャは、その一連のユーザー データベースとのみ対話するアプリケーションに適しています。 ただし、アプリケーションがユーザー、ログイン、アクセス許可、エージェント ジョブ、システム データベース (master または msdb) のいずれかに格納されているその他のオブジェクトにも依存する場合は、課題が発生します。 アプリケーションが円滑かつ予測可能に機能するように、管理者は、これらのオブジェクトに対する変更が AG 内のすべてのレプリカ インスタンス間で重複していることを 手動 で確認する必要があります。 AG に新しいインスタンスを追加する場合は、データベースを簡単なプロセスで自動的または手動でシード処理できます。 ただし、他のレプリカと一致するように、新しいインスタンス上のすべてのシステム データベースのカスタマイズを再構成する必要があります。
包含 AG とは、master および msdb データベースの関連部分を含むように、レプリケートされるデータベースのグループの概念を拡張したものです。 これは、包含 AG を使用するアプリケーションの実行コンテキストと考えてください。 この考え方は、含まれている AG 環境に、それらに依存するアプリケーションに影響を与える設定が含まれていることです。 そのため、包含 AG 環境は、アプリケーションがやり取りするすべてのデータベース、アプリケーションが使用する認証 (ログイン、ユーザー、アクセス許可)、実行する予定のスケジュール済みジョブ、およびアプリケーションに影響を与えるその他の構成設定に関係します。
この概念は、データベース自体にユーザー情報を格納することで、ユーザー アカウントに異なるメカニズムを使用する包含データベースとは異なります。 包含データベースはログインとユーザーのみをレプリケートし、レプリケートされるログインとユーザーの範囲はその単一データベース (およびそのレプリカ) に限定されます。
これに対し、包含 AG では、ユーザー、ログイン、アクセス許可などを AG レベルで作成します。 これらのオブジェクトは、AG 内のレプリカ間で 自動的に 一貫性を持ち、その AG 内のデータベース間で一貫性があります。 この一貫性により、管理者はこれらの変更を手動で行う必要ができなくなります。
SQL Server 2025 の変更
SQL Server 2025 (17.x) では、包含可用性グループに対する 分散型可用性グループ のサポートが導入されています。
相違点
包含 AG を使用する場合は、いくつかの実際的な違いを考慮してください。 これらの違いには、包含システム データベースを作成し、インスタンス レベルで接続するのではなく、包含 AG レベルで接続を強制することが含まれます。
包含システム データベース
包含 AG それぞれには、可用性グループの名前から名付けられた、独自のシステム データベース master および msdb があります。 たとえば、AG MyContainedAG には、MyContainedAG_master と MyContainedAG_msdb という名前のデータベースがあります。 これらのシステム データベースは自動的に新しいレプリカにシード処理され、更新は可用性グループ内の他のデータベースと同様にこれらのデータベースにレプリケートされます。 包含 AG に接続している間にログイン ジョブやエージェント ジョブなどのオブジェクトを追加しても、エージェント ジョブが表示され、包含 AG が別のインスタンスにフェールオーバーしたときに、包含 AG で作成されたログインを使用して認証できます。
重要
包含 AG は、可用性グループのレプリカ間で実行環境の構成の一貫性を維持するためのメカニズムです。 セキュリティ境界を表すものではありません。 たとえば、包含 AG への接続が AG の外部にあるデータベースにアクセスできないようにする境界はありません。
新しく作成された包含 AG のシステム データベースは、 CREATE AVAILABILITY GROUP コマンドを実行したインスタンスからコピーされません。 最初は、データのない空のテンプレートです。 作成直後に、プロセスは、包含 AG を作成するインスタンスの管理者アカウントを、包含 AG masterにコピーします。 こうすることで、管理者は、含まれている AG にサインインし、残りの構成を設定できます。
インスタンスにローカル ユーザーまたは構成を作成した場合、包含システム データベースを作成しても自動的に表示されず、包含 AG に接続しても表示されません。 ユーザー データベースが包含 AG に参加すると、これらのユーザーはすぐにアクセスできなくなります。 データベースに直接接続するか、リスナーエンドポイントを使用することで、包含 AG のコンテキスト内で、包含データベース内のシステムデータベースにこれらを手動で再作成する必要があります。 この規則の例外は、親インスタンスの sysadmin ロールのすべてのログインが、包含 AG の作成時に新しい AG 固有の master データベースにコピーされる点です。
注
master データベースは包含可用性グループごとに独立しているため、包含 AG のコンテキストで実行されるサーバー スコープ アクティビティは、包含システム データベースにのみ保持されます。 この規則には監査が含まれます。 SQL Server 監査を使用してサーバー レベルのアクティビティを監査する場合は、各包含 AG 内に同じサーバー監査を作成する必要があります。
最初のデータ同期
包含システム データベースでは、初期データ同期方法としての自動シード処理のみがサポートされます。
SQL Server 2022 (16.x) 以前のバージョンでは、包含可用性グループは作成時に自動シード処理を使用する必要があります。 SQL Server Management Studio で CREATE AVAILABILITY GROUP ステートメントまたは新しい可用性グループ ウィザードを使用する場合は、自動シード処理をサポートするユーザー データベースのみを含めます。 手動シード処理 (JOIN ONLY) を使用して大規模なデータベースを追加するには、含まれている AG が作成されるまで待ちます。
SQL Server 2025 (17.x) では、 CREATE AVAILABILITY GROUP ステートメントで手動シード処理が指定されている場合でも、包含システム データベースでは常に自動シード処理が使用されます。 シード処理モードを手動に設定して包含 AG を作成し、後で自動シード処理以外の同期方法を使用してユーザー データベースを追加できます。
包含システム データベースの復元
包含システム データベースのバックアップを復元するには、次の手順に従います。
包含 AG を削除します。
含まれている AG の元のプライマリ レプリカ上に、含まれている
masterおよびmsdbデータベースを復元します。包含
masterデータベースとmsdbデータベースをセカンダリ レプリカから削除します。プライマリ レプリカで、元の名前とノードを使用して、
WITH (CONTAINED, REUSE_SYSTEM_DATABASES)とSEEDING_MODE = AUTOMATIC構文を使用して、含まれている AG を再作成します。
包含可用性グループを再作成するときは、 CREATE AVAILABILITY GROUP ステートメントに包含システム データベースを含めないでください。
REUSE_SYSTEM_DATABASESを指定すると、SQL Server によって自動的に検出されます。 SQL Server 2022 (16.x) 以前のバージョンでは、自動シード処理をサポートする小規模なユーザー データベースのみが含まれます。
JOIN ONLYを使用して、包含 AG の作成後に大規模なデータベースを個別に追加します。
包含可用性グループのジョブ
包含可用性グループに属するジョブは、プライマリ レプリカでのみ実行されます。 セカンダリ レプリカでは実行されません。
接続する (包含環境)
インスタンスへの接続と包含 AG への接続の違いを区別することが重要です。 包含 AG の環境にアクセスする方法は、包含 AG リスナーに接続するか、包含 AG 内のデータベースに接続するかのみです。
"Persist Security Info=False;
User ID=MyUser;Password=*****;
Initial Catalog=MyContainedDatabase;
Server=MyServer;"
ここで MyContainedDatabase は、操作する包含 AG 内のデータベースである。
包含 AG を効果的に使用するには、包含 AG のリスナーを作成する必要があります。 包含 AG にリスナーを介して直接接続するのではなく、包含 AG をホストするインスタンスの 1 つに接続すると、包含 AG ではなくインスタンスの環境にアクセスします。
たとえば、可用性グループ MyContainedAG がサーバー SERVER\MSSQLSERVER 上でホストされている場合に、リスナー MyContainedAG_Listener に接続するのではなく、SERVER\MSSQLSERVER を使用してインスタンスに接続すると、MyContainedAG の環境ではなくインスタンスの環境にアクセスします。 インスタンスのシステム データベースにあるコンテンツ (ユーザー、アクセス許可、ジョブなど) が適用されます。 包含 AG の包含システム データベースにある内容にアクセスするには、代わりに包含 AG のリスナー (MyContainedAG_Listener など) に接続します。 包含 AG リスナーを介してインスタンスに接続すると、master とやり取りする際に、実際には包含 master データベース (MyContainedAG_master など) にリダイレクトされます。
読み取り専用ルーティングと包含可用性グループ
読み取りインテントを持つ接続をセカンダリ レプリカにリダイレクトするように読み取り専用ルーティングを構成し ( Always On 可用性グループの読み取り専用ルーティングの構成を参照)、包含 AG でのみ作成されたログインを使用して接続する場合は、さらに考慮事項があります。
- 接続文字列に含まれる AG の一部であるデータベースを指定する必要があります。
- 接続文字列に指定されたユーザーには、包含 AG 内のデータベースにアクセスするためのアクセス許可が必要です。
たとえば、次の接続文字列では、 AdventureWorks は、 MyContainedListenerを持つ包含 AG 内のデータベースであり、 MyUser は包含 AG で定義されたユーザーであり、参加しているインスタンスはありません。
"Persist Security Info=False;
User ID=MyUser;Password=*****;
Initial Catalog=AdventureWorks;
Server=MyContainedListener;
ApplicationIntent=ReadOnly"
この例では、ReadOnly ルーティング構成の一部である読み取り可能なセカンダリに接続し、含まれている AG のコンテキスト内にいます。
インスタンスへの接続と包含可用性グループへの接続の違い
- 包含 AG に接続すると、ユーザーには、包含 AG 内のデータベースと
tempdbのみが表示されます。 - インスタンス レベルでは、包含 AG の
masterとmsdbの名前は、[contained AG]_masterと[contained AG]_msdbです。 包含 AG 内では、名前はmasterとmsdbです。 - 包含 AG
masterのデータベース ID は包含 AG 内では1ですが、インスタンスに接続すると他のものになります。 - ユーザーが包含 AG 接続に接続しているときは、
sys.databasesでは包含 AG 外部のデータベースは表示されませんが、それらのデータベースには、3 部構成の名前または、USEコマンドを使うとアクセスできます。 -
sp_configureを介したサーバー構成は、包含 AG 接続から読み取ることができますが、書き込みができるのはインスタンス レベルからのみです。 - sysadmin は、包含 AG 接続から、インスタンス レベルの操作 (SQL Server のシャットダウンなど) を実行できます。
- ほとんどのデータベースレベル、エンドポイント レベル、または AG レベルの操作は、包含 AG 接続ではなく、インスタンス接続からのみ実行できます。
他の機能の操作
特定の機能を含まれる AG と一緒に使用する場合は、他の要因を考慮に入れてください。 一部の機能は現在サポートされていません。
バックアップ
包含 AG 内のデータベースをバックアップする手順は、ユーザー データベースのバックアップ手順と同じです。 このステートメントは、包含 AG ユーザー データベースと包含 AG システム データベースの両方に当てはまります。
ローカル バックアップの場所を使用する場合、バックアップ ファイルはバックアップ ジョブを実行するサーバーに配置されます。 つまり、バックアップ ファイルが別の場所にある可能性があります。
バックアップの場所にネットワーク リソースを使用する場合は、レプリカをホストするすべてのサーバーがそのリソースにアクセスする必要があります。
包含可用性グループ セッションでデータベースの作成または復元を有効にする
適用対象: SQL Server 2025 (17.x) CU 1 以降のバージョン。
SQL Server 2025 (17.x) 累積更新プログラム (CU) 1 では、包含された可用性グループ セッション内で、包含 AG リスナーを介してデータベースの作成と復元を直接有効にすることができます。 この機能強化により、適切なロールが割り当てられたユーザーのワークフローが合理化され、包含 AG 環境内でのシームレスな操作が可能になります。
dbcreator ロールを持つユーザーのみが、包含 AG セッションでデータベースを作成できます。 データベースを復元できるのは、 db_owner ロールまたは sysadmin ロールを持つユーザーだけです。
次の例では、allow_cag_create_db ストアド プロシージャのセッション コンテキスト キー sp_set_session_contexを使用して、セッションの機能を有効にします。 無効にするには、 @value を 0 に設定します。
EXECUTE sp_set_session_context
@key = N'allow_cag_create_db',
@value = 1;
分散型可用性グループ
分散型可用性グループは、2 つの基になる可用性グループにまたがる特殊な種類の可用性グループです。 分散型可用性グループを構成すると、グローバル プライマリ (最初の AG のプライマリ レプリカ) に加えられた変更が、フォワーダーと呼ばれる 2 番目の AG のプライマリ レプリカにレプリケートされます。
SQL Server 2025 (17.x) 以降では、2 つの包含 AG 間で分散型可用性グループを構成できます。 包含 AG は包含 master および msdb システム データベースに依存するため、分散型可用性グループを作成するには、2 番目の AG (フォワーダー) にグローバル プライマリと同じ包含 AG システム データベースが必要です。
分散型可用性グループのフォワーダーとして包含 AG を使用する場合は、AUTOSEEDING_SYSTEM_DATABASES ステートメントの WITH | CONTAINED オプションに句を使用して、包含 AG を作成する必要があります。
AUTOSEEDING_SYSTEM_DATABASES句は、SQL Server に対して、独自の包含 AG システム データベースの作成をスキップし、代わりにグローバル プライマリから包含 AG システム データベースをシードするように指示します。
リソース ガバナー
適用対象: SQL Server 2022 (16.x) CU 18 以降のバージョン。
累積的な更新プログラム (CU) 18 より前の SQL Server 2022 (16.x) および以前のバージョンの SQL Server では、包含可用性グループ接続でのリソース ガバナーの構成または使用はサポートされていません。
SQL Server 2022 (16.x) CU 18 以降のバージョンでは、インスタンス接続でリソース ガバナーを構成すると、インスタンス接続または包含可用性グループ接続のリソース消費量が想定どおりに管理されます。 含まれている可用性グループ接続でリソース ガバナーを構成しようとすると、エラーが発生します。
リソース ガバナーは、データベース エンジン インスタンス レベルで動作します。 インスタンス レベルでのリソース ガバナーの構成は、可用性レプリカに反映されません。 可用性レプリカをホストする各インスタンスでリソース ガバナーを構成する必要があります。
ヒント
可用性レプリカをホストするすべてのデータベース エンジン インスタンスに対して同じリソース ガバナー構成を使用して、可用性グループのフェールオーバーが発生したときに一貫した動作を確保する必要があります。
詳細については、「 リソース ガバナー と チュートリアル: リソース ガバナーの構成例とベスト プラクティス」を参照してください。
変更データ キャプチャ
変更データ キャプチャ (CDC) は SQL Agent ジョブとして実装されるため、SQL Agent が、包含 AG 内のレプリカを持つすべてのインスタンスで実行されている必要があります。
包含 AG で変更データ キャプチャを使用するには、CDC を構成する際に AG リスナーに接続します。こうすることで、CDC メタデータが包含システム データベースを使用して構成されます。
ログ配布
ソース データベースが包含 AG 内にある場合は、ログ配布を構成できます。 ただし、包含 AG 内ではログ配布のターゲットはサポートされていません。 さらに、CDC を構成した後でログ配布ジョブを変更する必要があります。
包含 AG でログ配布を構成するには、次の手順に従います。
- 包含 AG リスナーに接続します。
- 通常どおりログ配布を構成します。
- ログ配布ジョブを構成した後、バックアップを作成する前に、含まれている AG リスナーに接続するようにジョブを変更します。
透過的なデータ暗号化 (TDE)
包含 AG 内のデータベースで Transparent Data Encryption (TDE) を使用するには、包含 AG 内の包含 master データベースにデータベース マスター キー (DMK) を手動でインストールします。
TDE を使用するデータベースは、master データベース内の証明書を使用して、データベース暗号化キー (DEK) の暗号化を解除します。 その証明書がない場合、SQL Server は TDE で暗号化されたデータベースの暗号化を解除したり、オンラインにしたりすることはできません。 包含 AG では、SQL Server はデータベースの暗号化を解除するために、両方の DMK の master データベース、インスタンスの master データベース、包含 AG 内の包含 master データベースをチェックします。 どちらの場所でも証明書が見つからない場合、SQL Server はデータベースをオンラインにできません。
インスタンスの master データベースから包含 master データベースに DMK を転送するには、「 TDE で保護されたデータベースを別の SQL Server に移動する」を参照してください。主に、DMK が古いサーバーから新しいサーバーに転送される部分に注目してください。
注
SQL Server インスタンス上の任意のデータベースを暗号化すると、tempdbシステム データベースも暗号化されます。
SSIS パッケージとメンテナンス プラン
メンテナンス プランを含む SSIS パッケージの使用は、包含可用性グループではサポートされていません。
サポートされていません
現在、SQL Server の次の機能は、包含 AG ではサポートされていません。
- すべての種類 (トランザクション、マージ、スナップショットなど) の SQL Server レプリケーション。
- ターゲット データベースが包含 AG 内にある場合のログ配布。 ソース データベースが包含 AG にあるログ配布はサポートされています。
DDL のサポート
CREATE AVAILABILITY GROUP ワークフローには、いくつかのオプションを含むWITH句があります。
<with_option_spec> ::=
CONTAINED [REUSE_SYSTEM_DATABASES | AUTOSEEDING_SYSTEM_DATABASES ]
CONTAINED
このオプションは、作成する AG が包含 AG であることを指定します。
システムデータベースの再利用
REUSE_SYSTEM_DATABASES オプションは、包含 AG に対してのみ有効です。 以前の同じ名前のコンテインド AG の既存のコンテインドシステムデータベースを新規の AG に再利用するよう指定します。 たとえば、 MyContainedAGという名前の包含 AG があり、それを削除して再作成する場合は、このオプションを使用して、元の包含システム データベースの内容を再利用できます。 このオプションを使用する場合は、システム データベース名を指定しないでください。 SQL Server によって自動的に検出されます。
AUTOSEEDING_SYSTEM_DATABASES
対象:SQL Server 2025(17.x)以降のバージョン。
含まれている AG を分散型可用性グループのフォワーダーとして使用する場合は、含まれている AG をAUTOSEEDING_SYSTEM_DATABASESするときに オプションを使用する必要があります。 このオプションは、SQL Server に対して、独自の包含 AG システム データベースの作成をスキップし、代わりにグローバル プライマリから包含 AG システム データベースをシードするように指示します。
包含可用性グループに対するシステム オブジェクトのサポート
2 つのシステム ビューには、包含される可用性グループに関連する追加機能が含まれます。
-
sys.dm_exec_sessions動的管理ビューには、
contained_availability_group_id列が含まれています。 -
sys.availability_groups カタログ ビューには、
is_contained列が含まれています。