執行 Always On 可用性群組的已規劃手動容錯移轉 (SQL Server)

適用於:SQL Server

本主題說明如何使用 SQL Server Management Studio、Transact-SQL 或 SQL Server 中的 PowerShell,在不遺失資料的情況下針對 Always On 可用性群組執行手動容錯移轉 (「規劃的手動容錯移轉」)。 可用性群組會在可用性複本層級容錯移轉。 如同任何 Always On 可用性群組容錯移轉,規劃的手動容錯移轉會將次要複本轉換為主要角色。 同時,容錯移轉也會將先前的主要複本轉成次要角色。

只有在主要複本和目標次要複本正在以同步認可模式執行且目前已同步時,才會支援規劃的手動容錯移轉。 規劃的手動容錯移轉會保留聯結至目標次要複本上可用性群組的次要資料庫中的所有資料。 之前的主要複本轉成次要角色之後,其資料庫會變成次要資料庫。 接著,這些資料庫會開始與新的主要資料庫同步。 在將它們全部轉換成 SYNCHRONIZED 狀態之後,新的次要複本就會變成有資格當做未來已規劃之手動容錯移轉的目標。

注意

如果次要和主要複本都設定成自動容錯移轉模式,在次要複本同步完畢之後,其也可作為自動容錯移轉的目標。 如需詳細資訊,請參閱可用性模式 (Always On 可用性群組)

開始之前

重要

若要在不使用叢集管理員的情況下容錯移轉讀取級別可用性群組,須遵循特定程序。 當可用性群組的 CLUSTER_TYPE = NONE 時,請遵循容錯移轉讀取級別可用性群組上的主要複本下的程序。

限制事項

  • 目標次要複本接受命令之後,容錯移轉命令就會傳回。 不過,在可用性群組完成容錯移轉之後,會以非同步方式復原資料庫。

  • 容錯移轉時,可能不會保留可用性群組內跨資料庫的一致性。

    注意

    跨資料庫和分散式交易的支援會因 SQL Server 和作業系統版本而不同。 如需詳細資訊,請參閱 Always On 可用性群組和資料庫鏡像的跨資料庫交易和分散式交易 (SQL Server)

必要條件和限制

  • 目標次要複本和主要複本都必須在同步認可可用性模式下執行。

  • 目標次要複本目前必須與主要複本同步。 該次要複本上的所有次要資料庫皆必須聯結至可用性群組。 其也必須與其對應的主要資料庫同步 (亦即,本機次要資料庫必須為 SYNCHRONIZED)。

    提示

    若要判斷次要複本的容錯移轉整備,請查詢 sys.dm_hadr_database_replica_cluster_states 動態管理檢視中的 is_failover_ready 資料行。 或者,您可以查看 Always On 群組儀表板的 [容錯移轉整備] 資料行。

  • 只有在目標次要複本上才支援這個工作。 您必須連接到裝載目標次要複本的伺服器執行個體。

安全性

權限

可用性群組需要 ALTER AVAILABILITY GROUP 權限。 同時也需要 CONTROL AVAILABILITY GROUP、ALTER ANY AVAILABILITY GROUP 或 CONTROL SERVER 權限。

使用 SQL Server Management Studio

若要手動容錯移轉可用性群組:

  1. 在物件總管中,連線至裝載需要容錯移轉之可用性群組次要複本的伺服器執行個體。 展開伺服器樹狀目錄。

  2. 依序展開 [Always On 高可用性] 節點和 [可用性群組] 節點。

  3. 以滑鼠右鍵按一下要容錯移轉的可用性群組,然後選取 [容錯移轉]

  4. 容錯移轉可用性群組精靈隨即啟動。 如需詳細資訊,請參閱使用容錯移轉可用性群組精靈 (SQL Server Management Studio)

使用 Transact-SQL

若要手動容錯移轉可用性群組:

  1. 連接到裝載目標次要複本的伺服器執行個體。

  2. 使用 ALTER AVAILABILITY GROUP 陳述式,如下所示:

    ALTER AVAILABILITY GROUP group_name FAILOVER

    在陳述式中,group_name 是可用性群組的名稱。

    下列範例會將 MyAg 可用性群組手動容錯移轉到連線的次要複本:

    ALTER AVAILABILITY GROUP MyAg FAILOVER;  
    

使用 PowerShell

若要手動容錯移轉可用性群組:

  1. 將目錄 (cd) 變更為裝載目標次要複本的伺服器執行個體。

  2. 使用 Switch-SqlAvailabilityGroup Cmdlet。

    注意

    若要檢視 Cmdlet 的語法,請在 SQL Server PowerShell 環境中使用 Get-Help Cmdlet。 如需詳細資訊,請參閱取得 SQL Server PowerShell 的說明

    下列範例會將 MyAg 可用性群組手動容錯移轉到位於指定路徑的次要複本。

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

    若要設定和使用 SQL Server PowerShell 提供者:

後續操作:手動容錯移轉可用性群組之後

如果您在可用性群組的自動容錯移轉組外部容錯移轉,請調整 Windows Server 容錯移轉叢集節點的仲裁投票,以反映新的可用性群組組態。 如需詳細資訊,請參閱 SQL Server 的 Windows Server 容錯移轉叢集 (WSFC)

容錯移轉讀取級別可用性群組上的主要複本

每個可用性群組只有一個主要複本。 主要複本允許讀取和寫入。 若要變更作為主要的複本,您可以進行容錯移轉。 在一般可用性群組中,叢集管理員會自動化容錯移轉程序。 在叢集類型為 NONE 的可用性群組中,容錯移轉程序是手動的。

叢集類型為 NONE 的可用性群組中,有兩種方式可進行主要複本容錯移轉:

  • 手動容錯移轉 (不會遺失資料)
  • 強制手動容錯移轉 (可能遺失資料)

手動容錯移轉 (不會遺失資料)

當主要複本可以使用,但您需要暫時或永久變更裝載主要複本的執行個體時,請使用這個方法。 若要避免遺失資料的可能性,發出手動容錯移轉之前,請確定目標次要複本是最新狀態。

若要手動容錯移轉 (不會遺失資料):

  1. 請製作目前的主要複本與目標次要複本 SYNCHRONOUS_COMMIT

    ALTER AVAILABILITY GROUP [AGRScale] 
         MODIFY REPLICA ON N'<node2>' 
         WITH (AVAILABILITY_MODE = SYNCHRONOUS_COMMIT);
    
  2. 若要識別使用中交易已認可至主要複本及至少一個同步次要複本,請執行下列查詢:

    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 時,即會同步處理次要複本。

  3. REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT 更新為 1。

    下列指令碼會將名為 ag1 的可用性群組上的 REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT 設為 1。 執行下列指令碼之前,以您的可用性群組名稱取代 ag1

    ALTER AVAILABILITY GROUP [AGRScale] 
         SET (REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT = 1);
    

    這項設定可確保所有使用中交易都已認可至主要複本及至少一個同步次要複本。

    注意

    這項設定非容錯移轉所特定,且應該根據環境的需求進行設定。

  4. 以離線方式設定未參與容錯移轉的主要複本和次要複本,以準備進行角色變更:

    ALTER AVAILABILITY GROUP [AGRScale] OFFLINE
    
  5. 將目標次要複本升階為主要。

    ALTER AVAILABILITY GROUP AGRScale FORCE_FAILOVER_ALLOW_DATA_LOSS; 
    
  6. 將舊的主要複本和其他次要複本的角色更新為 SECONDARY,並在裝載舊主要複本的 SQL Server 執行個體上執行下列命令:

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

    注意

    若要刪除可用性群組,請使用 DROP AVAILABILITY GROUP。 針對以叢集類型 NONE 或 EXTERNAL 建立的可用性群組,請在屬於可用性群組的所有複本上執行此命令。

  7. 繼續進行資料移動,在裝載主要複本的 SQL Server 執行個體上,針對可用性群組中的每個資料庫執行下列命令:

    ALTER DATABASE [db1]
         SET HADR RESUME
    
  8. 重新建立為讀取縮放目的而建立的任何接聽程式,且不由叢集管理員所管理。 如果原始接聽程式指向舊的主要複本,請將其捨棄,然後重新建立接聽程式以指向新的主要複本。

強制手動容錯移轉 (可能遺失資料)

如果主要複本無法使用且無法立即復原,則您必須在會遺失資料的情況下強制容錯移轉至次要複本。 不過,如果原始的主要複本在容錯移轉後復原,其便會擔任主要角色。 若要避免讓每個複本處於不同的狀態,請在會遺失資料的情況下進行強制容錯移轉之後,從可用性群組移除原始的主要複本。 一旦原始主要複本重新上線,請從其中完全移除可用性群組。

若要在會遺失資料的情況下從主要複本 N1 強制手動容錯移轉至次要複本 N2,請遵循下列步驟:

  1. 在次要複本 (N2) 上,起始強制容錯移轉:

    ALTER AVAILABILITY GROUP [AGRScale] FORCE_FAILOVER_ALLOW_DATA_LOSS;
    
  2. 在新的主要複本 (N2) 上,移除原始的主要複本 (N1):

    ALTER AVAILABILITY GROUP [AGRScale]
    REMOVE REPLICA ON N'N1';
    
  3. 驗證所有應用程式流量都指向接聽程式和/或新的主要複本。

  4. 如果原始的主要複本 (N1) 上線,請立即讓原始主要複本 (N1) 上的 AGRScale 可用性群組離線:

    ALTER AVAILABILITY GROUP [AGRScale] OFFLINE
    
  5. 如果有資料或未同步的變更,請透過備份或其他符合您業務需求的資料複寫選項來保留此資料。

  6. 接下來,從原始的主要複本 (N1) 移除該可用性群組:

    DROP AVAILABILITY GROUP [AGRScale];
    
  7. 在原始主要複本 (N1) 上卸載可用性群組資料庫:

    USE [master]
    GO
    DROP DATABASE [AGDBRScale]
    GO
    
  8. (選擇性) 如有需要,您現在可以將 N1 以新次要複本的形式加回 AGRScale 可用性群組。

另請參閱