Módulo Fonte de Dados de Espaço Livre no Banco de Dados do OpsMgr

Microsoft.SystemCenter.OpsMgrDBPercentFreeSpaceProvider (DataSourceModuleType)

Esse módulo recupera o espaço livre no Banco de Dados Operacional.

Element properties:

TypeDataSourceModuleType
IsolationAny
AccessibilityInternal
RunAsMicrosoft.SystemCenter.DatabaseWriteActionAccount
OutputTypeSystem.PropertyBagData

Member Modules:

ID Module Type TypeId RunAs 
DS DataSource Microsoft.Windows.TimedScript.PropertyBagProvider Default

Overrideable Parameters:

IDParameterTypeSelectorDisplay NameDescription
IntervalSecondsint$Config/IntervalSeconds$Intervalo em Segundos
TimeoutSecondsint$Config/TimeoutSeconds$Tempo Limite (segundos)

Source Code:

<DataSourceModuleType ID="Microsoft.SystemCenter.OpsMgrDBPercentFreeSpaceProvider" Accessibility="Internal" RunAs="SCLibrary!Microsoft.SystemCenter.DatabaseWriteActionAccount" Batching="false">
<Configuration>
<xsd:element name="IntervalSeconds" type="xsd:integer"/>
<xsd:element name="DatabaseServerName" type="xsd:string"/>
<xsd:element name="DatabaseName" type="xsd:string"/>
<xsd:element name="TimeoutSeconds" type="xsd:int"/>
</Configuration>
<OverrideableParameters>
<OverrideableParameter ID="IntervalSeconds" Selector="$Config/IntervalSeconds$" ParameterType="int"/>
<OverrideableParameter ID="TimeoutSeconds" Selector="$Config/TimeoutSeconds$" ParameterType="int"/>
</OverrideableParameters>
<ModuleImplementation Isolation="Any">
<Composite>
<MemberModules>
<DataSource ID="DS" TypeID="Windows!Microsoft.Windows.TimedScript.PropertyBagProvider">
<IntervalSeconds>$Config/IntervalSeconds$</IntervalSeconds>
<SyncTime/>
<ScriptName>GetOpsMgrDBPercentFreeSpace.vbs</ScriptName>
<Arguments>$Config/DatabaseServerName$ $Config/DatabaseName$</Arguments>
<ScriptBody><Script>

'Copyright (c) Microsoft Corporation. All rights reserved.
' Parameters that should be passed to this script
' 0 DatabaseServerName
' 1 DatabaseName

Option Explicit

SetLocale("en-us")


Const SQL_DISCOVERY_SUCCESS = 0

Dim oArgs, databaseServerName, databaseName
Set oArgs = WScript.Arguments
If oArgs.Count &lt;&gt; 2 Then
Wscript.Quit -1
End If

databaseServerName = oArgs(0)
databaseName = oArgs(1)

Dim oAPI, oSQLPropertyBag

Set oAPI = CreateObject("MOM.ScriptAPI")
set oSQLPropertyBag = oAPI.CreatePropertyBag()

'Set the connection string
Dim connectionString
connectionString = "Provider=sqloledb;Server=" &amp; _
databaseServerName &amp; ";" &amp; _
"Integrated Security=SSPI;Initial Catalog=" &amp; databaseName

If GetDBFreeSpace(connectionString, oSQLPropertyBag) = SQL_DISCOVERY_SUCCESS Then Call oAPI.Return(oSQLPropertyBag)

WScript.Quit()

Function GetDBFreeSpace(ByVal connectionString, ByVal oSQLPropertyBag)

Dim cnADOConnection
Set cnADOConnection = CreateObject("ADODB.Connection")

cnADOConnection.Open connectionString
cnADOConnection.CommandTimeout = 300

Dim oResults, dDBUnallocatedSpace, dDBPercentFreeSpace
Set oResults = cnADOConnection.Execute("exec sp_spaceused")
dDBUnallocatedSpace = ConvertSizeStringToNumber(Trim(oResults(2)))

Dim oResultsSize, dbDataSize
Set oResultsSize = cnADOConnection.Execute("exec sp_helpfile")

'Covert from Kb to Mb
dbDataSize = ConvertSizeStringToNumber(Trim(oResultsSize(4)))
dbDataSize = dbDataSize / 1024

dDBPercentFreeSpace = Round((dDBUnallocatedSpace / dbDataSize) * 100, 2)

oSQLPropertyBag.AddValue "DBPercentFreeSpace", dDBPercentFreeSpace

Set oResults = nothing
cnADOConnection.Close
GetDBFreeSpace = SQL_DISCOVERY_SUCCESS

End Function

Function ConvertSizeStringToNumber(sSizeString)
' Remove the MB and return a valid double
sSizeString = Replace(sSizeString, " KB", "")
sSizeString = Replace(sSizeString, " MB", "")
ConvertSizeStringToNumber = CDbl(sSizeString)
End Function

</Script></ScriptBody>
<TimeoutSeconds>$Config/TimeoutSeconds$</TimeoutSeconds>
</DataSource>
</MemberModules>
<Composition>
<Node ID="DS"/>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.PropertyBagData</OutputType>
</DataSourceModuleType>