【问题标题】:SQL Server failover cluster - determine active nodeSQL Server 故障转移群集 - 确定活动节点
【发布时间】:2011-05-28 08:16:44
【问题描述】:

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

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

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

【问题讨论】:

  • 如果你开始关心集群,我认为你最好投入精力去做正确的事——如果在你的检查和你的任何东西之间启动了手动故障转移怎么办'之后重新计划做什么?当这不再正确时,您会认为您在活动节点上。
  • @Damien 在这种情况下你会如何“做对”?
  • 真的不能同时在非活动和活动节点上运行。 ?

标签: sql-server windows sql-server-2008 cluster-computing failover


【解决方案1】:

来自 SQL Server:

Select ServerProperty('ComputerNamePhysicalNetBIOS')

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

【讨论】:

  • 你能解释一下Select ServerProperty('ComputerNamePhysicalNetBIOS')如何告诉你你是否在活动节点上吗?
  • @Neilw:来自documentation:“当前运行 SQL Server 实例的本地计算机的 NetBIOS 名称。对于故障转移群集上的 SQL Server 群集实例,此值会更改因为 SQL Server 实例故障转移到故障转移群集中的其他节点。在独立的 SQL Server 实例上,此值保持不变并返回与 MachineName 属性相同的值。"
【解决方案2】:

你可以这样检查:

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 

【讨论】:

    猜你喜欢
    • 2010-10-21
    • 2011-05-21
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    • 1970-01-01
    • 2014-06-14
    相关资源
    最近更新 更多