有谁知道如何从 T-SQL 以编程方式确定 SQL 主动-被动故障转移群集的主动节点?
@@SERVERNAME
只返回虚拟服务器名称,这在两个节点上是相同的。
我不打算根据数据做出任何决定——我相信故障转移会做它的事情——但我想将信息包含在事件日志中,这样我就可以知道事件发生时集群中的哪个节点处于活动状态,或帮助确定是否由于故障转移而出现异常。
有谁知道如何从 T-SQL 以编程方式确定 SQL 主动-被动故障转移群集的主动节点?
@@SERVERNAME
只返回虚拟服务器名称,这在两个节点上是相同的。
我不打算根据数据做出任何决定——我相信故障转移会做它的事情——但我想将信息包含在事件日志中,这样我就可以知道事件发生时集群中的哪个节点处于活动状态,或帮助确定是否由于故障转移而出现异常。
Select ServerProperty('ComputerNamePhysicalNetBIOS')
这适用于较新的版本:
SELECT * FROM fn_virtualservernodes();
https://docs.microsoft.com/en-us/sql/relational-databases/system-functions/sys-fn-virtualservernodes-transact-sql?view=sql-server-2017上的完整详细信息
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