適用於: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)。
必要條件和限制
目標次要複本和主要複本都必須在同步提交可用性模式下運行。
目標次要複本目前必須與主要複本同步。 該次要複本上的所有次要資料庫皆必須聯結至可用性群組。 它們也必須與其對應的主要資料庫同步,換句話說,本地次要資料庫必須是同步狀態。
提示
若要判斷次要複本是否準備好進行容錯移轉,請查詢 is_failover_ready 資料行中的 sys.dm_hadr_database_replica_cluster_states 動態管理檢視。 或者,您可以查看 Always On 群組儀表板中的 容錯移轉整備欄。
只有在目標次要複本上才支援這個工作。 您必須連接到裝載目標次要複本的伺服器執行個體。
安全性
權限
可用性群組需要 ALTER AVAILABILITY GROUP 權限。 同時也需要 CONTROL AVAILABILITY GROUP、ALTER ANY AVAILABILITY GROUP 或 CONTROL SERVER 權限。
使用 SQL Server Management Studio
若要手動容錯移轉可用性群組:
在物件總管中,連線至裝載需要容錯移轉之可用性群組次要複本的伺服器執行個體。 展開伺服器樹狀目錄。
依序展開 Always On 高可用性 節點和 可用性群組 節點。
以滑鼠右鍵按一下要容錯移轉的可用性群組,然後選取 [容錯移轉]。
容錯移轉可用性群組精靈隨即啟動。 如需詳細資訊,請參閱在 SQL Server Management Studio 中使用「容錯移轉可用性群組精靈」。
使用 Transact-SQL
若要手動容錯移轉可用性群組:
連接到裝載目標次要複本的伺服器執行個體。
使用 ALTER AVAILABILITY GROUP 語句,如下所示:
命令:ALTER AVAILABILITY GROUP group_name FAILOVER (僅適用於命令)
在陳述式中,group_name 是可用性群組的名稱。
下列範例會將 MyAg 可用性群組手動容錯移轉到連線的次要複本:
ALTER AVAILABILITY GROUP MyAg FAILOVER;
使用 PowerShell
若要手動容錯移轉可用性群組:
將目錄 (cd) 變更為承載目標次要副本的伺服器實例。
使用 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 的可用性群組中,有兩種方式可進行主要複本容錯移轉:
- 手動故障轉移,不會導致資料遺失
- 強制手動故障切換 (包含資料遺失)
手動容錯移轉 (不會遺失資料)
當主要複本可以使用,但您需要暫時或永久變更裝載主要複本的執行個體時,請使用這個方法。 為了避免可能的資料遺失,在發出手動容錯移轉之前,請確定目標次要複本是最新狀態。
若要手動進行容錯移轉而不會遺失資料:
請製作目前的主要複本與目標次要複本
SYNCHRONOUS_COMMIT。ALTER AVAILABILITY GROUP [AGRScale] MODIFY REPLICA ON N'<node2>' WITH (AVAILABILITY_MODE = SYNCHRONOUS_COMMIT);若要識別運行中的交易已認可至主要複本及至少一個同步次要複本,請執行下列查詢:
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_desc為SYNCHRONIZED時,即會同步處理次要複本。將
REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT更新為 1。下列指令碼會將名為
REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT的可用性群組上的ag1設為 1。 執行下列指令碼之前,以您的可用性群組名稱取代ag1:ALTER AVAILABILITY GROUP [AGRScale] SET (REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT = 1);這項設定可確保所有使用中交易都已認可至主要複本及至少一個同步次要複本。
注意
這項設定並非專門為容錯移轉所設,它應該根據環境的需求進行調整。
將不參與故障轉移的主複本與次要複本設定為離線,以準備角色變更:
ALTER AVAILABILITY GROUP [AGRScale] OFFLINE將目標的次要複本升級為主要複本。
ALTER AVAILABILITY GROUP AGRScale FORCE_FAILOVER_ALLOW_DATA_LOSS;將舊的主要複本和其他次要複本的角色更新為
SECONDARY,並在裝載舊主要複本的 SQL Server 執行個體上執行下列命令:ALTER AVAILABILITY GROUP [AGRScale] SET (ROLE = SECONDARY);注意
若要刪除可用性群組,請使用 DROP AVAILABILITY GROUP。 針對以叢集類型 NONE 或 EXTERNAL 建立的可用性群組,請在屬於可用性群組的所有複本上執行此命令。
繼續進行資料移動,在裝載主要複本的 SQL Server 執行個體上,針對可用性群組中的每個資料庫執行下列命令:
ALTER DATABASE [db1] SET HADR RESUME重新建立您為讀取擴展目的而建立,但不由叢集管理員管理的任何監聽程式。 如果原始聆聽器指向舊的主要伺服器,請將其捨棄,然後重新建立以指向新的主要伺服器。
強制手動系統切換,資料遺失
如果主要複本無法使用且無法立即復原,則您必須強制將操作移轉至次要複本,即使這會導致資料遺失。 不過,如果原始的主要複本在容錯移轉後復原,其便會擔任主要角色。 若要避免讓每個複本處於不同的狀態,請在執行可能造成資料遺失的強制故障轉移後,從可用性群組中移除原始的主要伺服器。 原始主伺服器一旦重新上線,請完全從中移除可用性群組。
若要在會遺失資料的情況下從主要複本 N1 強制手動容錯移轉至次要複本 N2,請遵循下列步驟:
在次要副本 (N2) 上,啟動強制故障切換:
ALTER AVAILABILITY GROUP [AGRScale] FORCE_FAILOVER_ALLOW_DATA_LOSS;在新的主副本 (N2) 上,移除原始的主副本 (N1):
ALTER AVAILABILITY GROUP [AGRScale] REMOVE REPLICA ON N'N1';驗證所有應用程式流量都指向監聽器和/或新的主要複本。
如果原始的主要伺服器 (N1) 上線,請立即將原始主要伺服器 (N1) 上的 AGRScale 可用性群組從線上設置為離線:
ALTER AVAILABILITY GROUP [AGRScale] OFFLINE如果有資料或未同步的變更,請透過備份或其他符合您業務需求的資料複寫選項來保留此資料。
接下來,從原始的主伺服器 (N1) 移除可用性群組:
DROP AVAILABILITY GROUP [AGRScale];刪除原始主要複本 (N1) 上的可用性群組資料庫:
USE [master] GO DROP DATABASE [AGDBRScale] GO(選擇性) 如有需要,您現在可以將 N1 以新次要複本的形式加回 AGRScale 可用性群組。