sys.dm_hadr_database_replica_states (Transact-SQL)
針對參與 AlwaysOn 可用性群組的每一個資料庫傳回一個資料列 (本機 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 = 資料庫在伺服器執行個體的本機。 |
||||||||||||||||
synchronization_state |
tinyint |
資料移動狀態,下列其中一個值:
|
||||||||||||||||
synchronization_state_desc |
nvarchar(60) |
資料移動狀態的描述,下列其中一個值: NOT SYNCHRONIZING SYNCHRONIZING SYNCHRONIZED REVERTING INITIALIZING |
||||||||||||||||
is_commit_participant |
bit |
0 = 未根據此資料庫同步處理交易認可。 1 = 根據此資料庫同步處理交易認可。 如果是非同步認可可用性複本上的資料庫,這個值一定是 0。 如果是同步認可可用性複本上的資料庫,這個值僅在主要資料庫上才正確。 |
||||||||||||||||
synchronization_health |
tinyint |
反映聯結可用性複本上之可用性群組的資料庫同步處理狀態交集,以及可用性複本的可用性模式 (同步認可或非同步認可模式),為下列其中一個值:
|
||||||||||||||||
synchronization_health_desc |
nvarchar(60) |
可用性資料庫之 synchronization_health 的描述。 NOT_HEALTHY PARTIALLY_HEALTHY HEALTHY |
||||||||||||||||
database_state |
tinyint |
0 = 線上 1 = 還原中 2 = 復原中 3 = 復原暫止 4 = 可疑 5 = 緊急 6 = 離線
|
||||||||||||||||
database_state_desc |
nvarchar(60) |
可用性複本之 database_state 的描述。 ONLINE RESTORING RECOVERING RECOVERY_PENDING SUSPECT EMERGENCY OFFLINE
|
||||||||||||||||
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_time |
datetime |
上次傳送記錄檔區塊的時間。 |
||||||||||||||||
last_received_lsn |
numeric(25,0) |
記錄檔區塊識別碼,可識別裝載此次要資料庫的次要複本已經接收所有記錄檔區塊到哪一點。 last_received_lsn 會反映填滿零的記錄檔區塊識別碼。 這不是實際的記錄序號。 |
||||||||||||||||
last_received_time |
datetime |
取得在次要複本上讀取上一個接收訊息內之記錄檔區塊識別碼的時間。 |
||||||||||||||||
last_hardened_lsn |
numeric(25,0) |
記錄檔區塊的開頭,其中包含次要資料庫之上次強行寫入 LSN 的記錄檔記錄。 在非同步認可主要資料庫或目前原則為「延遲」的同步認可資料庫上,此值是 NULL。 若為其他同步認可主要資料庫,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 數為單位)。 |
||||||||||||||||
filestream_send_rate |
bigint |
FILESTREAM 檔案傳送到次要複本所使用的速率 (以每秒鐘的 KB 數為單位)。 |
||||||||||||||||
end_of_log_lsn |
numeric(25,0) |
本機記錄檔結束 LSN。 實際 LSN 會對應到主要和次要資料庫上記錄檔快取中的上一個記錄檔記錄。 在主要複本上,次要資料列會根據次要複本傳送至主要複本的最新進度訊息反映記錄檔結束 LSN。 end_of_log_lsn 會反映填滿零的記錄檔區塊識別碼。 這不是實際的記錄序號。 如需詳細資訊,請參閱本主題稍後的<了解 LSN 資料行值>。 |
||||||||||||||||
last_commit_lsn |
Numeric(25,0) |
實際記錄序號,對應到交易記錄中的上一個認可記錄。 在主要資料庫上,這會對應到上一次處理的認可記錄。 次要資料庫的資料列會顯示次要複本傳送至主要複本的記錄序號。 在次要複本上,這是上一次重做的認可記錄。 |
||||||||||||||||
last_commit_time |
datetime |
對應到上一個認可記錄的時間。 在次要資料庫上,此時間與主要資料庫上的時間相同。 在主要複本上,每一個次要資料庫資料列都會顯示裝載該次要資料庫的次要複本回報給主要複本的時間。 主要資料庫資料列與給定的次要資料庫資料列之間的時間差異大致代表復原時間目標 (RPO),但必須假設重做程序趕上進度,而且次要複本已將進度回報給主要複本。 |
||||||||||||||||
low_water_mark_for_ghosts |
bigint |
資料庫的一個單純遞增的數字,表示主要資料庫上的準刪除清除所使用的下限標準。 如果這個數字不會隨著時間而遞增,則表示可能不會進行準刪除清除作業。 為了決定所要清除的準刪除資料列,主要複本會針對所有可用性複本 (包括主要複本) 中的這個資料庫,使用這個資料行的最小值。 |
了解 LSN 資料行值
end_of_log_lsn、last_hardened_lsn、last_received_lsn、last_sent_lsn、recovery_lsn 和 truncation_lsn 資料行的值並非實際的記錄序號 (LSN)。 每一個值都會反映填滿零的記錄檔區塊識別碼。
end_of_log_lsn、last_hardened_lsn 和 recovery_lsn 為排清 LSN。 例如,last_hardened_lsn 表示超過已在磁碟上之區塊的下一個區塊開始處。 所以 < last_hardened_lsn 值的任何 LSN 都會在磁碟上。 >= 這個值的 LSN 則不會排清。
在 sys.dm_hadr_database_replica_states 傳回的 LSN 值中,只有 last_redone_lsn 是真正的 LSN。
安全性
權限
需要伺服器的 VIEW SERVER STATE 權限。