PowerShell:30行代码轻松实现SQL Server数据库容量监控
2017-11-08 17:35
567 查看
本文介绍如何用PowerShell脚本实现SQL Server数据库容量监控
闲话就不多说,直入主题
一、建表
为每台服务器创建一个表,用于记录服务器各个数据库的容量,以服务器名作为表名。
二、数据收集
要点:
1. 主要利用sp_msforeachdb、sp_spaceused循环获取各数据库容量数据,简化代码
2. today_use_size = total_szie - free_size
3. growth_szie = today_use_size - yesterday_use_size
4. chkservers.txt存放服务器名
5. 创建作业,每天定时执行(如需调整为每周、月执行,修改$yesterday=$today.adddays(-1)及作业频率即可)
效果图:
闲话就不多说,直入主题
一、建表
为每台服务器创建一个表,用于记录服务器各个数据库的容量,以服务器名作为表名。
CREATE TABLE table_name( [LOG_DATE] [varchar](20) NULL, [DB_NAME] [varchar](50) NULL, [TOTAL_SIZE_MB] [numeric](15, 2) NULL, [USE_SIZE_MB] [numeric](15, 2) NULL, [FREE_SIZE_MB] [numeric](15, 2) NULL, [DAILY_GROWTH_MB] [numeric](15, 2) NULL DEFAULT ((0)) )
二、数据收集
要点:
1. 主要利用sp_msforeachdb、sp_spaceused循环获取各数据库容量数据,简化代码
2. today_use_size = total_szie - free_size
3. growth_szie = today_use_size - yesterday_use_size
4. chkservers.txt存放服务器名
5. 创建作业,每天定时执行(如需调整为每周、月执行,修改$yesterday=$today.adddays(-1)及作业频率即可)
$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 } } }
效果图:
相关文章推荐
- PowerShell连接SQL SERVER数据库进行操作的实现代码
- 如何使用Powershell脚本监控Exchange2010(三) Archive邮箱容量和使用情况的发布
- 2句代码轻松实现WPF最大化不遮挡任务栏并且具有边框调节效果
- PowerShell脚本清理指定天数前的临时文件夹实现代码
- 一行代码轻松实现拖动效果
- 一行代码轻松实现拖动效果
- python装饰器实现对异常代码出现进行监控
- 仅30行代码实现Javascript中的MVC
- 网页IE轻松调用VLC播放器实现监控(组件+方法大全)【转】
- 如何使用Powershell脚本监控Exchange2010(三) Archive邮箱容量和使用情况的发布
- 代码轻松实现wordpress彩色标签云
- SQL Server数据库附加后只读或失败解决方法及代码实现
- VB.NET轻松实现任务栏程序 [不到10行代码]
- Android 轻松实现语音识别详解及实例代码
- zookeeper实现服务器端监控代码实现
- Powershell 之批量获取文件大小的实现代码
- MSMTP+MUTT轻松实现服务器资源监控
- PYQT学习笔记-30行代码实现表达式计算器
- FindFirstChangeNotification FindNextChangeNotification实现应用层文件监控的代码分析