Este monitor comprueba si el reflejo de la base de datos está sincronizado.
Este monitor comprueba el estado de la sesión de creación de reflejo de la base de datos devuelto por Microsoft® SQL Server™. Esto se hace ejecutando una consulta en la base de datos maestra de la instancia de SQL Server y devolviendo el estado de la sesión de creación de reflejo de la base de datos. Si recibe una alerta de este monitor, se requiere la intervención del usuario para devolver la sesión de la creación de reflejo de la base de datos a un estado operativo.
Un estado incorrecto indica que la sesión de creación de reflejo de la base de datos de SQL Server™ no está en estado operativo. A continuación, se indican los posibles estados:
Estado de los asociados de creación de reflejo | Descripción | Estado de mantenimiento de MOM |
EN_SINC | Es el estado operativo normal. Los asociados de creación de reflejo están sincronizados y la creación de reflejo se realiza con normalidad. | VERDE |
FUERA_DE_SINC | Los asociados de creación de reflejo están fuera de sincronización. | ROJO |
Para solucionar el problema, pruebe lo siguiente:
Asegúrese de que la configuración de la creación de reflejo se haya completado y el proceso de creación de reflejo esté ejecutándose.
Compruebe los vínculos físicos entre los asociados de creación de reflejo.
Configure las reglas de firewall en ambos asociados de creación de reflejo conforme a la configuración de los extremos.
Target | Microsoft.SQLServer.2014.Mirroring.Witness | ||
Parent Monitor | System.Health.AvailabilityState | ||
Category | AvailabilityHealth | ||
Enabled | True | ||
Alert Generate | True | ||
Alert Severity | Error | ||
Alert Priority | Normal | ||
Alert Auto Resolve | True | ||
Monitor Type | Microsoft.SQLServer.2014.Mirroring.ScriptedTwoStateType | ||
Remotable | True | ||
Accessibility | Public | ||
Alert Message |
| ||
RunAs | Default |
<UnitMonitor ID="Microsoft.SQLServer.2014.Mirroring.PartnersStateMonitor" Accessibility="Public" Enabled="true" Target="SQL2014Mirroring!Microsoft.SQLServer.2014.Mirroring.Witness" ParentMonitorID="Health!System.Health.AvailabilityState" TypeID="Microsoft.SQLServer.2014.Mirroring.ScriptedTwoStateType" Remotable="true" Priority="Normal" ConfirmDelivery="false">
<Category>AvailabilityHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2014.Mirroring.PartnersStateMonitor.AlertMessage">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Error</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Property[Type="SQL2014Mirroring!Microsoft.SQLServer.2014.Mirroring.Witness"]/DatabaseName$</AlertParameter1>
<AlertParameter2>$Target/Property[Type="SQL2014Mirroring!Microsoft.SQLServer.2014.Mirroring.Witness"]/Principal$</AlertParameter2>
<AlertParameter3>$Target/Property[Type="SQL2014Mirroring!Microsoft.SQLServer.2014.Mirroring.Witness"]/Mirror$</AlertParameter3>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="Good" MonitorTypeStateID="Good" HealthState="Success"/>
<OperationalState ID="Bad" MonitorTypeStateID="Bad" HealthState="Error"/>
</OperationalStates>
<Configuration>
<ScriptName>GetSQL2014MirroringPartnersState.vbs</ScriptName>
<ScriptBody> '#Include File:GetSQL2008MirroringPartnersState.vbs
'Copyright (c) Microsoft Corporation. All rights reserved.
' This script takes a single parameter
' Param 0: The SQL connection string to connect to
Const SQL_MONITORING_CONNECT_FAILURE = -1
Const SQL_MONITORING_QUERY_FAILURE = -2
Const SQL_MONITORING_SUCCESS = 0
Dim GetPartnersStatusQuery
GetPartnersStatusQuery = "SELECT " &_
" mirroring_guid, " &_
" partner_sync_state_desc " &_
" FROM sys.database_mirroring_witnesses "
Call GetPartnersStatus()
Sub GetPartnersStatus()
If WScript.Arguments.Count = 4 Then
Dim oBag
Set oBag = oAPI.CreatePropertyBag()
Dim nResult
nResult = PartnersStatus(WScript.Arguments(0), oBag, WScript.Arguments(1), WScript.Arguments(2), WScript.Arguments(3))
Call oAPI.Return(oBag)
Else
Wscript.Quit()
End If
End Sub
Function PartnersStatus(ByVal sSQLConnectionString, ByRef oBag, ByVal sComputerName, ByVal sInstanceName, ByVal sTcpPort)
Dim e
Set e = New Error
Dim cnADOConnection
Set cnADOConnection = SmartConnectWithoutSQLADODB(sSQLConnectionString, sTcpPort, sComputerName, sInstanceName, "master")
if cnADOConnection Is Nothing Then
PartnersStatus = SQL_MONITORING_CONNECT_FAILURE
ThrowScriptErrorNoAbort "Cannot connect to '" & sSQLConnectionString & "' SQL Server", e
Exit Function
End If
Dim oResults
e.Clear
On Error Resume Next
Set oResults = cnADOConnection.Execute(GetPartnersStatusQuery)
e.Save
On Error Goto 0
If e.Number <> 0 Then
PartnersStatus = SQL_MONITORING_QUERY_FAILURE
ThrowScriptErrorNoAbort "Query execution failed for '" & sSQLConnectionString & "' SQL Server", e
If (oResults <> null) Then oResults.Close
cnADOConnection.Close
Exit Function
End If
Do While Not oResults.EOF
Call oBag.AddValue(oResults(0), CStr(oResults(1)))
oResults.MoveNext
Loop
cnADOConnection.Close
PartnersStatus = SQL_MONITORING_SUCCESS
End Function
</ScriptBody>
<IntervalSeconds>900</IntervalSeconds>
<SyncTime/>
<TimeoutSeconds>300</TimeoutSeconds>
<ConnectionString>$Target/Host/Host/Property[Type="SQL2014Core!Microsoft.SQLServer.2014.DBEngine"]/ConnectionString$</ConnectionString>
<GoodExpression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="String">Property[@Name='$Target/Property[Type="SQL2014Mirroring!Microsoft.SQLServer.2014.Mirroring.Witness"]/MirroringGUID$']</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="String">IN_SYNC</Value>
</ValueExpression>
</SimpleExpression>
</GoodExpression>
<BadExpression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="String">Property[@Name='$Target/Property[Type="SQL2014Mirroring!Microsoft.SQLServer.2014.Mirroring.Witness"]/MirroringGUID$']</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="String">OUT_OF_SYNC</Value>
</ValueExpression>
</SimpleExpression>
</BadExpression>
</Configuration>
</UnitMonitor>