Состояние участников зеркального отображения базы данных

Microsoft.SQLServer.2008.Mirroring.PartnersStateMonitor (UnitMonitor)

Данный монитор проверяет, синхронизировано ли зеркальное отображение база данных.

Knowledge Base article:

Сводка

Этот монитор проверяет состояние сеанса зеркального отображения базы данных в соответствии с отчетом Microsoft® SQL Server™. Для проверки выполняется запрос к базе данных master экземпляра SQL Server и возвращается состояние сеанса зеркального отображения базы данных. При получении предупреждения от этого монитора необходимо предпринять действия по возврату сеанса зеркального отображения базы данных в рабочее состояние.

Причины

Неисправное состояние указывает на то, что сеанс зеркального отображения базы данных SQL Server™ находится в нерабочем состоянии. Возможные состояния описаны ниже:

Состояние участника зеркального отображения

Описание

Состояние работоспособности MOM

IN_SYNC

Это обычное рабочее состояние. Участники зеркального отображения синхронизированы, и зеркальное отображение выполняется нормально.

РАБОТОСПОСОБНА

OUT_OF_SYNC

Участники зеркального отображения не синхронизированы.

КРИТИЧЕСКОЕ

Решения

Чтобы решить проблему, попробуйте выполнить следующие действия.

Переопределяемые параметры

Имя

Описание

Значение по умолчанию

Приоритет предупреждения

Определяет приоритет предупреждения.

Обычные

Серьезность предупреждения

Определяет серьезность предупреждения.

Ошибка

Включено

Включает или отключает рабочий процесс.

Да

Создает предупреждения

Определяет, создает ли рабочий процесс предупреждения.

Да

Интервал (в секундах)

Повторяющийся интервал времени в секундах, по истечении которого запускается рабочий процесс.

900

Время синхронизации

Время синхронизации указывается в 24-часовом формате и может быть опущено.

 

Время ожидания (в секундах)

Определяет время, в течение которого возможно выполнение рабочего процесса перед закрытием и пометкой как сбойный.

300

Element properties:

TargetMicrosoft.SQLServer.2008.Mirroring.Witness
Parent MonitorSystem.Health.AvailabilityState
CategoryAvailabilityHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityError
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.2008.Mirroring.ScriptedTwoStateType
RemotableTrue
AccessibilityPublic
Alert Message
Участники зеркального отображения базы данных не синхронизированы
Зеркальное отображение базы данных "{0}" не синхронизировано Участники зеркального отображения — "{1}" и "{2}".
RunAsMicrosoft.SQLServer.SQLProbeAccount

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.2008.Mirroring.PartnersStateMonitor" Accessibility="Public" Enabled="true" Target="SQL2008Mirroring!Microsoft.SQLServer.2008.Mirroring.Witness" ParentMonitorID="Health!System.Health.AvailabilityState" TypeID="Microsoft.SQLServer.2008.Mirroring.ScriptedTwoStateType" Remotable="true" Priority="Normal" ConfirmDelivery="false" RunAs="SQL!Microsoft.SQLServer.SQLProbeAccount">
<Category>AvailabilityHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2008.Mirroring.PartnersStateMonitor.AlertMessage">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Error</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Property[Type="SQL2008Mirroring!Microsoft.SQLServer.2008.Mirroring.Witness"]/DatabaseName$</AlertParameter1>
<AlertParameter2>$Target/Property[Type="SQL2008Mirroring!Microsoft.SQLServer.2008.Mirroring.Witness"]/Principal$</AlertParameter2>
<AlertParameter3>$Target/Property[Type="SQL2008Mirroring!Microsoft.SQLServer.2008.Mirroring.Witness"]/Mirror$</AlertParameter3>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="Good" MonitorTypeStateID="Good" HealthState="Success"/>
<OperationalState ID="Bad" MonitorTypeStateID="Bad" HealthState="Error"/>
</OperationalStates>
<Configuration>
<ScriptName>GetSQL2008MirroringPartnersState.vbs</ScriptName>
<ScriptBody><Script>'#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

Const SCRIPT_EVENT_ID = 4001

Dim GetPartnersStatusQuery
GetPartnersStatusQuery = "SELECT " &amp;_
" mirroring_guid, " &amp;_
" partner_sync_state_desc " &amp;_
" FROM sys.database_mirroring_witnesses "

Call GetPartnersStatus()

Sub GetPartnersStatus()
If WScript.Arguments.Count = 4 Then
Dim oBag
Set oBag = oAPI.CreatePropertyBag()

Dim state, serviceName

serviceName = GetSQLServiceName(WScript.Arguments(2))
state = GetServiceState(WScript.Arguments(1), serviceName)

if (state &lt;&gt; "Running") And (state &lt;&gt; "Unknown") Then
Call oAPI.Return(oBag)
WScript.Quit()
End If

Dim nResult
nResult = PartnersStatus(WScript.Arguments(0), oBag, WScript.Arguments(1), WScript.Arguments(2), WScript.Arguments(3))
On Error Resume Next
Call GlobalErrorListToEventLog()
Call oAPI.Return(oBag)
Else
On Error Resume Next
Call GlobalErrorListToEventLog()
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
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 &lt;&gt; 0 Then
PartnersStatus = SQL_MONITORING_QUERY_FAILURE
ThrowScriptErrorNoAbort "Query execution failed for '" &amp; sSQLConnectionString &amp; "' SQL Server", e
If (oResults &lt;&gt; 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
</Script></ScriptBody>
<IntervalSeconds>900</IntervalSeconds>
<SyncTime/>
<TimeoutSeconds>300</TimeoutSeconds>
<ConnectionString>$Target/Host/Host/Property[Type="SQL!Microsoft.SQLServer.DBEngine"]/ConnectionString$</ConnectionString>
<GoodExpression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="String">Property[@Name='$Target/Property[Type="SQL2008Mirroring!Microsoft.SQLServer.2008.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="SQL2008Mirroring!Microsoft.SQLServer.2008.Mirroring.Witness"]/MirroringGUID$']</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="String">OUT_OF_SYNC</Value>
</ValueExpression>
</SimpleExpression>
</BadExpression>
</Configuration>
</UnitMonitor>