Se você deseja fazer isso em todo o seu ambiente, em todos os seus bancos de dados ... e não se importa em usar o PowerShell ... Você precisará executá-lo em uma máquina que tenha pelo menos o SQL Server 2008 Management Studio instalado.
# 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}}
}
}
Conforme rotulado como o DataSpaceUsedobjeto SMO gera em "KB", você pode modificá-lo para que seja a medida de sua escolha, apenas colocando a referência abreviada para ele. Então, se eu queria "MB": $_.DataSpaceUsed/1MB.
Na função ([string[]]$server), os colchetes "[]" significam que o parâmetro aceita uma matriz de objetos. Portanto, se você tiver seus servidores listados em um arquivo, poderá chamar a função da seguinte maneira:
$list = get-content .\ServerList.txt
Get-TableSize -server $list | Out-GridView
Prefiro usar Out-GridViewinicialmente para revisar a saída e ela copia facilmente diretamente para o Excel para mim. Você também pode enviar isso para os outros formatos suportados do PowerShell, se desejar.
Exemplo com captura de tela, você também pode listar os servidores:
