Nếu bạn muốn có được điều này trên tất cả môi trường của mình, cho tất cả các cơ sở dữ liệu của bạn ... và bạn không phiền khi sử dụng PowerShell ... Bạn sẽ cần chạy nó từ một máy ít nhất đã cài đặt 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}}
}
}
Như được gắn nhãn DataSpaceUsedđầu ra đối tượng SMO trong "KB", bạn có thể sửa đổi đây thành phép đo mà bạn chọn bằng cách chỉ đưa tham chiếu viết tắt cho nó. Vì vậy, nếu tôi muốn "MB" : $_.DataSpaceUsed/1MB.
Trong hàm ([string[]]$server), dấu ngoặc "[]" có nghĩa là tham số chấp nhận một mảng các đối tượng. Vì vậy, nếu bạn có máy chủ của mình được liệt kê trong một tệp, bạn có thể gọi hàm như vậy:
$list = get-content .\ServerList.txt
Get-TableSize -server $list | Out-GridView
Tôi thích sử dụng Out-GridViewban đầu để xem lại đầu ra và nó dễ dàng sao chép vào Excel cho tôi. Bạn cũng có thể xuất tệp này sang các định dạng được hỗ trợ khác của PowerShell nếu muốn.
Ví dụ với ảnh chụp màn hình, bạn cũng có thể liệt kê các máy chủ ra:
