Availability Database Data Synchronization

Microsoft.SQLServer.2016.AlwaysOn.DbrDataSynchronizationState (UnitMonitor)

This monitor checks the data synchronization state of database replica. The monitor is unhealthy when the data synchronization state is NOT SYNCHRONIZING or the state is not SYNCHRONIZED for synchronous commit database replica.

Knowledge Base article:

Summary

This monitor checks the data synchronization state of database replica. The monitor is unhealthy when the data synchronization state is NOT SYNCHRONIZING or the state is not SYNCHRONIZED for synchronous commit database replica.

Causes

The data synchronization state of this availability database is unhealthy. On an asynchronous-commit availability replica, every availability database should be in the SYNCHRONIZING state. On a synchronous-commit replica, every availability database should be in the SYNCHRONIZED state.

Resolutions

Resolve any connection or data movement suspend issue. Check events for the issue using SSMS and find database error and follow the troubleshooting for the specific error to resolve it.

Overrideable Parameters

Name

Description

Default Value

Enabled

Enables or disables the workflow.

Yes

Generates Alerts

Defines whether the workflow generates an Alert.

No

Interval (seconds)

The recurring interval of time in seconds in which to run the workflow.

900

Timeout (seconds)

Specifies the time the workflow is allowed to run before being closed and marked as failed.

300

Element properties:

TargetMicrosoft.SQLServer.2016.AlwaysOn.DatabaseReplica
Parent MonitorSystem.Health.AvailabilityState
CategoryAvailabilityHealth
EnabledTrue
Alert GenerateFalse
Alert Auto ResolveFalse
Monitor TypeMicrosoft.SQLServer.2016.AlwaysOn.SystemPolicyScriptMonitorType
RemotableTrue
AccessibilityPublic
RunAsMicrosoft.SQLServer.MonitoringAccount

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.2016.AlwaysOn.DbrDataSynchronizationState" RunAs="GPMP!Microsoft.SQLServer.MonitoringAccount" TypeID="Microsoft.SQLServer.2016.AlwaysOn.SystemPolicyScriptMonitorType" Accessibility="Public" Enabled="true" ParentMonitorID="Health!System.Health.AvailabilityState" Remotable="true" Target="AlwaysOnDisc!Microsoft.SQLServer.2016.AlwaysOn.DatabaseReplica" Priority="Normal">
<Category>AvailabilityHealth</Category>
<OperationalStates>
<OperationalState ID="Success" MonitorTypeStateID="HealthState" HealthState="Success"/>
<OperationalState ID="Critical" MonitorTypeStateID="ErrorState" HealthState="Warning"/>
</OperationalStates>
<Configuration>
<Interval>900</Interval>
<TimeoutSeconds>300</TimeoutSeconds>
<PolicyName>$Target/Property[Type="AlwaysOnDisc!Microsoft.SQLServer.2016.AlwaysOn.DatabaseReplica"]/AvailabilityGroupName$-$Target/Property[Type="AlwaysOnDisc!Microsoft.SQLServer.2016.AlwaysOn.DatabaseReplica"]/Name$-AlwaysOnDbrDataSynchronizationState</PolicyName>
<InstanceName>$Target/Property[Type="AlwaysOnDisc!Microsoft.SQLServer.2016.AlwaysOn.DatabaseReplica"]/AvailabilityReplicaServerName$</InstanceName>
</Configuration>
</UnitMonitor>