2012 資料倉儲上限監視類型

Microsoft.ServiceManager.DataWarehouse.HighWaterMarkMonitorType (UnitMonitorType)

監視 2012 資料倉儲的上限值是否變更。

Element properties:

RunAsDefault
AccessibilityPublic
Support Monitor RecalculateFalse

Member Modules:

ID Module Type TypeId RunAs 
DBProbe DataSource Microsoft.SystemCenter.ServiceManager.Monitoring.OledbProbe Default
Script ProbeAction Microsoft.Windows.ScriptPropertyBagProbe Default
CDError ConditionDetection System.ExpressionFilter Default
CDHealthy ConditionDetection System.ExpressionFilter Default

Overrideable Parameters:

IDParameterTypeSelectorDisplay NameDescription
IntervalSecondsint$Config/Interval$間隔秒數執行間隔 (秒)。
SyncTimestring$Config/SyncTime$同步處理時間監視執行時間時顯示的字串。指定為 hh:mm
TimeoutSecondsint$Config/Timeout$逾時秒數模組逾時 (秒)。
DatabaseNamestring$Config/DatabaseName$資料庫名稱資料庫的名稱。
DatabaseServerstring$Config/DatabaseServer$資料庫伺服器資料庫所在之伺服器的名稱。

Source Code:

<UnitMonitorType ID="Microsoft.ServiceManager.DataWarehouse.HighWaterMarkMonitorType" Accessibility="Public">
<MonitorTypeStates>
<MonitorTypeState ID="Healthy" NoDetection="false"/>
<MonitorTypeState ID="Unhealthy" NoDetection="false"/>
</MonitorTypeStates>
<Configuration>
<xsd:element minOccurs="1" name="Interval" type="xsd:integer"/>
<xsd:element minOccurs="1" name="SyncTime" type="xsd:string"/>
<xsd:element minOccurs="1" name="Timeout" type="xsd:integer"/>
<xsd:element minOccurs="1" name="DatabaseName" type="xsd:string"/>
<xsd:element minOccurs="1" name="DatabaseServer" type="xsd:string"/>
</Configuration>
<OverrideableParameters>
<OverrideableParameter ID="IntervalSeconds" Selector="$Config/Interval$" ParameterType="int"/>
<OverrideableParameter ID="SyncTime" Selector="$Config/SyncTime$" ParameterType="string"/>
<OverrideableParameter ID="TimeoutSeconds" Selector="$Config/Timeout$" ParameterType="int"/>
<OverrideableParameter ID="DatabaseName" Selector="$Config/DatabaseName$" ParameterType="string"/>
<OverrideableParameter ID="DatabaseServer" Selector="$Config/DatabaseServer$" ParameterType="string"/>
</OverrideableParameters>
<MonitorImplementation>
<MemberModules>
<DataSource ID="DBProbe" TypeID="Microsoft.SystemCenter.ServiceManager.Monitoring.OledbProbe">
<IntervalSeconds>$Config/Interval$</IntervalSeconds>
<SyncTime>$Config/SyncTime$</SyncTime>
<ConnectionString>Provider=SQLNCLI11;Server=$Config/DatabaseServer$;Database=$Config/DatabaseName$;Integrated Security=SSPI</ConnectionString>
<Query>SELECT dbo.fn_GetEntityChangeLogGroomingWatermark() AS HighWaterMark</Query>
<GetValue>true</GetValue>
<IncludeOriginalItem>true</IncludeOriginalItem>
<OneRowPerItem>true</OneRowPerItem>
</DataSource>
<ProbeAction ID="Script" TypeID="Windows!Microsoft.Windows.ScriptPropertyBagProbe">
<ScriptName>SCSM2012DWHighWaterMark.vbs</ScriptName>
<Arguments>$Data/Columns/Column[1]$</Arguments>
<ScriptBody><Script>'*************************************************************************
' ScriptName: SCSM2012DWHighWaterMark.vbs
'
' Purpose - Detect if the High Watermark value of the DW has correctly changed.
'
' Parameters 0 - Host Computer Principal Name
'*************************************************************************
Option Explicit
SetLocale("en-us")
Dim oAPI,strKeyRoot,principalName, oBag, iHighWaterMark


Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()

If WScript.Arguments.Count &lt;&gt; 1 then
Call oAPI.LogScriptEvent("SCSM2012DWHighWaterMark.vbs", 3000, 4, "OLEDB probe did not retrieve the High Watermark value from the DB. Terminating Script.")
Call oBag.AddValue("Status", "ERROR")
Call oBag.AddValue("MessageText","OLEDB probe did not return the High Watermark value from the DW Database. Check connectivity and Run As Profile configuration.")
Call oAPI.Return(oBag)
WScript.Quit()
End If
iHighWaterMark = CInt(WScript.Arguments(0))

'Call oAPI.LogScriptEvent("SCSM2012DWHighWaterMark.vbs", 3000, 4, "Starting query of High Watermark Value")

Dim oReg, iResult
Set oReg = GetObject("winmgmts:\\.\root\default:StdRegProv")
If Err &lt;&gt; 0 Then
Call oAPI.LogScriptEvent("SCSM2012DWHighWaterMark.vbs", 3000, 4, "Unable to bind to WMI registry provider. Terminating Script.")
Call oAPI.Return(oBag)
WScript.Quit
End if
Const HKLM = &amp;H80000002

If iHighWaterMark &lt;&gt; 0 then

Dim iValue1, iValue2, iValue3
strKeyRoot = "SOFTWARE\Microsoft\Microsoft Operations Manager\3.0"
'Attempt to write key, if it already exists existing content is preserved.
iResult = oReg.CreateKey(HKLM, strKeyRoot &amp; "\SCSMMP")
If iResult = 0 then
Dim strValueName, arrValues
strValueName = "HighWaterMarkDeltas"
iResult = oReg.GetMultiStringValue(HKLM,strKeyRoot &amp; "\SCSMMP",strValueName,arrValues)
If iResult = 2 then
arrValues = Array(CStr(0),CStr(0),CStr(iHighWaterMark))
iResult = oReg.SetMultiStringValue(HKLM,strKeyRoot &amp; "\SCSMMP",strValueName,arrValues)
If iResult = 0 then
Call oBag.AddValue("Status", "OK")
Call oBag.AddValue("MessageText","Deltas for the High Watermark do not exist. Storing todays value of " &amp; iHighWaterMark)
Else
Call oBag.AddValue("Status", "ERROR")
Call oBag.AddValue("MessageText","Error Storing delta values for High Watermark at " &amp; strKeyRoot &amp; "\SCSMMP\" &amp; strValueName)
End If
ElseIf iResult = 0 then
iValue1 = CInt(arrValues(0))
iValue2 = CInt(arrValues(1))
iValue3 = CInt(arrValues(2))
arrValues = Array(CStr(iValue2),CStr(iValue3),CStr(iHighWaterMark))
iResult = oReg.SetMultiStringValue(HKLM,strKeyRoot &amp; "\SCSMMP",strValueName,arrValues)
If iResult = 0 then
If iHighWaterMark &gt; iValue2 then
Call oBag.AddValue("Status", "OK")
Call oBag.AddValue("MessageText","Value of " &amp; iHighWaterMark &amp; " is higher than " &amp; iValue2)
Else
Call oBag.AddValue("Status", "ERROR")
Call oBag.AddValue("MessageText","Value of " &amp; iHighWaterMark &amp; " is not higher than " &amp; iValue2)
End if
Else
Call oBag.AddValue("Status", "ERROR")
Call oBag.AddValue("MessageText","Error Storing delta values for High Watermark at " &amp; strKeyRoot &amp; "\SCSMMP\" &amp; strValueName)
End If
Else
Call oBag.AddValue("Status", "ERROR")
Call oBag.AddValue("MessageText","Error Retrieving delta values for High Watermark at " &amp; strKeyRoot &amp; "\SCSMMP\" &amp; strValueName)
End If
Else
Call oBag.AddValue("Status", "ERROR")
Call oBag.AddValue("MessageText","Could not Create key in registry to store delta values at " &amp; strKeyRoot &amp; "\SCSMMP")
End if
Else
Call oBag.AddValue("Status", "ERROR")
Call oBag.AddValue("MessageText","Could not retrieve High Watermark from Datawarehouse database.")
End if

Call oAPI.Return(oBag)
'Call oAPI.LogScriptEvent("SCSM2012DWHighWaterMark.vbs", 3000, 4, "Finishing HighWaterMark Script.")
WScript.Quit()</Script></ScriptBody>
<TimeoutSeconds>300</TimeoutSeconds>
</ProbeAction>
<ConditionDetection ID="CDHealthy" TypeID="System!System.ExpressionFilter">
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="String">Property[@Name='Status']</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="String">OK</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</ConditionDetection>
<ConditionDetection ID="CDError" TypeID="System!System.ExpressionFilter">
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="String">Property[@Name='Status']</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="String">ERROR</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</ConditionDetection>
</MemberModules>
<RegularDetections>
<RegularDetection MonitorTypeStateID="Healthy">
<Node ID="CDHealthy">
<Node ID="Script">
<Node ID="DBProbe"/>
</Node>
</Node>
</RegularDetection>
<RegularDetection MonitorTypeStateID="Unhealthy">
<Node ID="CDError">
<Node ID="Script">
<Node ID="DBProbe"/>
</Node>
</Node>
</RegularDetection>
</RegularDetections>
</MonitorImplementation>
</UnitMonitorType>