共用方式為


對 SQL Server Always On 問題進行疑難排解

本文可協助您解決 SQL Server 上 Always On 設定的常見問題。

注意

如需本文的引導式逐步解說體驗,請參閱 針對 SQL Server Always On 問題進行疑難解答。

原始產品版本: SQL Server 2012 Enterprise、SQL Server 2014 Enterprise、SQL Server 2016 Enterprise
原始 KB 編號: 10179

重要注意

我需要設定和設定 AlwaysOn 可用性群組的指標

如果您要尋找有關設定 AlwaysOn 設定的檔案,請參閱下列檔:

開始使用 AlwaysOn 可用性群組 (SQL Server) - 檔提供關於可用性群組和設定之許多問題的解答。 遵循本文中的所有步驟,並檢閱 AlwaysOn 可用性群組的必要條件、限制和建議(SQL Server) 將有助於防止許多您可能在環境中設定和維護可用性群組的問題。

其他資源

如果這項資訊沒有説明,請參閱 AlwaysOn 可用性群組的詳細資訊。

我在設定 AlwaysOn 可用性群組時遇到問題

一般設定問題包括 AlwaysOn 可用性群組已停用、帳戶設定不正確、資料庫鏡像端點不存在、無法存取端點(SQL Server 錯誤 1418)、網路存取不存在,且聯結資料庫命令失敗(SQL Server 錯誤 35250)。 請檢閱下列檔,以取得疑難解答這些問題的說明:

疑難排解 AlwaysOn 可用性群組組態 (SQL Server)

其他連結: 修正:嘗試建立多個可用性群組時發生錯誤 41009

如果問題仍然存在,請參閱 AlwaysOn 可用性群組的詳細資訊。

我在接聽程式設定時遇到問題 (19471、 19476 和其他錯誤)

客戶遇到的其中一個最常見的設定問題是可用性群組接聽程式建立。 這些錯誤與下列類似:

  • Msg 19471,層級 16,狀態 0,第 2 行 WSFC 叢集無法讓網路名稱資源與 DNS 名稱 '' 上線。 DNS 名稱可能已取得或與現有名稱服務發生衝突,或 WSFC 叢集服務可能無法執行或無法存取。 使用不同的 DNS 名稱來解決名稱衝突,或檢查 WSFC 叢集記錄檔以取得詳細資訊。

  • 訊息 19476,層級 16,狀態 4,第 2 行嘗試建立接聽程式的網路名稱和 IP 位址失敗。 WSFC 服務可能無法執行或無法存取其目前狀態,或為網路名稱和IP位址提供的值可能不正確。 檢查 WSFC 叢集的狀態,並使用網路管理員驗證網路名稱和 IP 位址。

大部分時間,導致先前訊息的接聽程式建立失敗是因為 Active Directory 中叢集名稱物件 (CNO) 的許可權不足,無法建立和讀取接聽程式計算機物件。 若要針對此問題進行疑難解答,請檢閱下列文章:

如果問題仍然存在,請參閱 AlwaysOn 可用性群組的詳細資訊。

自動故障轉移無法如預期般運作

如果您注意到在測試或生產環境中未如預期般運作自動故障轉移,請參閱: 針對 SQL Server 2012 Always On 環境中的自動故障轉移問題進行疑難解答。

指定期間的最大失敗設定不正確,是主要伺服器未自動故障轉移至次要的主要原因之一。 此設定的預設值為 N-1,其中 N 是複本數目。 如需詳細資訊,請參閱 故障轉移叢集(群組)最大失敗限制

如果問題仍然存在,請參閱 AlwaysOn 可用性群組的詳細資訊。

我在連線到 AlwaysOn 可用性群組時遇到問題

在 SQL Server 2012 中設定 Always On 可用性群組的可用性群組接聽程式之後,您可能無法偵測接聽程式,或從應用程式連線到該接聽程式。 您可能會收到類似下列的錯誤:

Sqlcmd:錯誤:Microsoft SQL Native Client:登入逾時已過期。

若要針對此錯誤和類似的錯誤進行疑難解答,請檢閱下列各項:

詳細資訊連結:

如果問題仍然存在,請參閱 AlwaysOn 可用性群組的詳細資訊。

我在 Azure VM 中設定 AlwaysOn 可用性群組時遇到問題(IaaS)

  1. 由於接聽程式的設定不正確,所以會發生與AlwaysOn相關的許多問題。 如果您遇到與接聽程式的連線問題,

    1. 請務必閱讀 ILB 接聽程式的所有限制,並遵循下列文章中所述的所有步驟,特別注意 PowerShell 腳本中的相依性設定、IP 位址和其他各種參數。

    2. 如果不確定,您可以根據上述文件刪除並重新建立接聽程式。

  2. 如果您最近將 VM 移至不同的服務,或 IP 位址已變更,您需要更新 IP 位址資源的值,以反映新的位址,而且您必須重新建立 AG 的負載平衡端點。 您可以使用 或 Set 命令來更新 IP 位址Get,如下所示:

    Get-ClusterResource "IPResourceName" | Set-ClusterParameter -name Address -value "w.x.y.z"
    

建議的文件:

如果問題仍然存在,請參閱 AlwaysOn 可用性群組的詳細資訊。

從主要故障轉移到次要複本需要很長的時間,反之亦然

在可用性群組上進行自動容錯移轉或規劃的手動容錯移轉之後沒有資料遺失,您可能會發現容錯移轉時間超過您的復原時間目標 (RTO)。 若要針對原因和潛在解決方案進行疑難解答,請參閱 疑難解答:可用性群組超過 RTO

如果問題仍然存在,請參閱 AlwaysOn 可用性群組的詳細資訊。

主要複本上的變更不會反映或復寫至次要複本的速度變慢

您可能會注意到主要復本上的變更不會及時傳播至次要複本。 若要針對這些問題進行疑難解答並加以解決,請嘗試下列動作:

如果問題仍然存在,請參閱 AlwaysOn 可用性群組的詳細資訊。

如何管理 AG 資料庫的事務歷史記錄大小

您可以在主要或輔助伺服器上設定一般備份,以減少事務歷史記錄大小。

如需其他資訊,請檢閱下列主題:

如果這項資訊沒有説明,請參閱 AlwaysOn 可用性群組的詳細資訊。

主要或輔助伺服器在解析狀態中發生,或您遇到非預期的故障轉移

如果問題仍然存在,請參閱 AlwaysOn 可用性群組的詳細資訊。

無法讓資源上線

檢閱 SQL ErrorLog 中的訊息,檢查資料庫是否需要很長的時間才能復原。

如果問題仍然存在,請參閱 AlwaysOn 可用性群組的詳細資訊。

常見問題集

  1. 是否有兩個可用性群組的接聽程式?

    是,您可以為相同的可用性群組設定多個接聽程式。 請參閱 如何為相同的可用性群組建立多個接聽程式 (Goden Yao)

  2. 是否有個別的 NIC 卡可一律用於流量和用戶端連線?

    是,您可以有 AlwaysOn 流量的專用 NIC 卡。 請參閱設定 可用性群組以在專用網路上通訊。

  3. 哪些版本支援 AlwaysOn 故障轉移叢集實例?

    《SQL Server 在線叢書》中的本主題有詳細資訊: SQL Server 2016 的版本和支援的功能。

  4. 如何在叢集的所有節點上發生失敗時復原?

    請參閱透過強制仲裁的 WSFC 災害復原(SQL Server)。

  5. 哪裡可以找到 AG 組態中分散式交易支援的相關信息?

    請參閱 交易 - 可用性群組和資料庫鏡像

  6. 如何更新 AlwaysOn 設定?

    請參閱 升級 AlwaysOn 可用性群組複本實例

  7. 如何將已啟用 TDE 的 TDE (透明資料加密) 資料庫新增至 AG 組態?

    若要將已啟用 TDE 的 DB 新增至 AG,請參閱 如何為 TDE 資料庫設定 Always On。

  8. 如何設定警示來檢查次要複本是否落後於主要伺服器?

    您可以使用下列文稿:

    SELECT ag.name AS ag_name, ar.replica_server_name AS ag_replica_server,
    dr_state.database_id AS database_id,
    is_ag_replica_local = CASE
        WHEN ar_state.is_local = 1 THEN N'LOCAL'
        ELSE 'REMOTE'
        END,
    ag_replica_role = CASE
        WHEN ar_state.role_desc IS NULL THEN N'DISCONNECTED'
        ELSE ar_state.role_desc
        END,
    dr_state.last_hardened_lsn, dr_state.last_hardened_time,
    datediff(s,last_hardened_time, getdate()) AS 'seconds behind primary'
    FROM (( sys.availability_groups AS ag
    JOIN sys.availability_replicas AS ar
        ON ag.group_id = ar.group_id)
    JOIN sys.dm_hadr_availability_replica_states AS ar_state
        ON ar.replica_id = ar_state.replica_id)
    JOIN sys.dm_hadr_database_replica_states dr_state
        ON ag.group_id = dr_state.group_id AND dr_state.replica_id = ar_state.replica_id
    
  9. 如果資料庫的狀態不是同步處理,如何收到警示?

    您可以使用下列文稿:

    SELECT ag.name AS ag_name, ar.replica_server_name AS ag_replica_server,
    dr_state.database_id AS database_id,
    is_ag_replica_local = CASE
        WHEN ar_state.is_local = 1 THEN N'LOCAL'
        ELSE 'REMOTE'
        END,
    ag_replica_role = CASE
        WHEN ar_state.role_desc IS NULL THEN N'DISCONNECTED'
        ELSE ar_state.role_desc
        END,
    ar_state.connected_state_desc, ar.availability_mode_desc, dr_state.synchronization_state_desc
    FROM (( sys.availability_groups AS ag
    JOIN sys.availability_replicas AS ar
        ON ag.group_id = ar.group_id )
    JOIN sys.dm_hadr_availability_replica_states AS ar_state
        ON ar.replica_id = ar_state.replica_id)
    JOIN sys.dm_hadr_database_replica_states dr_state
        ON ag.group_id = dr_state.group_id AND dr_state.replica_id = ar_state.replica_id
    

    您也可以檢閱下列連結,以取得其他方法來監視 AlwaysOn 群組:

AlwaysOn 可用性群組的詳細資訊