5

有没有办法以编程方式确定 SQL Server 故障转移群集中的哪个节点是活动节点?或者至少确定当前机器是否是活动节点?

我有一个 Windows 程序,它在故障转移群集中的两个物理节点上运行,但它的运行方式应该不同,具体取决于它是否在活动节点上运行。部分原因是该程序不应同时在非活动节点和活动节点上运行

(我已经读过一些关于让程序集群感知的内容,但这对于这个简单的场景来说似乎太过分了。)

4

2 回答 2

9

从 SQL 服务器:

Select ServerProperty('ComputerNamePhysicalNetBIOS')

您还可以通过 Microsoft.SqlServer.Management.Smo 命名空间访问它,如下所示

于 2010-12-20T16:12:54.210 回答
0

你可以这样检查:

1. 检查可用性组状态:

if (select
        ars.role_desc
    from sys.dm_hadr_availability_replica_states ars
    inner join sys.availability_groups ag
    on ars.group_id = ag.group_id
    where ag.name = 'AvailabilityGroupName'
    and ars.is_local = 1) = 'PRIMARY'
begin
    -- this server is the primary replica, do something here
end
else
begin
    -- this server is not the primary replica, (optional) do something here
end

*记得更改AvailabilityGroupName

或者

2.防止在辅助上执行作业:

IF master.dbo.svf_AgReplicaState('AvailabilityGroupName')=0  raiserror ('This is not the primary replica.',2,1) 

或者

3.检查辅助写入可用性:

IF (SELECT CONVERT(sysname,DatabasePropertyEx(DB_NAME(),'Updateability'))) != 'READ_ONLY'
BEGIN

-- this server is the primary replica, do something here

END 

或者

4. 对于 SQL2014 及更新版本:

IF master.dbo.fn_hadr_database_is_primary_replica('Admin') = 1
    BEGIN 
        -- this server is the primary replica, do something here
    END
ELSE 
    BEGIN 
        -- this server is not the primary replica, (optional) do something here
    END 
于 2018-12-13T10:23:56.040 回答