kingbosster 发表于 2018-9-1 12:34:54

PowerShell:30行代码轻松实现SQL Server数据库容量监控

$MonitorServer=''  
$servers=gc F:\DBA\chkservers.txt
  
$today=Get-Date
  
$log_date=$today.toString('yyyyMMdd')
  
$yesterday=$today.adddays(-1)
  
$compare_date=$yesterday.toString('yyyyMMdd')
  
Foreach($server in $servers){
  
if($server.length -gt 0){
  
$results=invoke-sqlcmd "exec sp_msforeachdb 'if(db_id(''?'') not in(1,2,3,4)) begin exec [?]..sp_spaceused end'" -ServerInstance $server
  
For($n=0;$n -lt $results.length;$n=$n+2){
  
$db_name=$results[$n].database_name
  
$db_total_size=$results[$n].database_size
  
$db_free_size=$results[$n].'unallocated space'
  
$total_size=$db_total_size.substring(0,$db_total_size.length-3)
  
$free_size=$db_free_size.substring(0,$db_free_size.length-3)
  
$today_use_size=$total_size-$free_size
  
$count=invoke-sqlcmd "select count(1) as count from DBMonitor..$server where LOG_DATE='$compare_date' and DB_NAME='$db_name'" -ServerInstance $MonitorServer
  
if($count.count -gt 0){
  
$comp_results=invoke-sqlcmd "select MAX(USE_SIZE_MB) as USE_SIZE_MB from DBMonitor..$server where LOG_DATE='$compare_date' and DB_NAME='$db_name'" -ServerInstance $MonitorServer
  
$yesterday_use_size=$comp_results.USE_SIZE_MB
  
$growth_size=$today_use_size-$yesterday_use_size
  
}
  
else{
  
$growth_size=0
  
}
  
invoke-sqlcmd "insert into DBMonitor..$server select '$log_date','$db_name',$total_size,$today_use_size,$free_size,$growth_size" -ServerInstance $MonitorServer
  
}
  
}
  
}


页: [1]
查看完整版本: PowerShell:30行代码轻松实现SQL Server数据库容量监控