Определить активный узел в отказоустойчивом кластере SQL

Кто-нибудь знает, как программно определить активный узел SQL Active-Passive Failover Cluster из T-SQL?

@@SERVERNAME возвращает только имя виртуального сервера, одинаковое для обоих узлов.

Я не планирую принимать какие-либо решения на основе данных — я верю, что аварийное переключение сделает свое дело, — но я хотел бы включить информацию в журнал событий, чтобы я мог сказать, какой узел в кластере был активен, когда произошло событие. или помогите определить, возникают ли исключения в результате отработки отказа.


person David Boike    schedule 22.04.2009    source источник


Ответы (3)



Попробуйте это, это проверяет, является ли сервер основным сервером в группе доступности, а затем на основе этого условия выполните 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
person Gozzy    schedule 19.09.2020

person    schedule
comment
Если ваш драйвер не может обработать его напрямую, преобразуйте его в varchar: SELECT convert(varchar(100), ServerProperty('ComputerNamePhysicalNetBIOS')) - person bradvido; 09.04.2014
comment
Обратите внимание, что согласно документам вы должны использовать MachineName, а не ComputerNamePhysicalNetBIOS для отказоустойчивых кластеров. Протестированы оба значения в группе HA и автономном экземпляре, в каждом случае они работали должным образом, но я предполагаю, что есть какая-то причина, по которой они рекомендуют одно вместо другого. - person Richard Moss; 24.10.2014
comment
Я готов поспорить, что может быть разница с виртуальными машинами. - person Stu; 30.10.2014
comment
Я расширил ответ. В моем случае (SQL2008R2) MachineName возвращает сетевое имя, связанное с экземпляром, а не с узлом. ComputerNamePhysicalNetBIOS возвращает фактическое имя узла. Если вы используете SQL 2012 и более поздние версии, лучше используйте dmv sys.dm_os_cluster_nodes - person Rbjz; 02.01.2015