共用方式為


疑難解答連結 - Azure SQL 受控實例

適用於:Azure SQL 受控實例

本文說明如何監控和疑難排解 SQL Server 與 Azure SQL 受控實例之間的 鏈接問題。

您可以使用 Transact-SQL(T-SQL)、Azure PowerShell 或 Azure CLI 來檢查連結的狀態。 如果您遇到問題,您可以使用錯誤碼來針對問題進行疑難解答。

建立連結的許多問題都可以透過 檢查兩個實例之間的網路 來解決,並驗證環境 是否已正確準備以建立連結

初期播種

在 SQL Server 與 Azure SQL 受控實例之間建立連結時,數據復寫開始前會有初始植入階段。 初始植入階段這部分是最長且最昂貴的作業。 初始種子完成後,資料同步進行,且只有後續的資料變更會被複製。 初始植入完成所需的時間取決於數據大小、主資料庫上的工作負載強度,以及主要和次要復本網路之間的連結速度。

如果兩個執行個體之間的連線速度低於必要的標準,則初始化的時間可能會受到明顯的影響。 您可以使用已陳述的植入速度、總數據大小,以及連結速度來估計初始植入階段在數據復寫開始前所花費的時間長度。 例如,對於單一 100 GB 資料庫,如果鏈接能夠每小時推送 84 GB,而且沒有其他資料庫植入到不同的連結,初始種子階段大約需要 1.2 小時的時間。 如果連結每小時只能傳送 10 GB,則植入一個 100-GB 的資料庫,大約需要 10 小時。 如果有多個資料庫可透過多個鏈接進行複寫,則會以平行方式執行植入,而且結合緩慢的連結速度時,初始植入階段可能需要相當長的時間,特別是如果來自所有資料庫的平行植入數據超過可用的連結頻寬。

初始播種階段不具備對網路中斷以及執行個體維護或容錯移轉作業的復原能力。 如果 SQL Server 與 SQL 受控執行個體之間的雙向連線暫時中斷,或者在初始植入階段期間 SQL Server 或 SQL 受控執行個體被重新啟動或發生容錯移轉,植入將會重新開始。

這很重要

初始播種階段可能需要幾天的時間,速度極低或繁忙的連線。 在此情況下,建立連結可能會逾時。建立連結會在 6 天后自動取消。

如果您遇到鏈接的問題,您可以使用 SQL Server Management Studio (SSMS)、Transact-SQL (T-SQL)、Azure PowerShell 或 Azure CLI 來取得連結目前狀態的相關信息。

使用 T-SQL 取得鏈接狀態的快速狀態詳細數據,然後使用 Azure PowerShell 或 Azure CLI 取得連結目前狀態的完整資訊。

鏈接監視是從 SQL Server Management Studio (SSMS) 21.0 開始提供(預覽版)。

若要檢查 SSMS 中的連結狀態,請遵循下列步驟:

  1. 連接到裝載連結的複本。

  2. [物件總管] 中,展開 [Always On 高可用性],然後展開 [可用性群組]

  3. 以滑鼠右鍵按一下連結的名稱,然後選取 屬性 以開啟 連結屬性 視窗:

    SSMS 中在連結上右鍵點擊的選單螢幕快照,其中屬性已被醒目提示。

  4. [ 鏈接屬性 ] 視窗會顯示連結的實用資訊,例如複本資訊、鏈接狀態和端點憑證到期日:

    SSMS 中連結屬性視窗的螢幕快照。

replicaState 值描述目前的連結。 如果狀態中也包含錯誤,則在執行狀態中列出的作業時發生了錯誤。 例如,LinkCreationError 表示建立連結時發生錯誤。

一些可能的 replicaState 值為:

  • CreatingLink:初始化播種
  • LinkSynchronizing:數據複寫正在進行中
  • LinkFailoverInProgress:故障轉移正在進行中

如需鏈接狀態屬性的完整清單,請檢閱 分散式可用性群組 - GET REST API 命令。

有兩個不同的錯誤類別您可能會遇到:一是在您嘗試初始化連結時發生的錯誤,另一是在您嘗試建立連結時發生的錯誤。

初始化連結時,可能會發生下列錯誤(鏈接狀態:LinkInitError):

  • 錯誤 41962:作業已中止,因為連結未在 5 分鐘內起始。 請檢查 網路連線,然後再試一次。
  • 錯誤 41973:無法建立連接,因為來自 SQL Server 的 端點憑證未正確匯入 Azure SQL 受控實例。
  • 錯誤 41974:無法建立連線,因為來自 SQL 受控實例的端點憑證 未正確匯入 SQL Server。
  • 錯誤 41976:可用性群組沒有回應。 檢查名稱和組態參數,然後再試一次。
  • 錯誤 41986:無法建立連結,因為連線失敗或次要複本沒有回應。 檢查名稱、組態參數和 網路連線,然後再試一次。
  • 錯誤 47521:無法建立連結,因為輔助伺服器未收到要求。 請確定主伺服器上的可用性群組和資料庫狀況良好,然後再試一次。

建立連結時可能會發生下列錯誤(連結狀態: ): LinkCreationError

  • 錯誤 41977:目標資料庫沒有回應。 請檢查鏈接參數,然後再試一次。

  • 過早的日誌截斷:如果在初始播種完成之前截斷交易日誌,您可能會看到下列其中之一錯誤:

    • 錯誤 1408:無法復原資料庫 「%.*ls」 的遠端複本,足以啟用資料庫鏡像或將其加入可用性群組。
    • 錯誤 1412:資料庫 「%.*ls」 的遠端複本尚未向前復原到資料庫記錄的本機複本內含的時間點。

    若要解決此問題,您必須 卸除 並重新建立連結。
    若要避免此問題,請在 SQL Server 上暫停事務歷史記錄備份,以在初始植入階段複寫資料庫。

強制倒換之後的狀態不一致

在強制 故障轉移之後,您可能會遇到一個分裂腦情境,兩個副本都處於主要角色,使鏈接處於不一致的狀態。 如果您在災害期間切換到次要複本,然後主要複本重新恢復運行,就會發生這種情況。

首先,請確認您是否處於腦裂狀況中。 您可以使用 SQL Server Management Studio (SSMS) 或 Transact-SQL (T-SQL) 來執行此動作。

連線到 SSMS 中的 SQL Server 和 SQL 受控實例,然後在 [物件總管]中,展開 [可用性] 群組 下的 [可用性] 群組 節點,AlwaysOn 高可用性。 如果兩個不同的複本列為 (主要),您就會處於分割腦案例中。

或者,您可以在 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.is_distributed = 1 AND ag.name = @link_name 
GO

如果這兩個實例在 Link 角色 欄列出 PRIMARY,您就會處於分裂腦狀態。

若要解決腦裂狀態,請先在原始的主要副本上進行備份。 如果原始主伺服器是 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 

過期的憑證

用於連結的憑證可能會過期。 如果憑證過期,連結就會失敗。 若要解決此問題,輪替憑證

測試網路連線能力

需要 SQL Server 與 SQL 受控實例之間的雙向網路連線,連結才能運作。 在 SQL Server 端開啟埠並在 SQL 受控實例端設定 NSG 規則之後,請使用 SQL Server Management Studio (SSMS) 或 Transact-SQL 來測試連線能力。

在 SQL Server 和 SQL 受控實例上建立暫存 SQL Agent 作業來測試網路,以檢查兩個實例之間的連線。 當您在 SSMS 中使用 網路檢查程式 時,系統會自動為您建立作業,並在測試完成之後刪除。 如果您使用 T-SQL 測試網路,則必須手動刪除 SQL Agent 作業。

注意

目前不支援在Linux上的SQL Server 上由 SQL Server Agent 執行 PowerShell 腳本,因此目前無法從 Linux 上的 SQL Server 上的 SQL Server Agent 作業執行 Test-NetConnection

若要使用 SQL Agent 測試網路連線能力,您需要下列需求:

請考慮下列事項:

  • 為避免誤報,網路路徑上的所有防火牆必須允許網際網路控制訊息協定(ICMP)流量。
  • 為避免誤報,網路路徑上的所有防火牆必須允許使用專有的 SQL Server UCS 協定進行流量。 阻擋協定可能導致連線測試成功,但連結無法建立。
  • 具備封包層級防護的進階防火牆設置,必須妥善配置,以允許 SQL Server 與 SQL 管理實例之間的流量。

若要在 SSMS 中測試 SQL Server 與 SQL 受控實例之間的網路連線,請遵循下列步驟:

  1. 連接到將在 SSMS 中作為主要副本的資料庫實例。

  2. [物件總管]中,展開資料庫,並以滑鼠右鍵點選您想要連結至副資料庫的資料庫。 選取 [工作>Azure SQL 受控實例] 連結>[測試連線],以開啟 [網络檢查程式] 精靈:

    SSMS 中物件總管的螢幕擷取畫面,並在資料庫連結滑鼠右鍵功能表中選取測試連線。

  3. 網路檢查 精靈的 [簡介] 頁面上,選取 [下一步]。

  4. 如果在 必要條件 頁面上符合所有需求,請選擇 下一步。 否則,請解決任何未符合的必要條件,然後選取 [重新執行驗證]

  5. 在 [登入] 頁面上,選取 [登入] 以連線到作為次要複本的其他實例。 選取 [下一步]

  6. 檢查 [指定網路選項 頁面的詳細數據,並視需要提供IP位址。 選取 [下一步]

  7. 在 [摘要] 頁面上,檢閱精靈執行的動作,然後選擇 [完成] 來驗證兩個複本之間的連線。

  8. 檢閱 [結果] 頁面,來確認兩個副本之間有無連線,然後選取 [關閉] 完成。

謹慎

只有在您已驗證來源與目標環境之間的網路連線能力時,才能繼續進行後續步驟。 否則,請先針對網路連線問題進行疑難解答,再繼續進行。

如需連結功能的詳細資訊,請檢閱下列資源: