Always On 可用性グループの計画的な手動フェールオーバーの実行 (SQL Server)Perform a planned manual failover of an Always On availability group (SQL Server)

適用対象: ○SQL Server XAzure SQL Database XAzure SQL Data Warehouse XParallel Data WarehouseAPPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

このトピックでは、SQL Server 2017SQL Server 2017SQL Server Management StudioSQL Server Management StudioTransact-SQLTransact-SQL、または PowerShell を使用して、AlwaysOn 可用性グループ上でデータを失わずに手動フェールオーバー (計画的な手動フェールオーバー) を実行する方法について説明します。This topic describes how to perform a manual failover without data loss (a planned manual failover) on an AlwaysOn availability group by using SQL Server Management StudioSQL Server Management Studio, Transact-SQLTransact-SQL, or PowerShell in SQL Server 2017SQL Server 2017. 可用性グループは、可用性レプリカのレベルでフェールオーバーします。An availability group fails over at the level of an availability replica. AlwaysOn 可用性グループのフェールオーバーのように、計画的な手動フェールオーバーではセカンダリ レプリカがプライマリ ロールに移行します。A planned manual failover, like any AlwaysOn availability group failover, transitions a secondary replica to primary role. 同時に、フェールオーバーによって元のプライマリ レプリカがセカンダリ ロールに移行します。Concurrently, the failover transitions the former primary replica to the secondary role.

計画的な手動フェールオーバーは、プライマリ レプリカおよびターゲット セカンダリ レプリカが同期コミット モードで動作していて、現在同期されている場合にのみサポートされます。A planned manual failover is supported only when the primary replica and the target secondary replica are running in synchronous-commit mode and are currently synchronized. 計画的な手動フェールオーバーでは、ターゲット セカンダリ レプリカの可用性グループに参加しているセカンダリ データベース内のすべてのデータが維持されます。A planned manual failover preserves all the data in the secondary databases that are joined to the availability group on the target secondary replica. プライマリ レプリカがセカンダリ ロールに移行すると、そのデータベースがセカンダリ データベースになります。After the former primary replica transitions to the secondary role, its databases become secondary databases. 次に、新しいプライマリ データベースとの同期が開始されます。Then they begin to synchronize with the new primary databases. すべてが SYNCHRONIZED 状態に移行した後は、新しいセカンダリ レプリカが、将来の計画的な手動フェールオーバーのターゲットとして機能できるようになります。After they all transition into the SYNCHRONIZED state, the new secondary replica becomes eligible to serve as the target of a future planned manual failover.

注意

セカンダリ レプリカとプライマリ レプリカの両方に対して自動フェールオーバー モードを構成し、セカンダリ レプリカを同期すると、自動フェールオーバーのターゲットとしても機能できるようになります。If the secondary and primary replicas are both configured for automatic failover mode, after the secondary replica is synchronized, it also can serve as the target for an automatic failover. 詳細については、「可用性モード (AlwaysOn 可用性グループ)」を参照してください。For more information, see Availability modes (AlwaysOn availability groups).

はじめる前にBefore you begin

重要

クラスター マネージャーを使わないで読み取りスケール可用性グループをフェールオーバーするには、固有の手順があります。There are specific procedures to fail over a read-scale availability group with no cluster manager. 可用性グループで CLUSTER_TYPE = NONE が設定されている場合は、「読み取りスケール可用性グループのプライマリ レプリカをフェールオーバーする」の手順に従ってください。When an availability group has CLUSTER_TYPE = NONE, follow the procedures under Fail over the primary replica on a read-scale availability group.

制限事項と制約事項Limitations and restrictions

前提条件と制限Prerequisites and restrictions

  • ターゲットのセカンダリ レプリカとプライマリ レプリカは、両方とも同期コミット可用性モードで実行されている必要があります。Both the target secondary replica and the primary replica must be running in synchronous-commit availability mode.

  • 現在、ターゲットのセカンダリ レプリカはプライマリ レプリカと同期されている必要があります。Currently, the target secondary replica must be synchronized with the primary replica. このセカンダリ レプリカのすべてのセカンダリ データベースが可用性グループに参加している必要があります。All the secondary databases on this secondary replica must be joined to the availability group. これらは対応するプライマリ データベースとも同期されている必要があります (つまり、ローカルのセカンダリ データベースが同期されている必要があります)。They also must be synchronized with their corresponding primary databases (that is, the local secondary databases must be SYNCHRONIZED).

    ヒント

    セカンダリ レプリカのフェールオーバーの準備状態を調べるには、sys.dm_hadr_database_cluster_states 動的管理ビューで is_failover_ready 列をクエリします。To determine the failover readiness of a secondary replica, query the is_failover_ready column in the sys.dm_hadr_database_cluster_states dynamic management view. または、AlwaysOn グループ ダッシュボード[フェールオーバーの準備] 列を確認します。Or you can look at the Failover Readiness column of the AlwaysOn group dashboard.

  • このタスクは、ターゲット セカンダリ レプリカ上でのみサポートされます。This task is supported only on the target secondary replica. ターゲット セカンダリ レプリカをホストするサーバー インスタンスに接続されている必要があります。You must be connected to the server instance that hosts the target secondary replica.

セキュリティSecurity

PermissionsPermissions

可用性グループに ALTER AVAILABILITY GROUP のアクセス許可が必要です。The ALTER AVAILABILITY GROUP permission is required on the availability group. CONTROL AVAILABILITY GROUP アクセス許可、ALTER ANY AVAILABILITY GROUP アクセス許可、または CONTROL SERVER アクセス許可も必要です。The CONTROL AVAILABILITY GROUP permission, the ALTER ANY AVAILABILITY GROUP permission, or the CONTROL SERVER permission also is required.

SQL Server Management Studio の使用Use SQL Server Management Studio

可用性グループで手動フェールオーバーを行うには:To manually fail over an availability group:

  1. オブジェクト エクスプローラーで、フェールオーバーを行う必要がある可用性グループのセカンダリ レプリカをホストするサーバー インスタンスに接続します。In Object Explorer, connect to a server instance that hosts a secondary replica of the availability group that needs to be failed over. サーバー ツリーを展開します。Expand the server tree.

  2. [AlwaysOn 高可用性] ノードと [可用性グループ] ノードを展開します。Expand the AlwaysOn High Availability node and the Availability Groups node.

  3. フェールオーバーする [可用性グループ] ノードを右クリックし、 [フェールオーバー] を選択します。Right-click the availability group to be failed over, and select Failover.

  4. 可用性グループのフェールオーバー ウィザードが開始されます。The Failover Availability Group wizard starts. 詳細については、「可用性グループのフェールオーバー ウィザードの使用 (SQL Server Management Studio)」を参照してください。For more information, see Use the Failover Availability Group wizard (SQL Server Management Studio).

Transact-SQL を使用するUse Transact-SQL

可用性グループで手動フェールオーバーを行うには:To manually fail over an availability group:

  1. ターゲット セカンダリ レプリカをホストするサーバー インスタンスに接続します。Connect to the server instance that hosts the target secondary replica.

  2. ALTER AVAILABILITY GROUP ステートメントを使用します。次にその例を示します。Use the ALTER AVAILABILITY GROUP statement, as follows:

    ALTER AVAILABILITY GROUP group_name FAILOVERALTER AVAILABILITY GROUP group_name FAILOVER

    ステートメントの group_name は可用性グループの名前です。In the statement, group_name is the name of the availability group.

    次の例では、接続されているセカンダリ レプリカに MyAg 可用性グループを手動でフェールオーバーします。The following example manually fails over the MyAg availability group to the connected secondary replica:

    ALTER AVAILABILITY GROUP MyAg FAILOVER;  
    

PowerShell を使用するUse PowerShell

可用性グループで手動フェールオーバーを行うには:To manually fail over an availability group:

  1. ディレクトリ変更コマンド (cd) を使用して、ターゲット セカンダリ レプリカをホストするサーバー インスタンスに移動します。Change the directory (cd) to the server instance that hosts the target secondary replica.

  2. Switch-SqlAvailabilityGroup コマンドレットを使用します。Use the Switch-SqlAvailabilityGroup cmdlet.

    注意

    コマンドレットの構文を表示するには、 PowerShell 環境で Get-Help SQL Server 2017SQL Server 2017 コマンドレットを使用します。To view the syntax of a cmdlet, use the Get-Help cmdlet in the SQL Server 2017SQL Server 2017 PowerShell environment. 詳細については、「SQL Server PowerShell のヘルプの参照」を参照してください。For more information, see Get help for SQL Server PowerShell.

    次の例では、指定したパスのセカンダリ レプリカに MyAg 可用性グループを手動でフェールオーバーします。The following example manually fails over the MyAg availability group to the secondary replica with the specified path:

    Switch-SqlAvailabilityGroup -Path SQLSERVER:\Sql\SecondaryServer\InstanceName\AvailabilityGroups\MyAg  
    

    SQL Server PowerShell プロバイダーを設定して使用するには:To set up and use the SQL Server PowerShell provider:

補足情報:可用性グループの手動フェールオーバーを実行した後Follow up: After you manually fail over an availability group

可用性グループの 自動フェールオーバー セットautomatic failover set の外側でフェールオーバーした場合、Windows Server フェールオーバー クラスタリング ノードのクォーラム投票を調整して新しい可用性グループの構成を反映します。If you failed over outside the 自動フェールオーバー セットautomatic failover set of the availability group, adjust the quorum votes of the Windows Server failover clustering nodes to reflect your new availability group configuration. 詳細については、「Windows Server フェールオーバー クラスタリング (WSFC) と SQL Server」を参照してください。For more information, see Windows Server failover clustering (WSFC) with SQL Server.

読み取りスケール可用性グループのプライマリ レプリカをフェールオーバーするFail over the primary replica on a read-scale availability group

各可用性グループにはプライマリ レプリカが 1 つだけあります。Each availability group has only one primary replica. プライマリ レプリカは読み書きができます。The primary replica allows reads and writes. プライマリになっているレプリカの変更は、フェールオーバーで行うことができます。To change which replica is primary, you can fail over. 高可用性の可用性グループでは、クラスター マネージャーによってフェールオーバー プロセスが自動化されます。In an availability group for high availability, the cluster manager automates the failover process. クラスターの種類が NONE の可用性グループでは、フェールオーバー プロセスは手動です。In an availability group with cluster type NONE, the failover process is manual.

クラスターの種類が NONE の可用性グループでプライマリ レプリカをフェールオーバーするには、2 つの方法があります。There are two ways to fail over the primary replica in an availability group with cluster type NONE:

  • データ損失のある強制的な手動フェールオーバーForced manual failover with data loss
  • データ損失のない手動フェールオーバーManual failover without data loss

データ損失のある強制的な手動フェールオーバーForced manual failover with data loss

プライマリ レプリカを使うことができず、復旧できない場合は、この方法を使います。Use this method when the primary replica isn't available and can't be recovered.

データ損失のあるフェールオーバーを強制的に行うには、ターゲット セカンダリ レプリカをホストしている SQL Server インスタンスに接続して、次のコマンドを実行します。To force failover with data loss, connect to the SQL Server instance that hosts the target secondary replica and then run the following command:

ALTER AVAILABILITY GROUP [ag1] FORCE_FAILOVER_ALLOW_DATA_LOSS;

以前のプライマリ レプリカが復旧するときは、プライマリ ロールも想定されます。When the previous primary replica recovers, it will also assume the primary role. 確実に以前のプライマリ レプリカをセカンダリ ロールに移行するには、以前のプライマリ レプリカで次のコマンドを実行します。To ensure that the previous primary replica transitions into a secondary role run the following command on the previous primary replica.

ALTER AVAILABILITY GROUP [ag1]  SET (ROLE = SECONDARY);

データ損失のない手動フェールオーバーManual failover without data loss

プライマリ レプリカを使うことができても、一時的または完全に構成を変更し、プライマリ レプリカをホストする SQL Server インスタンスを変更する必要がある場合は、この方法を使います。Use this method when the primary replica is available, but you need to temporarily or permanently change the configuration and change the SQL Server instance that hosts the primary replica. データ損失の可能性を排除するため、手動フェールオーバーを実行する前にターゲット セカンダリ レプリカが最新の状態であることを確認します。To avoid potential data loss, before you issue the manual failover, ensure that the target secondary replica is up to date.

データ損失のない手動フェールオーバーを行うには:To manually fail over without data loss:

  1. ターゲット セカンダリ レプリカを SYNCHRONOUS_COMMIT にします。Make the target secondary replica SYNCHRONOUS_COMMIT.

    ALTER AVAILABILITY GROUP [ag1] 
         MODIFY REPLICA ON N'<node2>' 
         WITH (AVAILABILITY_MODE = SYNCHRONOUS_COMMIT);
    
  2. アクティブなトランザクションが、プライマリ レプリカと少なくとも 1 つの同期セカンダリ レプリカにコミットされていることを確認するために、次のクエリを実行します。To identify that active transactions are committed to the primary replica and at least one synchronous secondary replica, run the following query:

    SELECT ag.name, 
       drs.database_id, 
       drs.group_id, 
       drs.replica_id, 
       drs.synchronization_state_desc, 
       ag.sequence_number
    FROM sys.dm_hadr_database_replica_states drs, sys.availability_groups ag
    WHERE drs.group_id = ag.group_id; 
    

    synchronization_state_descSYNCHRONIZED の場合、セカンダリ レプリカは同期されています。The secondary replica is synchronized when synchronization_state_desc is SYNCHRONIZED.

  3. REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT を 1 に更新します。Update REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT to 1.

    次の例のスクリプトは、ag1 という名前の可用性グループで REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT を 1 に設定します。The following script sets REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT to 1 on an availability group named ag1. 次のスクリプトを実行する前に、ag1 を実際の可用性グループの名前に置き換えます。Before you run the following script, replace ag1 with the name of your availability group:

    ALTER AVAILABILITY GROUP [ag1] 
         SET REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT = 1;
    

    この設定により、すべてのアクティブなトランザクションが、プライマリ レプリカと少なくとも 1 つの同期セカンダリ レプリカにコミットされます。This setting ensures that every active transaction is committed to the primary replica and at least one synchronous secondary replica.

  4. プライマリ レプリカをセカンダリ レプリカに降格させます。Demote the primary replica to a secondary replica. 降格された後のプライマリ レプリカは読み取り専用になります。After the primary replica is demoted, it's read-only. ロールを SECONDARY に更新するには、プライマリ レプリカをホストしている SQL Server インスタンスで次のコマンドを実行します。To update the role to SECONDARY, run the following command on the SQL Server instance that hosts the primary replica:

    ALTER AVAILABILITY GROUP [ag1] 
         SET (ROLE = SECONDARY); 
    
  5. ターゲット セカンダリ レプリカをプライマリに昇格させます。Promote the target secondary replica to primary.

    ALTER AVAILABILITY GROUP ag1 FORCE_FAILOVER_ALLOW_DATA_LOSS; 
    

    注意

    可用性グループを削除するには、DROP AVAILABILITY GROUP を使います。To delete an availability group, use DROP AVAILABILITY GROUP. 種類が NONE または EXTERNAL のクラスターを使って作成された可用性グループでは、可用性グループに含まれるすべてのレプリカでコマンドを実行する必要があります。For an availability group that's created with cluster type NONE or EXTERNAL, execute the command on all replicas that are part of the availability group.

参照See also