Share via


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

資料移動狀態,下列其中一個值:

描述

0

未進行同步處理:

  • 如果是主要資料庫,表示資料庫尚未準備好要將其交易記錄與對應的次要資料庫同步處理。

  • 如果是次要資料庫,表示資料庫尚未開始記錄同步處理,原因是因為連接問題、處於暫停狀態,或在啟動或角色切換期間正在移轉狀態。

1

正在同步處理:

  • 如果是主要資料庫,表示此資料庫準備好接受次要資料庫的掃描要求。

  • 如果是次要資料庫,表示資料庫正在進行資料移動作業。

2

已同步處理:

  • 主要資料庫會顯示 SYNCHRONIZED 而非 SYNCHRONIZING。

  • 當本機快取表示資料庫已做好容錯移轉的準備而且正在同步處理時,同步認可次要資料庫就會顯示已同步處理。

3

正在還原: 表示當次要資料庫積極取得主要資料庫的頁面時,復原程序中的階段。

警告注意事項注意

當次要複本上的資料庫處於 REVERTING 狀態時,強制容錯移轉至次要複本會將資料庫保留在無法當做主要資料庫啟動的狀態。 資料庫需要當做次要資料庫重新連接,或者您需要從記錄備份套用新的記錄檔記錄。

4

正在初始化。 表示次要資料庫跟上復原 LSN 所需的交易記錄正在傳送而且在次要複本上強行寫入時的復原階段。

警告注意事項注意

當次要複本上的資料庫處於 INITIALIZING 狀態時,強制容錯移轉至次要複本會將資料庫保留在當做主要資料庫啟動的狀態。 資料庫需要當做次要資料庫重新連接,或者您需要從記錄備份套用新的記錄檔記錄。

synchronization_state_desc

nvarchar(60)

資料移動狀態的描述,下列其中一個值:

NOT SYNCHRONIZING

SYNCHRONIZING

SYNCHRONIZED

REVERTING

INITIALIZING

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 (SYNCHRONIZING),則非同步認可可用性複本上的資料庫會被視為狀況良好。

synchronization_health_desc

nvarchar(60)

可用性資料庫之 synchronization_health 的描述。

NOT_HEALTHY

PARTIALLY_HEALTHY

HEALTHY

database_state

tinyint

0 = 線上

1 = 還原中

2 = 復原中

3 = 復原暫止

4 = 可疑

5 = 緊急

6 = 離線

[!附註]

與 sys.databases 中的 state 資料行相同。

database_state_desc

nvarchar(60)

可用性複本之 database_state 的描述。

ONLINE

RESTORING

RECOVERING

RECOVERY_PENDING

SUSPECT

EMERGENCY

OFFLINE

[!附註]

與 sys.databases 中的 state 資料行相同。

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_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_lsnlast_hardened_lsnlast_received_lsnlast_sent_lsnrecovery_lsntruncation_lsn 資料行的值並非實際的記錄序號 (LSN)。 每一個值都會反映填滿零的記錄檔區塊識別碼。

end_of_log_lsnlast_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 權限。

請參閱

概念

AlwaysOn 可用性群組 (SQL Server)

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