有人知道如何通过T-SQL编程确定SQL Active-Passive故障转移集群的活动节点吗?
@@SERVERNAME
仅返回虚拟服务器名称,该名称在两个节点中相同。
我不打算根据数据做出任何决策-我相信故障转移会按计划执行-但我想在事件日志中包含此信息,以便我可以确定发生事件时群集中的哪个节点处于活动状态,或者帮助确定是否发生异常导致故障转移。
有人知道如何通过T-SQL编程确定SQL Active-Passive故障转移集群的活动节点吗?
@@SERVERNAME
仅返回虚拟服务器名称,该名称在两个节点中相同。
我不打算根据数据做出任何决策-我相信故障转移会按计划执行-但我想在事件日志中包含此信息,以便我可以确定发生事件时群集中的哪个节点处于活动状态,或者帮助确定是否发生异常导致故障转移。
Select ServerProperty('ComputerNamePhysicalNetBIOS')
这在较新的版本中有效:
SELECT * FROM fn_virtualservernodes();
SELECT * FROM sys.dm_os_cluster_nodes;
尝试这个,它会检查服务器是否是可用性组中的主服务器,然后根据此条件执行X操作:
IF EXISTS (SELECT ars.role FROM sys.dm_hadr_availability_replica_states ars JOIN sys.availability_groups ag ON ars.group_id = ag.group_id WHERE ars.role_desc = 'PRIMARY')
BEGIN
SELECT 'PRIMARY' -- DO STUFF IF PRIMARY
END
ELSE
BEGIN
SELECT 'NOT PRIMARY' --- DON'T DO STUFF
END
SELECT convert(varchar(100), ServerProperty('ComputerNamePhysicalNetBIOS'))
- bradvidoMachineName
而不是ComputerNamePhysicalNetBIOS
。在HA组和独立实例上测试了两个值,在每种情况下都按预期工作,但我认为他们推荐一个而不是另一个有一些原因。 - Richard MossMachineName
返回与实例关联的网络名称,而不是节点。ComputerNamePhysicalNetBIOS
返回实际节点名称。如果您使用的是SQL 2012及以上版本,则最好使用dmv sys.dm_os_cluster_nodes。 - Robert Cutajar