【原创】SSIS-WMI 数据读取器任务:监控物理磁盘空间

一、背景

      随着时间的推移,咱们的DW会愈来愈大,也就意味着磁盘空间会愈来愈小,那若是哪一天留意不当,就会形成磁盘空间的不足而致使ETL失败,最终影响咱们的系统的数据正确性和使用,更严重的有可能致使物理磁盘损坏,因此对于物理磁盘空间的监控必不可少。windows

     下面的方法就是利用SSIS中的WMI数据读取器任务去天天查询物理磁盘的空余空间,当不足时发邮件以提示管理员。服务器

     image

二、步骤

2.一、新建一个SSIS包,从工具栏上拖拉一个[WMI 数据读取任务]到控制流,双击编辑组件属性

 

新建变量ide

变量名 类型 用途
DiskUsageRet string 用于存储结果集
Flag int 用于判断磁盘空间的剩余空间是否不知足要求

在[WmiConnection]栏,新建个WMI链接管理器工具

 image

在[服务和命名空间]选项中,[服务器名称]输入你要监视的服务器的\\ + IP地址,命名空间默认便可测试

P.S:若是[服务器名称]为本机地址,则必须使用windows身份验证,若是使用用户凭据,则有可能会出现以下图错误,若是是远程的服务器地址,则须要使用相应的用户名和密码登陆ui

1

配置完毕后点击测试,看是否验证经过spa

2.二、在在组件的属性编辑界面,[WMI选项]中,设置[WqlQuerySource]为如下语句

SELECT FreeSpace FROM Win32_LogicalDisk where DriveType= 3 and DeviceID='C:'

该语句是查询对应磁盘的剩余空间,剩余空间单位是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

 

image

关键属性讲解:code

WmiConnection 链接WMI服务器对象,须要咱们建立一个WMI链接
WqlQuerySourceType 查询语句存放类型(地方)
WqlQuerySource 查询语句,根据存放类型的不一样,这里会有相应的变换,若是存放类型选择文件,这里就须要选择对应的语句文件
OutputType 查询结果输入形式。
数据表:一个完整的数据表结果集
属性名称和值:以一个属性名称和一个值一行的结果集形式返回,如:FreeSpace, 13587701760
属性值:单纯范围查询字段的值集合
OverWriteDestination 写入目标的方式。
保留原始值:保留目标中的原始值
覆盖目标:将结果覆盖目标中的值
追加到目标:将结果值追加到目标
DestinationType 目标类型。
变量:结果保存到变量
文件链接:将结果保存到文件
Destination 目标对象
根据DestinationType不一样,设置不一样

2.三、将咱们的查询结果保存到变量以后,咱们就能够利用脚本组件,判断变量中的结果,以检视磁盘查询的空间是否知足要求

image

编辑脚本,其中的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;
}

最终但咱们的空间不知足检查要求的时候,咱们就能够收到邮件提醒了

image

若是以为这篇文章看了对您有帮助,请点击右下方按钮【推荐
以方便他人在 BITechStack 博客推荐栏中快速看到这些文章,感谢!。

相关文章
相关标签/搜索