これをすべての環境で、すべてのデータベースで取得したい場合、そしてPowerShellを使用してもかまいません...これは、少なくともSQL Server 2008 Management Studioがインストールされているマシンから実行する必要があります。
# 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}}
}
}
DataSpaceUsed
SMOオブジェクト出力に「KB」のラベルが付けられているので、省略形の参照を置くだけで、これを変更して任意の測定値にすることができます。だから私は「MB」を望んだ場合:$_.DataSpaceUsed/1MB
。
関数([string[]]$server)
では、角かっこ「[]」は、パラメータがオブジェクトの配列を受け入れることを意味します。したがって、サーバーがファイルにリストされている場合は、次のように関数を呼び出すことができます。
$list = get-content .\ServerList.txt
Get-TableSize -server $list | Out-GridView
私Out-GridView
は最初に出力を確認することを好んでおり、Excelに直接簡単にコピーできます。必要に応じて、これをPowerShellの他のサポートされている形式に出力することもできます。
スクリーンショットの例、サーバーを一覧表示することもできます。