OpsMgr Agents and Gateways Failover Queries
The following article by Jimmy Harper explains very well how to set up agents and gateways’ failover paths thru Powershell https://blogs.technet.com/b/jimmyharper/archive/2010/07/23/powershell-commands-to-configure-gateway-server-agent-failover.aspx . This is the approach I also recommend, and that article is great – I encourage you to check it out if you haven’t done it yet!
Anyhow, when checking for the actual failover paths that have been configured, the use of Powershell suggested by Jimmy is rather slow – especially if your agent count is high. In the Operations Manager Health Check tool I was also using that technique at the beginning, but eventually moved to the use of SQL queries just for performance reasons. Since then, we have been using these SQL queries quite successfully for about 3 years now.
But this the season of giving... and I guess SQL Queries can be a gift, right? Therefore I am now donating them as Christmas Gift to the OpsMrg community
Enjoy – and Merry Christmas!
--GetAgentForWhichServerIsPrimary
SELECT SourceBME.DisplayName as Agent,TargetBME.DisplayName as Server
FROM Relationship R WITH (NOLOCK)
JOIN BaseManagedEntity SourceBME
ON R.SourceEntityID = SourceBME.BaseManagedEntityID
JOIN BaseManagedEntity TargetBME
ON R.TargetEntityID = TargetBME.BaseManagedEntityID
WHERE R.RelationshipTypeId = dbo.fn_ManagedTypeId_MicrosoftSystemCenterHealthServiceCommunication()
AND SourceBME.DisplayName not in (select DisplayName
from dbo.ManagedEntityGenericView WITH (NOLOCK)
where MonitoringClassId in (select ManagedTypeId
from dbo.ManagedType WITH (NOLOCK)
where TypeName = 'Microsoft.SystemCenter.GatewayManagementServer')
and IsDeleted ='0')
AND SourceBME.DisplayName not in (select DisplayName from dbo.ManagedEntityGenericView WITH (NOLOCK)
where MonitoringClassId in (select ManagedTypeId from dbo.ManagedType WITH (NOLOCK)
where TypeName = 'Microsoft.SystemCenter.ManagementServer')
and IsDeleted ='0')
AND R.IsDeleted = '0'
--GetAgentForWhichServerIsFailover
SELECT SourceBME.DisplayName as Agent,TargetBME.DisplayName as Server
FROM Relationship R WITH (NOLOCK)
JOIN BaseManagedEntity SourceBME
ON R.SourceEntityID = SourceBME.BaseManagedEntityID
JOIN BaseManagedEntity TargetBME
ON R.TargetEntityID = TargetBME.BaseManagedEntityID
WHERE R.RelationshipTypeId = dbo.fn_ManagedTypeId_MicrosoftSystemCenterHealthServiceSecondaryCommunication()
AND SourceBME.DisplayName not in (select DisplayName
from dbo.ManagedEntityGenericView WITH (NOLOCK)
where MonitoringClassId in (select ManagedTypeId
from dbo.ManagedType WITH (NOLOCK)
where TypeName = 'Microsoft.SystemCenter.GatewayManagementServer')
and IsDeleted ='0')
AND SourceBME.DisplayName not in (select DisplayName
from dbo.ManagedEntityGenericView WITH (NOLOCK)
where MonitoringClassId in (select ManagedTypeId
from dbo.ManagedType WITH (NOLOCK)
where TypeName = 'Microsoft.SystemCenter.ManagementServer')
and IsDeleted ='0')
AND R.IsDeleted = '0'
--GetGatewayForWhichServerIsPrimary
SELECT SourceBME.DisplayName as Gateway, TargetBME.DisplayName as Server
FROM Relationship R WITH (NOLOCK)
JOIN BaseManagedEntity SourceBME
ON R.SourceEntityID = SourceBME.BaseManagedEntityID
JOIN BaseManagedEntity TargetBME
ON R.TargetEntityID = TargetBME.BaseManagedEntityID
WHERE R.RelationshipTypeId = dbo.fn_ManagedTypeId_MicrosoftSystemCenterHealthServiceCommunication()
AND SourceBME.DisplayName in (select DisplayName
from dbo.ManagedEntityGenericView WITH (NOLOCK)
where MonitoringClassId in (select ManagedTypeId
from dbo.ManagedType WITH (NOLOCK)
where TypeName = 'Microsoft.SystemCenter.GatewayManagementServer')
and IsDeleted ='0')
AND R.IsDeleted = '0'
--GetGatewayForWhichServerIsFailover
SELECT SourceBME.DisplayName As Gateway, TargetBME.DisplayName as Server
FROM Relationship R WITH (NOLOCK)
JOIN BaseManagedEntity SourceBME
ON R.SourceEntityID = SourceBME.BaseManagedEntityID
JOIN BaseManagedEntity TargetBME
ON R.TargetEntityID = TargetBME.BaseManagedEntityID
WHERE R.RelationshipTypeId = dbo.fn_ManagedTypeId_MicrosoftSystemCenterHealthServiceSecondaryCommunication()
AND SourceBME.DisplayName in (select DisplayName
from dbo.ManagedEntityGenericView WITH (NOLOCK)
where MonitoringClassId in (select ManagedTypeId
from dbo.ManagedType WITH (NOLOCK)
where TypeName = 'Microsoft.SystemCenter.GatewayManagementServer')
and IsDeleted ='0')
AND R.IsDeleted = '0'
--xplat agents
select bme2.DisplayName as XPlatAgent, bme.DisplayName as Server
from dbo.Relationship r with (nolock)
join dbo.RelationshipType rt with (nolock)
on r.RelationshipTypeId = rt.RelationshipTypeId
join dbo.BasemanagedEntity bme with (nolock)
on bme.basemanagedentityid = r.SourceEntityId
join dbo.BasemanagedEntity bme2 with (nolock)
on r.TargetEntityId = bme2.BaseManagedEntityId
where rt.RelationshipTypeName = 'Microsoft.SystemCenter.HealthServiceManagesEntity'
and bme.IsDeleted = 0
and r.IsDeleted = 0
and bme2.basemanagedtypeid in (SELECT DerivedTypeId
FROM DerivedManagedTypes with (nolock)
WHERE BaseTypeId = (select managedtypeid
from managedtype where typename = 'Microsoft.Unix.Computer')
and DerivedIsAbstract = 0)