このモニターは、データベース ミラーが同期しているかどうかを調べます。
このモニターは、Microsoft® SQL Server™ から報告されたデータベース ミラーリング セッションの状態を確認します。確認は、SQL Server インスタンスの master データベースにクエリを実行し、データベース ミラーリング セッションの状態を返すことで行われます。このモニターからアラートを受け取った場合は、データベース ミラーリング セッションを動作状態に戻す処理を行う必要があります。
異常な状態は、SQL Server™ データベース ミラーリング セッションが動作状態でないことを示します。考えられる状態について、以下で詳しく説明します。
ミラーリング パートナーの状態 | 説明 | MOM 正常性状態 |
IN_SYNC | これは、正常な操作状態です。ミラーリング パートナーは同期しており、ミラーリングは正常に実行中です。 | 正常 |
OUT_OF_SYNC | ミラーリング パートナーは同期していません。 | 重大 |
問題を解決するには、次のことを試してください。
ミラーリング構成が完了してミラーリング プロセスが実行中であることを確認します。
ミラーリング パートナー間の物理的なリンクを調べます。
両方のミラーリング パートナーのファイアウォール ルールを、エンドポイント構成に合わせて設定します。
名前 | 説明 | 既定値 |
アラートの優先度 | アラートの優先順位を定義します。 | 中 |
アラートの重要度 | アラートの重大度を定義します。 | エラー |
有効 | ワークフローを有効または無効にします。 | はい |
アラートを生成する | ワークフローがアラートを生成するかどうかを定義します。 | はい |
間隔 (秒) | ワークフローを実行する定期的な実行間隔 (秒)。 | 900 |
同期時刻 | 24 時間形式で指定した同期時刻。省略可能です。 |
|
タイムアウト (秒) | ワークフローが終了して失敗とマークされるまでの、ワークフローの許容実行時間を指定します。 | 300 |
Target | Microsoft.SQLServer.2008.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.2008.Mirroring.ScriptedTwoStateType | ||
Remotable | True | ||
Accessibility | Public | ||
Alert Message |
| ||
RunAs | Microsoft.SQLServer.SQLProbeAccount |
<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> '#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 " &_
" 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 state, serviceName
serviceName = GetSQLServiceName(WScript.Arguments(2))
state = GetServiceState(WScript.Arguments(1), serviceName)
if (state <> "Running") And (state <> "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 <> 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="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>