在SQL故障转移群集中确定活动节点

23

有人知道如何通过T-SQL编程确定SQL Active-Passive故障转移集群的活动节点吗?

@@SERVERNAME仅返回虚拟服务器名称,该名称在两个节点中相同。

我不打算根据数据做出任何决策-我相信故障转移会按计划执行-但我想在事件日志中包含此信息,以便我可以确定发生事件时群集中的哪个节点处于活动状态,或者帮助确定是否发生异常导致故障转移。

3个回答

38
Select ServerProperty('ComputerNamePhysicalNetBIOS')

如果您的驱动程序无法直接处理它,请将其转换为varchar:SELECT convert(varchar(100), ServerProperty('ComputerNamePhysicalNetBIOS')) - bradvido
请注意,根据文档,在故障转移群集中应使用MachineName而不是ComputerNamePhysicalNetBIOS。在HA组和独立实例上测试了两个值,在每种情况下都按预期工作,但我认为他们推荐一个而不是另一个有一些原因。 - Richard Moss
我愿意打赌虚拟机可能会有所不同。 - Stu
1
我已经扩展了答案。在我的情况下(SQL2008R2),MachineName返回与实例关联的网络名称,而不是节点。ComputerNamePhysicalNetBIOS返回实际节点名称。如果您使用的是SQL 2012及以上版本,则最好使用dmv sys.dm_os_cluster_nodes - Robert Cutajar


0

尝试这个,它会检查服务器是否是可用性组中的主服务器,然后根据此条件执行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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接