Always On 可用性グループのセカンダリ レプリカへの読み取り専用アクセスの構成

適用対象:SQL Server

既定では、プライマリ レプリカへの読み取り/書き込みアクセスと読み取りを目的としたアクセスの両方が許可され、AlwaysOn 可用性グループのセカンダリ レプリカへの接続は許可されません。 このトピックでは、 SQL Server Management Studio、Transact-SQL、または PowerShell を使用して、SQL Server で Always On 可用性グループの可用性レプリカに対する接続アクセスを構成する方法について説明します。

セカンダリ レプリカに対して読み取り専用アクセスを有効にすることによる影響と、接続アクセスの概要については、可用性レプリカに対するクライアント接続アクセスについて (SQL Server) およびアクティブなセカンダリ: 読み取り可能なセカンダリ レプリカ (Always On 可用性グループ) に関する各記事を参照してください。

前提条件と制限

  • 別の接続アクセスを構成するには、プライマリ レプリカをホストするサーバー インスタンスに接続している必要があります。

アクセス許可

タスク アクセス許可
可用性グループの作成時にレプリカを構成する sysadmin 固定サーバー ロールのメンバーシップと、CREATE AVAILABILITY GROUP サーバー権限、ALTER ANY AVAILABILITY GROUP 権限、CONTROL SERVER 権限のいずれかが必要です。
可用性レプリカを変更する 可用性グループの ALTER AVAILABILITY GROUP 権限、CONTROL AVAILABILITY GROUP 権限、ALTER ANY AVAILABILITY GROUP 権限、または CONTROL SERVER 権限が必要です。

SQL Server Management Studio を使用する

可用性レプリカに対してアクセスを構成するには

  1. オブジェクト エクスプローラーで、プライマリ レプリカをホストするサーバー インスタンスに接続し、サーバー ツリーを展開します。

  2. [AlwaysOn 高可用性] ノードと [可用性グループ] ノードを展開します。

  3. 変更するレプリカが含まれる可用性グループをクリックします。

  4. 可用性レプリカを右クリックし、 [プロパティ] をクリックします。

  5. [可用性レプリカ プロパティ] ダイアログ ボックスで、プライマリ ロールおよびセカンダリ ロールの接続アクセスを、次のように変更できます。

    • セカンダリ ロールの場合は、 [読み取り可能セカンダリ] ボックスの一覧から新しい値を選択します。値は次のとおりです。

      いいえ
      このレプリカのセカンダリ データベースに対するユーザー接続は禁止されます。 読み取りアクセスで利用することはできません。 これが既定の設定です。

      [読み取り目的のみ]
      このレプリカのセカンダリ データベースに対する接続は、読み取り専用でのみ許可されます。 セカンダリ データベースはすべて読み取りアクセスで利用できます。

      はい
      読み取りアクセスに限り、このレプリカのセカンダリ データベースに対するすべての接続が許可されます。 セカンダリ データベースはすべて読み取りアクセスで利用できます。

    • プライマリ ロールの場合は、 [プライマリ ロールの接続] ボックスの一覧から新しい値を選択します。値は次のとおりです。

      [すべての接続を許可]
      プライマリ レプリカのデータベースに対するすべての接続が許可されます。 これが既定の設定です。

      [読み取り/書き込みの接続を許可]
      Application Intent プロパティが ReadWrite に設定されている場合、または Application Intent 接続プロパティが設定されていない場合は、接続が許可されます。 Application Intent 接続プロパティが ReadOnly に設定されている接続は許可されません。 これにより、読み取りを目的としたワークロードが誤ってプライマリ レプリカに接続されるのを防ぐことができます。 "アプリケーションの目的" 接続プロパティの詳細については、「 Using Connection String Keywords with SQL Server Native Client」を参照してください。

Transact-SQL の使用

可用性レプリカに対してアクセスを構成するには

注意

この手順の例については、このセクションの後半の「 例 (Transact-SQL)」を参照してください。

  1. プライマリ レプリカをホストするサーバー インスタンスに接続します。

  2. 新しい可用性グループのレプリカを指定する場合は、CREATE AVAILABILITY GROUP Transact-SQL ステートメントを使用します。 既存の可用性グループのレプリカを追加または変更する場合は、ALTER AVAILABILITY GROUP Transact-SQL ステートメントを使用します。

    • セカンダリ ロールの接続アクセスを構成するには、ADD REPLICA 句または MODIFY REPLICA WITH 句で、SECONDARY_ROLE オプションを次のように指定します。

      SECONDARY_ROLE ( ALLOW_CONNECTIONS = { NO | READ_ONLY | ALL } )

      パラメーターの説明

      NO
      このレプリカのセカンダリ データベースに対する直接接続は禁止されます。 読み取りアクセスで利用することはできません。 これが既定の設定です。

      READ_ONLY
      このレプリカのセカンダリ データベースに対する接続は、読み取り専用でのみ許可されます。 セカンダリ データベースはすべて読み取りアクセスで利用できます。

      ALL
      読み取りアクセスに限り、このレプリカのセカンダリ データベースに対するすべての接続が許可されます。 セカンダリ データベースはすべて読み取りアクセスで利用できます。

  3. プライマリ ロールの接続アクセスを構成するには、ADD REPLICA 句または MODIFY REPLICA WITH 句で、PRIMARY_ROLE オプションを次のように指定します。

    PRIMARY_ROLE ( ALLOW_CONNECTIONS = { READ_WRITE | ALL } )

    パラメーターの説明

    READ_WRITE
    Application Intent 接続プロパティが ReadOnly に設定されている接続は許可されません。 Application Intent プロパティが ReadWrite に設定されている場合、または Application Intent 接続プロパティが設定されていない場合は、接続が許可されます。 "アプリケーションの目的" 接続プロパティの詳細については、「 Using Connection String Keywords with SQL Server Native Client」を参照してください。

    ALL
    プライマリ レプリカのデータベースに対するすべての接続が許可されます。 これが既定の設定です。

例 (Transact-SQL)

次の例では、セカンダリ レプリカを AG2という名前の可用性グループに追加します。 新しい可用性レプリカをホストするため、スタンドアロン サーバー インスタンスの COMPUTER03\HADR_INSTANCEが指定されています。 このレプリカは、プライマリ ロールに対してのみ読み取り/書き込み接続を許可し、セカンダリ ロールに対しては読み取りを目的とした接続のみを許可するように構成されています。

ALTER AVAILABILITY GROUP AG2   
   ADD REPLICA ON   
      'COMPUTER03\HADR_INSTANCE' WITH   
         (  
         ENDPOINT_URL = 'TCP://COMPUTER03:7022',  
         PRIMARY_ROLE ( ALLOW_CONNECTIONS = READ_WRITE ),  
         SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY )  
         );   
GO  

PowerShell の使用

可用性レプリカに対してアクセスを構成するには

Note

コード例については、このセクションの後半の「 例 (PowerShell)」を参照してください。

  1. プライマリ レプリカをホストするサーバー インスタンスにディレクトリを変更 (cd) します 。

  2. 可用性グループに可用性レプリカを追加する場合は、 New-SqlAvailabilityReplica コマンドレットを使用します。 既存の可用性レプリカを変更する場合は、 Set-SqlAvailabilityReplica コマンドレットを使用します。 関連するパラメーターは次のとおりです。

    • セカンダリ ロールの接続アクセスを構成するには、 ConnectionModeInSecondaryRolesecondary_role_keyword パラメーターを指定します。 secondary_role_keyword は次のいずれかの値になります。

      AllowNoConnections
      セカンダリ レプリカのデータベースに対する直接接続は許可されず、データベースに対して読み取りアクセスを実行できません。 これが既定の設定です。

      AllowReadIntentConnectionsOnly
      Application Intent プロパティが ReadOnlyに設定されている場合に限り、セカンダリ レプリカのデータベースに対する接続が許可されます。 このプロパティの詳細については、「 Using Connection String Keywords with SQL Server Native Client」を参照してください。

      AllowAllConnections
      読み取り専用アクセスに限り、セカンダリ レプリカのデータベースに対するすべての接続が許可されます。

    • プライマリ ロールの接続アクセスを構成するには、 ConnectionModeInPrimaryRoleprimary_role_keywordを指定します。 primary_role_keyword は次のいずれかの値になります。

      AllowReadWriteConnections
      Application Intent 接続プロパティが ReadOnly に設定されている接続は許可されません。 Application Intent プロパティが ReadWrite に設定されている場合、または Application Intent 接続プロパティが設定されていない場合は、接続が許可されます。 "アプリケーションの目的" 接続プロパティの詳細については、「 Using Connection String Keywords with SQL Server Native Client」を参照してください。

      AllowAllConnections
      プライマリ レプリカのデータベースに対するすべての接続が許可されます。 これが既定の設定です。

    注意

    コマンドレットの構文を表示するには、 PowerShell 環境で Get-Help SQL Server コマンドレットを使用します。 詳細については、「 Get Help SQL Server PowerShell」を参照してください。

SQL Server PowerShell プロバイダーを設定して使用するには

例 (PowerShell)

以下の例は、 ConnectionModeInSecondaryRole パラメーターと ConnectionModeInPrimaryRole パラメーターの両方を AllowAllConnectionsに設定しています。

Set-Location SQLSERVER:\SQL\PrimaryServer\default\AvailabilityGroups\MyAg  
$primaryReplica = Get-Item "AvailabilityReplicas\PrimaryServer"  
Set-SqlAvailabilityReplica -ConnectionModeInSecondaryRole "AllowAllConnections" `   
-InputObject $primaryReplica  
Set-SqlAvailabilityReplica -ConnectionModeInPrimaryRole "AllowAllConnections" `   
-InputObject $primaryReplica  
  

補足情報: 可用性レプリカに対する読み取り専用アクセスの構成後

読み取り可能なセカンダリ レプリカに対する読み取り専用アクセス

  • bcp ユーティリティ または sqlcmd ユーティリティを使用する場合、 -K ReadOnly スイッチを指定することによって、読み取り専用アクセスが有効になっている任意のセカンダリ レプリカへの読み取り専用アクセスを指定できます。

  • 読み取り可能なセカンダリ レプリカに接続するクライアント アプリケーションを有効にするには:

前提条件 Link
可用性グループにリスナーがあることを確認する。 可用性グループ リスナーの作成または構成 (SQL Server)
可用性グループの読み取り専用ルーティングを構成する。 可用性グループの読み取り専用ルーティングの構成 (SQL Server)

フェールオーバー後にトリガーとジョブに影響する可能性がある要因

読み取り可能でないセカンダリ データベースまたは読み取り可能なセカンダリ データベースで実行されたときに失敗するトリガーとジョブがある場合は、トリガーとジョブをスクリプト化して、特定のレプリカに対して、データベースがプライマリ データベースか読み取り可能なセカンダリ データベースかを確認する必要があります。 この情報を入手するには、データベースの Updateability プロパティを返す DATABASEPROPERTYEX 関数を使用します。 読み取り専用データベースを識別するには、次のように、値として READ_ONLY を指定します。

DATABASEPROPERTYEX([db name],'UpdateAbility') = N'READ_ONLY'  

読み取り/書き込みデータベースを識別するには、値として READ_WRITE を指定します。

Related Tasks

関連コンテンツ

参照

Always On 可用性グループの概要 (SQL Server)
アクティブなセカンダリ: 読み取り可能なセカンダリ レプリカ (Always On 可用性グループ)
可用性レプリカに対するクライアント接続アクセスについて (SQL Server)