尝试为我们所有服务器创建一个关于可用性组状态和运行状况的单一管理平台。我想通过编写一个应用程序并调用 t-sql 语句来从每个服务器主表/视图收集数据,然后显示为组合仪表板来实现此目的。
我正在使用系统视图,但遇到以下问题:
从主副本运行会select * from sys.dm_hadr_database_replica_states
显示每个数据库的主副本和辅助副本的状态,但从辅助副本运行仅显示辅助副本的结果。
例如,当从主节点运行时,我得到:
TAPSLog ONLINE FULL SRVR-01-HA TAPSLog_LN Secondary SYNCHRONIZED HEALTHY NULL NULL
TAPSLog ONLINE FULL SRVR-01 TAPSLog_LN Primary SYNCHRONIZED HEALTHY ONLINE NULL
以及来自中学的:
TAPSLog ONLINE FULL SRVR-01-HA TAPSLog_LN Secondary SYNCHRONIZED HEALTHY NULL NULL
有谁知道是否可以从所有副本中读取所有副本的状态,而我只是使用了错误的表?
这是预期的以及它是如何工作的。这是由于可用性组使用的协议所致,主数据库了解每个人及其当前状态,而辅助数据库仅了解其自身。
状态消息基本上只从辅助设备发送到主设备,此外,辅助设备仅连接到主设备,而辅助设备负责此操作,这与大多数人习惯的不同,通常实现细节并不重要。
如果您想要单一管理平台,则需要首先对副本和 AG 进行清点。请注意,分布式可用性组以及在某种程度上读取规模的可用性组会加剧这种情况。这意味着您需要使用多个目录和 DMV(例如
cluster
名称中包含的目录和 DMV)并检查每个单独的副本,根据 AG 的类型,这可能很困难。