sys.dm_hadr_database_replica_states (Transact-SQL)
为参与 AlwaysOn 可用性组(SQL Server 的本地实例正承载其可用性副本)的每个数据库返回一行。 此动态管理视图公开与主副本和辅助副本有关的状态信息。 在辅助副本上,此视图为服务器实例上的每个辅助数据库都返回一行。 在主副本上,此视图为每个主数据库都返回一行,并且为相应的辅助数据库另外返回一行。
重要提示 |
---|
根据操作和更高级别的状态,数据库状态信息可能不可用或过期。此外,这些值仅具有本地相关性。例如,在主副本上,last_hardened_lsn 列的值反映与当前可用于主副本的给定辅助数据库有关的信息,而非辅助副本当前可能具有的实际强制写入的 LSN 值。 |
适用范围:SQL Server(SQL Server 2012 到当前版本)。 |
列名称 |
数据类型 |
说明(针对主副本) |
||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
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 = 脱机 备注 与 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 反映了用零填充的日志块 ID。 它不是实际的日志序列号 (LSN)。 有关如何派生此值的信息,请参阅本主题后面的了解 LSN 列值。 |
||||||||||||
truncation_lsn |
numeric(25,0) |
在主副本上,对于主数据库,反映了所有相应辅助数据库中的最小日志截断 LSN。 如果阻止本地日志截断(例如由备份操作阻止),则该 LSN 可能高于本地截断 LSN。 对于给定的辅助数据库,反映了该数据库的截断点。 truncation_lsn 反映了用零填充的日志块 ID。 它不是实际的日志序列号。 |
||||||||||||
last_sent_lsn |
numeric(25,0) |
指示一个点(在该点前的所有日志块都已由主数据库发送)的日志块标识符。 该标识符是将发送的下一日志块的 ID,而非最近发送的日志块的 ID。 last_sent_lsn 反映了用零填充的日志块 ID,它不是实际的日志序列号。 |
||||||||||||
last_sent_time |
datetime |
发送最后一个日志块的时间。 |
||||||||||||
last_received_lsn |
numeric(25,0) |
标识一个点的日志块 ID,在该点之前,所有日志块都已由承载此辅助数据库的辅助副本接收。 last_received_lsn 反映了用零填充的日志块 ID。 它不是实际的日志序列号。 |
||||||||||||
last_received_time |
datetime |
在辅助副本上读取最后接收的消息中的日志块 ID 的时间。 |
||||||||||||
last_hardened_lsn |
numeric(25,0) |
包含辅助数据库上最后强制写入的 LSN 的日志记录的日志块开头。 在异步提交主数据库上或其当前策略为“延迟”的同步提交数据库上,该值为 NULL。 对于其他同步提交主数据库,last_hardened_lsn 指示所有辅助数据库中强制写入的 LSN 的最小值。 备注 last_hardened_lsn 反映了用零填充的日志块 ID。它不是实际的日志序列号。有关详细信息,请参阅本主题稍后部分中的了解 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 反映了用零填充的日志块 ID。 它不是实际的日志序列号。 有关详细信息,请参阅本主题稍后部分中的了解 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)。 上述各值反映了用零填充的日志块 ID。
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 权限。