随着时间的推移,咱们的DW会愈来愈大,也就意味着磁盘空间会愈来愈小,那若是哪一天留意不当,就会形成磁盘空间的不足而致使ETL失败,最终影响咱们的系统的数据正确性和使用,更严重的有可能致使物理磁盘损坏,因此对于物理磁盘空间的监控必不可少。windows
下面的方法就是利用SSIS中的WMI数据读取器任务去天天查询物理磁盘的空余空间,当不足时发邮件以提示管理员。服务器
新建变量ide
变量名 | 类型 | 用途 |
DiskUsageRet | string | 用于存储结果集 |
Flag | int | 用于判断磁盘空间的剩余空间是否不知足要求 |
在[WmiConnection]栏,新建个WMI链接管理器工具
在[服务和命名空间]选项中,[服务器名称]输入你要监视的服务器的\\ + IP地址,命名空间默认便可测试
P.S:若是[服务器名称]为本机地址,则必须使用windows身份验证,若是使用用户凭据,则有可能会出现以下图错误,若是是远程的服务器地址,则须要使用相应的用户名和密码登陆ui
配置完毕后点击测试,看是否验证经过spa
该语句是查询对应磁盘的剩余空间,剩余空间单位是Bit,因此须要咱们后面自行换算。固然Win32_LogicalDisk有不少其余的字段,你能够输入select * from Win32_LogicalDisk,而且在对应的OutputType设置[数据表],在OverwriteDestination设置[覆盖目标],并将结果映射到变量中,最后用脚本组件,查看变量中的返回结果,你就能够大概知道其中的关键字段有哪些,表明何种含义,如下是本人查询结果,所有字段:3d
全部字段 | Access, Availability, BlockSize, Caption, Compressed, ConfigManagerErrorCode, ConfigManagerUserConfig, CreationClassName, Description, DeviceID, DriveType, ErrorCleared, ErrorDescription, ErrorMethodology, FileSystem, FreeSpace, InstallDate, LastErrorCode, MaximumComponentLength, MediaType, Name, NumberOfBlocks, PNPDeviceID, PowerManagementCapabilities, PowerManagementSupported, ProviderName, Purpose, QuotasDisabled, QuotasIncomplete, QuotasRebuilding, Size, Status, StatusInfo, SupportsDiskQuotas, SupportsFileBasedCompression, SystemCreationClassName, SystemName, VolumeDirty, VolumeName, VolumeSerialNumber |
每一个字段对应的值 | 0, , , C:, False, , , Win32_LogicalDisk, Local Fixed Disk, C:, 3, , , , NTFS, 13594468352, , , 255, 12, C:, , , , , , , True, False, False, 80533680128, , , True, True, Win32_ComputerSystem, JOHN-PC, False, OS, F636E868 |
关键属性讲解:code
WmiConnection | 链接WMI服务器对象,须要咱们建立一个WMI链接 |
WqlQuerySourceType | 查询语句存放类型(地方) |
WqlQuerySource | 查询语句,根据存放类型的不一样,这里会有相应的变换,若是存放类型选择文件,这里就须要选择对应的语句文件 |
OutputType | 查询结果输入形式。 数据表:一个完整的数据表结果集 属性名称和值:以一个属性名称和一个值一行的结果集形式返回,如:FreeSpace, 13587701760 属性值:单纯范围查询字段的值集合 |
OverWriteDestination | 写入目标的方式。 保留原始值:保留目标中的原始值 覆盖目标:将结果覆盖目标中的值 追加到目标:将结果值追加到目标 |
DestinationType | 目标类型。 变量:结果保存到变量 文件链接:将结果保存到文件 |
Destination | 目标对象 根据DestinationType不一样,设置不一样 |
编辑脚本,其中的main方法以下:orm
public void Main() {
double unit = 1024 * 1024 * 1024; //查询的space是以b为单位的,必须将其换算成G,这里判断是否小于20G double diskspace = Convert.ToDouble(Dts.Variables["DiskUsageRet"].Value) / unit / 20; if (diskspace < 1) { Dts.Variables["Flag"].Value = 1; // MessageBox.Show("空间不足20G", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); } else {
Dts.Variables["Flag"].Value = 0; // MessageBox.Show("空间大于20G", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } //MessageBox.Show(Dts.Variables["DiskUsageRet"].Value.ToString()); Dts.TaskResult = (int)ScriptResults.Success; }
最后咱们在写一个发送邮件的脚本,对于结果发送邮件便可
public void Main() { MailMessage mymail = new MailMessage("xxxx@126.com", "xxxx@126.com", "服务器C盘空间不足", "服务器C盘空间不足,请检查"); SmtpClient smtp = new SmtpClient("smtp.126.com"); smtp.Credentials = new NetworkCredential("xxxx@126.com", "密码"); smtp.Send(mymail); Dts.TaskResult = (int)ScriptResults.Success; }
最终但咱们的空间不知足检查要求的时候,咱们就能够收到邮件提醒了