Sql-Server-2016

Always On 可用性問號

  • October 28, 2021

在我的生產環境中,我有兩個數據庫伺服器,稱為DBN1DBN2。我在兩個之間建立了一個集群,DBN1是我的主數據庫伺服器。現在,我在伺服器和數據庫上都使用了 Always on 可用性功能進行了同步。

今天我遇到一個問題。DBN1上有一個小問號圖示, DBN2始終在可用性屬性上顯示該圖示。此外,它也沒有顯示它是一個主數據庫。為什麼會這樣?

這是我的主伺服器輸出並按照箭頭

在此處輸入圖像描述

這是我的輔助伺服器輸出並按照箭頭

在此處輸入圖像描述

輔助副本不知道該副本的角色/DBN1狀態

嘗試故障轉移到輔助節點時,主節點的狀態未知:

在此處輸入圖像描述

它找到目前的主副本,但沒有找到主副本的狀態。

從主伺服器進行故障轉移時,它確實會找到此資訊。


當您選擇輔助副本上帶有問號的副本的屬性時:

在此處輸入圖像描述

特性

在此處輸入圖像描述

角色:未知

而在主副本上,所有角色及其同步狀態都是已知的。


sys.dm_hadr_availability_replica_states

執行此查詢會在主要副本上返回多行,但僅在次要副本上返回次要行。

select * from sys.dm_hadr_availability_replica_states;

此行為將在故障轉移後逆轉。


額外檢查

當查看在次要副本上打開未知副本的屬性時執行的查詢時,sys.dm_hadr_availability_replica_statesdmv 也與left join更大的查詢一起使用。

這裡一個有趣的部分是OperationalState專欄:

ISNULL(arstates.operational_state, 6) AS [OperationalState],

這意味著如果副本不存在於該 dmv 中,例如在輔助節點上執行時,則返回6OperationalState.

這種狀態在 dmv 的文件中沒有明確說明:

operation_state tinyint 副本的目前執行狀態,其中之一:

0 = 掛起的故障轉移

1 = 待處理

2 = 線上

3 = 離線

4 = 失敗

5 = 失敗,沒有法定人數

NULL = 副本不是本地的。

有關詳細資訊,請參閱本主題後面的角色和操作狀態。

'Unkown'狀態也未在文件中註明。

在這種情況下6,當角色未知時使用。

6刷新輔助節點上的可用性副本時,它並不總是這樣:

在此處輸入圖像描述

使用的查詢將未知副本的角色狀態設置為 3:

ISNULL(arstates.role, 3) AS [Role],

在 dmv 的文件中處於離線狀態。

並且連接狀態列將是2

ISNULL(arstates.connected_state, 2) AS [ConnectionState],

文件中也沒有提到:

0:斷開連接。…

1:已連接。…

引用自:https://dba.stackexchange.com/questions/237635