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

背景:

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

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

     image

步骤:

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

新建变量

变量名类型用途
DiskUsageRetstring用于存储结果集
Flagint用于判断磁盘空间的剩余空间是否不满足要求

在[WmiConnection]栏,新建个WMI连接管理器

 image

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

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

1

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

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

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

该语句是查询对应磁盘的剩余空间,剩余空间单位是Bit,所以需要我们后面自行换算。当然Win32_LogicalDisk有很多其他的字段,你可以输入select * from Win32_LogicalDisk,并且在对应的OutputType设置[数据表],在OverwriteDestination设置[覆盖目标],并将结果映射到变量中,最后用脚本组件,查看变量中的返回结果,你就可以大概知道其中的关键字段有哪些,代表何种含义,以下是本人查询结果,全部字段:

所有字段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

关键属性讲解:

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

3、将我们的查询结果保存到变量之后,我们就可以利用脚本组件,判断变量中的结果,以检视磁盘查询的空间是否满足要求。

image

编辑脚本,其中的main方法如下:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值