KAS*_*DBA 5 sql-server disk-space sql-server-2012
有没有一种方法可以让我在 sql server 2012 中获取报告或创建自定义报告,它可以每天两次或一次更新我列出的驱动器的可用磁盘空间和实际磁盘空间。
我需要这个是因为我的客户需要查看一个月内的磁盘空间使用情况才能看到所需的模式。
谢谢!
小智 8
我已经写了报告,并实际发出警报,让客户在他们的测试和生产环境中监控多台服务器。我基本上使用带有 PowerShell 步骤的 SQL 代理作业将磁盘信息 ( win32_volume
)提取到一些表中。
然后我决定创建另一个 PowerShell 步骤,返回并检查可用空间是否在配置的阈值内(存储在表中)。我们采用这种方法是因为它更容易设置和快速编写。为通过电子邮件发送的 HTML 报告编写代码也比尝试在 T-SQL 中编写代码更简洁。
您在 SQL Server 中有 DMV 来获取磁盘空间使用情况(例如sys.dm_os_volume_stats
),但上面的 PowerShell 选项允许我们监视在给定服务器上找到的所有驱动器。现在需要注意的是,您必须为 PowerShell 执行创建一个代理帐户,并且该帐户应具有适当的权限。
编辑
刚刚从迈克的评论中意识到我的个人资料中有一个功能,它的写法与他的有点不同,但这正是对我有用的:
function Get-DiskSpace($server,[switch]$all)
{
$servers = gc C:\Users\smelton\Documents\WindowsPowerShell\OSList.txt
if ($all)
{
foreach ($s in $servers)
{
Get-WmiObject -Class Win32_Volume -ComputerName $s |
Select-Object @{Label='ServerName';Expression={$s}},
DriveLetter,
Label,
@{Label='GB Capacity';Expression={"{0:N2}" -f($_.Capacity/1GB)}},
@{Label='GB FreeSpace';Expression={"{0:N2}" -f($_.freespace/1GB)}},
@{Label='% Free';Expression={"{0:N2}" -f($_.freespace/$_.Capacity)}} |
Sort-Object -Property DriveLetter
} #end foreach
}
else
{
Get-WmiObject -Class Win32_Volume -ComputerName $server | Where {$_.DriveType -eq 3} |
Select-Object DriveLetter, Label, @{Label='GB Capacity';Expression={"{0:N2}" -f($_.Capacity/1GB)}},
@{Label='GB FreeSpace';Expression={"{0:N2}" -f($_.freespace/1GB)}},
@{Label='% Free';Expression={"{0:N2}" -f($_.freespace/$_.Capacity)}} |
Sort-Object -Property DriveLetter
} #end if/else
} #end Get-DiskSpace
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1349 次 |
最近记录: |