sys.dm_hadr_database_replica_states (Transact-SQL)

適用於:SQL ServerAzure SQL 受控執行個體

針對參與 Always On 可用性群組的每一個資料庫傳回一個資料列 (SQL Server 本機執行個體正在裝載此群組的可用性複本)。 此動態管理檢視會公開主要和次要複本的狀態資訊。 在次要複本上,此檢視會傳回伺服器實例上每個輔助資料庫的數據列。 在主要複本上,此檢視會針對每個主資料庫傳回一個數據列,以及對應輔助資料庫的額外數據列。

重要

視動作和較高層級狀態而定,資料庫狀態資訊可能無法使用或過期。 此外,這些值只有區域相關性。 例如,在主要複本上,last_hardened_lsn 數據行的值會反映目前可供主要複本使用的指定輔助資料庫的相關信息,而不是次要複本目前可能擁有的實際強化 LSN 值。

資料行名稱 資料類型 描述(主要複本上)
database_id int 資料庫標識碼,在 SQL Server 實例內是唯一的。 此值與 sys.databases 目錄檢視中顯示的值相同。
group_id uniqueidentifier 資料庫所屬可用性群組的標識碼。
replica_id uniqueidentifier 可用性群組內可用性複本的標識碼。
group_database_id uniqueidentifier 可用性群組內資料庫的標識碼。 此標識碼與這個資料庫聯結的每個復本相同。
is_local bit 可用性資料庫是否為本機資料庫,其中一個:

0 = 資料庫不是 SQL Server 實例的本機資料庫。

1 = 資料庫是伺服器實例的本機資料庫。
is_primary_replica bit 如果複本是主要複本,則傳回 1,如果它是次要複本,則傳回 0。

適用於:SQL Server 2014 (12.x) 和更新版本。
synchronization_state tinyint 數據移動狀態,下列其中一個值。

0 = 未同步處理。 對於主資料庫,表示資料庫尚未準備好將其事務歷史記錄與對應的輔助資料庫同步處理。 如果是次要資料庫,表示資料庫尚未開始記錄同步處理,原因是因為連接問題、處於暫停狀態,或在啟動或角色切換期間正在移轉狀態。

1 = 同步處理。 對於主資料庫,表示資料庫已準備好接受輔助資料庫的掃描要求。 針對輔助資料庫,表示資料庫發生作用中數據移動。

2 = 已同步處理。 主資料庫會顯示SYNCHRONIZED 取代 SYNCHRONIZEING。 當本機快取顯示資料庫已就緒且正在同步處理時,同步認可輔助資料庫會顯示已同步處理。

3 = 還原。 表示當次要資料庫積極取得主要資料庫的頁面時,復原程序中的階段。
注意: 當次要複本上的資料庫處於 REVERTING 狀態時,強制故障轉移至次要復本會使資料庫處於無法作為主資料庫啟動的狀態。 資料庫必須重新連線為輔助資料庫,或者您必須從記錄備份套用新的記錄檔記錄。

4 = 初始化。 表示次要資料庫跟上復原 LSN 所需的交易記錄正在傳送而且在次要複本上強行寫入時的復原階段。
注意: 當次要複本上的資料庫處於 INITIALIZING 狀態時,強制故障轉移至次要複本會使資料庫處於無法啟動為主資料庫的狀態。 資料庫必須重新連線為輔助資料庫,或者您必須從記錄備份套用新的記錄檔記錄。
synchronization_state_desc nvarchar(60) 資料移動狀態的描述,其中一個:

未同步處理

SYNCHRONIZING

SYNCHRONIZED

恢復

初始化
is_commit_participant bit 0 = 與這個資料庫相關的交易認可不會同步處理。

1 = 交易認可會與這個資料庫同步處理。

對於異步認可可用性復本上的資料庫,此值一律為0。

對於同步認可可用性復本上的資料庫,此值僅適用於主資料庫。
synchronization_health tinyint 反思 可用性複本上加入可用性群組的資料庫同步處理狀態交集,以及可用性複本的可用性模式(同步認可或異步認可模式),下列其中一個值。

0 = 狀況不良。 資料庫的 synchronization_state 為 0 (NOT SYNCHRONIZING)。

1 = 部分狀況良好。 如果 synchronization_state 為 1(SYNCHRONIZING),同步認可可用性復本上的資料庫會被視為部分狀況良好。

2 = 狀況良好。 如果synchronization_state為 2(SYNCHRONIZED),則同步認可可用性復本上的資料庫會被視為狀況良好,如果synchronization_state為 1(SYNCHRONIZEING),則異步認可可用性複本上的資料庫會被視為狀況良好。
synchronization_health_desc nvarchar(60) 可用性資料庫synchronization_health的描述。

NOT_HEALTHY

PARTIALLY_HEALTHY

狀況良好
database_state tinyint 0 = 在線

1 = 還原

2 = 復原

3 = 復原擱置中

4 = 可疑

5 = 緊急

6 = 離線

注意:sys.databases 中的狀態 數據行相同。
database_state_desc nvarchar(60) 可用性復本database_state的描述。

ONLINE

RESTORING

RECOVERING

RECOVERY_PENDING

SUSPECT

EMERGENCY

OFFLINE

注意:state_desc sys.databases 中的數據行相同。
is_suspended bit 資料庫狀態,其中一個:

0 = 繼續

1 = 暫停
suspend_reason tinyint 如果資料庫已暫停,則暫停狀態的原因為下列其中一項:

0 = 使用者動作

1 = 從合作夥伴暫停

2 = 重做

3 = 擷取

4 = 套用

5 = 重新啟動

6 = 復原

7 = 重新驗證

8 = 計算次要復本同步處理點時發生錯誤
suspend_reason_desc nvarchar(60) 資料庫暫停狀態原因的描述,其中一個:

SUSPEND_FROM_USER = 使用者手動暫停的數據移動

SUSPEND_FROM_PARTNER = 強制故障轉移之後,資料庫複本會暫停

SUSPEND_FROM_REDO = 重做階段期間發生錯誤

SUSPEND_FROM_APPLY = 將記錄寫入檔案時發生錯誤(請參閱錯誤記錄檔)

SUSPEND_FROM_CAPTURE = 擷取主要複本上的記錄檔時發生錯誤

SUSPEND_FROM_RESTART = 資料庫複本在重新啟動資料庫之前暫停 (請參閱錯誤記錄檔)

SUSPEND_FROM_UNDO = 復原階段期間發生錯誤(請參閱錯誤記錄檔)

SUSPEND_FROM_REVALIDATION = 重新連線時偵測到記錄變更不相符 (請參閱錯誤記錄檔)

SUSPEND_FROM_XRF_UPDATE = 找不到常見的記錄點(請參閱錯誤記錄檔)
recovery_lsn numeric(25,0) 在主要復本上,主資料庫在復原或故障轉移之後寫入任何新的記錄檔記錄之前,事務歷史記錄的結尾。 對於指定的輔助資料庫,如果這個值小於目前強化的 LSN (last_hardened_lsn), recovery_lsn 則這個輔助資料庫需要重新同步處理的值(也就是,還原為 並重新初始化至 )。 如果此值大於或等於目前的強化 LSN,則不需要重新同步處理,而且不會發生。

recovery_lsn 反映以零填補的記錄區塊標識碼。 這不是實際的記錄序號 (LSN)。 如需如何衍生此值的詳細資訊,請參閱 本主題稍後的瞭解 LSN 數據行值
truncation_lsn numeric(25,0) 在主資料庫的主要複本上,反映所有對應輔助資料庫的最小記錄截斷 LSN。 如果封鎖本機記錄截斷(例如備份作業),此 LSN 可能高於本機截斷 LSN。

針對指定的輔助資料庫,反映該資料庫的截斷點。

truncation_lsn 反映以零填補的記錄區塊標識碼。 這不是實際的記錄序號。
last_sent_lsn numeric(25,0) 查詢主要複本時, last_sent_lsn 會針對每個次要複本資料庫數據列報告。 記錄檔區塊標識碼,指出主要記錄檔已傳送到哪一個記錄區塊。 這是即將傳送的下一個記錄區塊標識碼,而不是最近傳送記錄區塊的標識碼。

last_sent_lsn 反映以零填補的記錄區塊標識碼,它不是實際的記錄序號。
last_sent_time datetime 查詢主要複本時, last_sent_time 會針對每個次要複本資料庫數據列報告。 傳送最後一個記錄區塊的時間。
last_received_lsn numeric(25,0) 查詢次要複本時, last_received_lsn 會針對本機次要複本資料庫數據列報告。 記錄區塊標識碼,可識別裝載此輔助資料庫的次要複本已接收所有記錄區塊的點。

last_received_lsn 反映以零填補的記錄區塊標識碼。 這不是實際的記錄序號。
last_received_time datetime 查詢次要複本時, last_received_time 會針對本機次要複本資料庫數據列報告。 上次收到訊息中的記錄區塊標識碼在次要複本上讀取的時間。
last_hardened_lsn numeric(25,0) 記錄區塊的開頭,其中包含輔助資料庫上最後一個強化 LSN 的記錄檔記錄。

在異步認可主資料庫或目前原則為「延遲」的同步認可資料庫上,值為 NULL。 對於其他同步認可主資料庫, last_hardened_lsn 表示所有輔助資料庫的強化 LSN 下限。

注意: 反映 last_hardened_lsn 以零填補的記錄區塊標識符。 這不是實際的記錄序號。 如需詳細資訊,請參閱 本主題稍後的瞭解 LSN 資料行值
last_hardened_time datetime 在輔助資料庫上,最後一個強化 LSN (last_hardened_lsn) 的記錄區塊標識碼時間。 在主資料庫上,反映對應至最小強化 LSN 的時間。
last_redone_lsn numeric(25,0) 輔助資料庫上重做之最後一筆記錄檔記錄的實際記錄序號。 last_redone_lsn一律小於 last_hardened_lsn
last_redone_time datetime 在輔助資料庫上重做最後一筆記錄檔記錄的時間。
log_send_queue_size bigint 尚未傳送至輔助資料庫的記錄檔記錄數量,以 KB 為單位。
log_send_rate bigint 主要複本實例在上一個使用期間傳送數據的平均速率,以 KB 為單位/秒。
redo_queue_size bigint 尚未重做之次要複本記錄檔中的記錄記錄數量,以 KB 為單位。
redo_rate bigint 在指定的輔助資料庫上重做記錄記錄的平均速率,以 KB 為單位/秒。

redo_rate計算方式是除以重做時的總記錄位元組,因為資料庫引擎啟動的時間範圍是主動執行,而不是經過的時間範圍。 由於重做可能不會連續執行,因此產生的值可能會與性能計數器的值 Database Replica:Redone Bytes/sec 不同(較高)。
filestream_send_rate bigint FILESTREAM 檔案運送到次要複本的速率,以 KB 為單位/秒。
end_of_log_lsn numeric(25,0) 記錄 LSN 的本機結尾。 對應至主要和輔助資料庫上記錄快取中最後一筆記錄的實際 LSN。 在主要複本上,次要數據列會反映次要複本已傳送至主要復本的最新進度訊息記錄 LSN 結尾。

end_of_log_lsn反映以零填補的記錄區塊標識碼。 這不是實際的記錄序號。 如需詳細資訊,請參閱 本主題稍後的瞭解 LSN 資料行值
last_commit_lsn 數值(25,0) 與事務歷史記錄中最後一筆認可記錄對應的實際記錄序號。

在主資料庫上,這會對應至處理的最後一筆認可記錄。 輔助資料庫的數據列會顯示次要複本已傳送給主要複本的記錄序號。

在次要復本上,這是重做的最後一個認可記錄。
last_commit_time datetime 對應至最後一個認可記錄的時間。

在輔助資料庫上,這次與主資料庫相同。

在主要複本上,每個輔助資料庫數據列會顯示裝載輔助資料庫之次要複本回報給主要複本的時間。 主資料庫數據列與指定輔助資料庫數據列之間的時間差異,大約代表恢復點目標 (RPO),假設重做程式已趕上,且已將進度回報回次要複本的主要複本。
low_water_mark_for_ghosts bigint 資料庫的單調遞增數位,表示主資料庫上的准刪除清除所使用的低水位標記。 如果這個數位不會隨著時間增加,表示可能不會進行准刪除清除。 若要決定要清除哪些准刪除數據列,主要複本會針對所有可用性複本使用此數據行的最小值(包括主要複本)。
secondary_lag_seconds bigint 次要復本在同步處理期間落後於主要複本的秒數。

適用於:SQL Server 2016 (13.x) 和更新版本。

瞭解 LSN 資料行值

end_of_log_lsn、last_hardened_lsn、last_received_lsn、last_sent_lsnrecovery_lsntruncation_lsn數據行的值不是實際的記錄序號(LSN)。 相反地,每個值都會反映以零填補的記錄區塊標識符。

end_of_log_lsn、last_hardened_lsnrecovery_lsn會排清 LSN。 例如, last_hardened_lsn 表示下一個區塊的開頭超過磁碟上已存在區塊。 因此,last_hardened_lsn的任何 LSN < 都位於磁碟上。 不會排清 = 給此值的 LSN >。

在sys.dm_hadr_database_replica_states傳回的 LSN 值中,只有last_redone_lsn是實際的 LSN。

權限

需要伺服器上的 VIEW SERVER STATE 許可權。

SQL Server 2022 和更新版本的權限

需要伺服器上的 VIEW SERVER PERFORMANCE STATE 權限。

另請參閱

Always On 可用性群組 (SQL Server)
監視可用性群組 (Transact-SQL)