Wenn Sie dies für alle Ihre Datenbanken in Ihrer gesamten Umgebung bereitstellen möchten ... und es Ihnen nichts ausmacht, PowerShell zu verwenden ... müssen Sie dies auf einem Computer ausführen, auf dem mindestens SQL Server 2008 Management Studio installiert ist.
# Load SMO
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | Out-Null
function Get-TableSize ([string[]]$server) {
foreach ($srv in $server) {
$s = New-Object 'Microsoft.SqlServer.Management.Smo.Server' $srv
$s.Databases.Tables |
? {-Not $_.IsSystemObject} |
Select @{Label="Server";Expression={$srv}},
@{Label="DatabaseName";Expression={$_.Parent}},
@{Label="TableName";Expression={$_.Name}},
@{Label="SizeKB";Expression={$_.DataSpaceUsed}}
}
}
Wie die DataSpaceUsedSMO-Objektausgaben in "KB" gekennzeichnet, können Sie dies so ändern, dass es das Maß Ihrer Wahl ist, indem Sie einfach die abgekürzte Referenz dafür eingeben. Also wenn ich "MB" wollte : $_.DataSpaceUsed/1MB.
In der Funktion ([string[]]$server)bedeuten die Klammern "[]", dass der Parameter ein Array von Objekten akzeptiert. Wenn Sie also Ihre Server in einer Datei aufgelistet haben, können Sie die Funktion folgendermaßen aufrufen:
$list = get-content .\ServerList.txt
Get-TableSize -server $list | Out-GridView
Ich bevorzuge die Out-GridViewanfängliche Verwendung , um die Ausgabe zu überprüfen, und sie lässt sich für mich problemlos direkt in Excel kopieren. Sie können dies bei Bedarf auch in den anderen unterstützten PowerShell-Formaten ausgeben.
Beispiel mit Screenshot, Sie können auch einfach die Server auflisten:
