容錯移轉連結 - Azure SQL 受控執行個體
本文說明如何使用 SQL Server Management Studio (SSMS) 或 PowerShell 針對 SQL Server 與 Azure SQL 受控執行個體之間連結的資料庫進行容錯移轉,以便進行災害復原或移轉。
必要條件
若要透過連結將您的資料庫容錯移轉至次要複本,必須符合下列必要條件:
- 有效的 Azure 訂用帳戶。 如果您沒有訂用帳戶,請建立免費帳戶。
- 已安裝支援的 SQL Server 版本與必要的服務更新。
- 在主要和次要複本之間設定的連結。
- 您可以從 SQL Server 2022 CU13 (KB5036432) 開始,使用 Transact-SQL 故障轉移連結。
停止工作負載
如果您已準備好將資料庫容錯移轉至次要複本,請先在維護期間停止主要複本的任何應用程式工作負載。 這可讓資料庫複寫趕上次要複寫,以便您可容錯移轉至次要複本,而不會遺失資料。 在容錯移轉之前,請確定您的應用程式不會認可異動至主要複本。
容錯移轉資料庫
您可以使用 Transact-SQL (T-SQL)、SQL Server Management Studio 或 PowerShell,來容錯移轉連結的資料庫。
您可以從 SQL Server 2022 CU13 (KB5036432) 開始,使用 Transact-SQL 故障轉移連結。
若要對連結執行計劃性容錯移轉,請在主要複本上使用下列 T-SQL 命令:
ALTER AVAILABILITY GROUP [<DAGname>] FAILOVER
若要執行強制容錯移轉,請在次要複本上使用下列 T-SQL 命令:
ALTER AVAILABILITY GROUP [<DAGname>] FORCE_FAILOVER_ALLOW_DATA_LOSS
在容錯移轉之後檢視資料庫
針對 SQL Server 2022,如果您選擇維護連結,您可以檢查分散式可用性群組是否存在於 SQL Server Management Studio 物件總管的可用性群組。
如果您在容錯移轉期間卸除連結,您可使用 [物件總管] 來確認分散式可用性群組已不存在。 如果您選擇保留可用性群組,資料庫仍會進行同步處理。
容錯移轉後清除
除非選取容錯移轉成功之後移除連結,否則使用 SQL Server 2022 進行容錯移轉不會中斷連結。 您可以在容錯移轉之後維護連結,這會讓可用性群組與分散式可用性群組處於作用中狀態。 無須進行任何進一步的動作。
卸除連結只會卸除分散式可用性群組,可用性群組則保持作用中狀態。 您可以決定保留可用性群組,或將其卸除。
如果您決定卸除可用性群組,請取代下列值,然後執行範例 T-SQL 程式碼:
<AGName>
使用 SQL Server 上的可用性群組 (用來建立連結的群組) 的名稱。
-- Run on SQL Server
USE MASTER
GO
DROP AVAILABILITY GROUP <AGName>
GO
在強制容錯移轉之後狀態不一致
在強制故障轉移之後,您可能會遇到核心分裂案例中的兩個複本都具有主要角色,致使連結處於不一致狀態。 如果您在災害期間容錯移轉至次要複本,然後重新上線主要複本,就會發生這種情況。
首先,請確認您處於核心分裂案例中。 您可以使用 SQL Server Management Studio (SSMS) 或 Transact-SQL (T-SQL) 執行此動作。
連線到 SSMS 中的 SQL Server 和 SQL 受控執行個體,然後在 [物件總管] 中,展開 [Always On 高可用性] 中 [可用性群組] 節點下的 [可用性複本]。 如果兩個不同的複本皆列為 (主要),您就會處於核心分裂案例中。
或者,您可以在 SQL Server 和 SQL 受控執行個體兩者上執行下列 T-SQL 腳本,以檢查複本角色:
-- Execute on SQL Server and SQL Managed Instance
USE master
DECLARE @link_name varchar(max) = '<DAGName>'
SELECT
ag.name [Link name],
rs.role_desc [Link role]
FROM
sys.availability_groups ag
join sys.dm_hadr_availability_replica_states rs
on ag.group_id = rs.group_id
WHERE
rs.is_local = 1 and ag.name = @link_name
GO
如果這兩個執行個體在 [連結角色] 資料行中列出不同的主要,您就會處於核心分裂案例中。
若要解決核心分裂狀態,請先在任意複本上備份原始的主要複本。 如果原始主要復本是 SQL Server,請進行結尾記錄備份。 如果原始主要復本是 SQL 受控執行個體,請進行完整備份拷貝複本。 備份完成之後,請將分散式可用性群組設定為複本的次要角色,這些複本曾是原始主要複本,但現在是新次要複本。
例如,在發生真正的災害事件時,假設您已強制將 SQL Server 工作負載故障轉移至 Azure SQL 受控執行個體,而且您想繼續在 SQL 受控執行個體 上執行工作負載、在 SQL Server 上進行尾日誌備份,然後將分散式可用性群組設定為 SQL Server 上的次要角色,類似以下範例:
--Execute on SQL Server
USE MASTER
ALTER availability group [<DAGName>]
SET (role = secondary)
GO
接下來,使用連結執行從 SQL 受控執行個體 到 SQL Server 的規劃的手動容錯移轉,類似以下範例:
--Execute on SQL Managed Instance
USE MASTER
ALTER availability group [<DAGName>] FAILOVER
GO
相關內容
若要使用連結:
- 讓環境為受控執行個體連結做好準備
- 使用 SSMS 設定 SQL Server 與 SQL 受控執行個體之間的連結
- 使用指令碼設定 SQL Server 與 SQL 受控執行個體之間的連結
- 使用連結移轉
- 維護連結的最佳做法
若要深入了解連結:
針對其他複寫和移轉案例,請考慮: