1、背景

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

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

2、步骤

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

新建变量

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

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

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

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

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

2.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

关键属性讲解:

WmiConnection 连接WMI服务器对象,需要我们创建一个WMI连接
WqlQuerySourceType 查询语句存放类型(地方)
WqlQuerySource 查询语句,根据存放类型的不同,这里会有相应的变换,如果存放类型选择文件,这里就需要选择对应的语句文件
OutputType 查询结果输入形式。
数据表:一个完整的数据表结果集

属性名称和值:以一个属性名称和一个值一行的结果集形式返回,如:FreeSpace, 13587701760

属性值:单纯范围查询字段的值集合

OverWriteDestination 写入目标的方式。

保留原始值:保留目标中的原始值

覆盖目标:将结果覆盖目标中的值

追加到目标:将结果值追加到目标

DestinationType 目标类型。

变量:结果保存到变量

文件连接:将结果保存到文件

Destination 目标对象

根据DestinationType不同,设置不同

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

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

public void Main()
{
double unit =  *  * ;
//查询的space是以b为单位的,必须将其换算成G,这里判断是否小于20G
double diskspace = Convert.ToDouble(Dts.Variables["DiskUsageRet"].Value) / unit / ;
if (diskspace < )
{
Dts.Variables["Flag"].Value = ;
// MessageBox.Show("空间不足20G", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
else
{
            Dts.Variables["Flag"].Value = ;
// 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;
}

最终但我们的空间不满足检查要求的时候,我们就可以收到邮件提醒了

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

[原创]SSIS-WMI 数据读取器任务:监控物理磁盘空间的更多相关文章

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

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

  2. Extjs的数据读取器store和后台返回类型简单解析

    工作中用到了Extjs,从后台获取数据的时候,用到了extjs自己的Ext.data.store方法,然后封装了ExtGridReturn方法, 目的:前台用到Ext.data.store读取从后台传 ...

  3. 数据读取器对象SqlDataReader与数据适配器对象SqlDataAdapter的使用

        一.数据读取器对象SqlDataReader的使用      如何执行有查询结果集的select语句. 1.SqlDataReader对象的作用:当包含select语句的SqlCommad对象 ...

  4. c#中使用数据读取器读取查询结果

    今天有时间了. 在看<c#数据库入门经典> ,总结数据读取器查询结果. 针对单个结果集使用读取器,有3中方法: String connString =..; String sql =@&q ...

  5. 如何在ADO中使用数据读取器(DataReader)读取数据

    DbDataReader类型(实现IDataReader接口)是从数据源获取信息最简单也最快速的方法. 数据读取器是只读向前的效据流.井且一次返回一条记录.因此.只有当你向数据源提交 Select 查 ...

  6. 调用EF的存储过程报“存储区数据提供程序返回的数据读取器所具有的列数对于所请求的查询不够”问题

    在运用Entity Framework调用存储过程的时候,遇到"调用EF的存储过程报"调用EF的存储过程报“存储区数据提供程序返回的数据读取器所具有的列数对于所请求的查询不够”问题 ...

  7. zabbix监控windows磁盘空间

    监控windows磁盘空间,不是百分比. 当windows系统添加相应的windows模板后,会自动生成检测系统空间的监控项,在应用集(Filessystem)里面,Free disk space o ...

  8. datasets数据读取器

    #切分数据集 img_dir = train_parameters['img_dir'] file_name = train_parameters['file_name'] df = pd.read_ ...

  9. contos7 使用zabbix监控物理磁盘状态实例

    一.系统环境: 物理机:dell R640 操作系统:centos7 二.安装MegaCli 监控主要是通过MegaCli 软件获取到物理主机的read及硬盘相关状态信息.然后通过zabbix的自定义 ...

随机推荐

  1. Linux文件系统 (Ubunt)

    Linux 文件系统是linux的一个十分基础的知识,同时也是学习linux的必备知识. 本文将站在一个较高的视图来了解linux的文件系统,主要包括了linux磁盘分区和目录.挂载基本原理.文件存储 ...

  2. 【原创】开发Kafka通用数据平台中间件

    开发Kafka通用数据平台中间件 (含本次项目全部代码及资源) 目录: 一. Kafka概述 二. Kafka启动命令 三.我们为什么使用Kafka 四. Kafka数据平台中间件设计及代码解析 五. ...

  3. SQL获取变量类型以及变量最大长度

    DECLARE @Temp nvarchar(1050)='' SELECT CAST(SQL_VARIANT_PROPERTY(@Temp, 'BaseType') AS VARCHAR(50))S ...

  4. 经典CSS实现三角形图标原理解析

    前言: 在写这篇文章之前,我也看过很多前端大神写的代码,But,都只是粘贴代码和给出显示效果,对于初学者来说大家都喜欢刨根问底,为什么要这样做呢? 接下来就让我给大家分享一下我对CSS实现三角形的理解 ...

  5. HDU3657Game(最大流)

    这几天敲了几道最大流的问题,发现网络流真是模板算法啊.... 敲来敲去敲了几遍,基本每遍都敲得让人灰心,但同时也感受到了网络流的强大所在,这是我做网络流的第一题,,本以为看了一遍小白书的代码差不多理解 ...

  6. js date string parse

    function dateParse(dStr){ //var dStr = '2016-1-26 0:7:14'; var d = dStr.split(' ')[0].split('-'); va ...

  7. 乱侃c++

    就在刚才我感觉c++真的好复杂,函数重载,多态,虚函数,虚函数表,模版,继承等一大坨东西好恶心,c++既然完全支持C语言,当然是把它的优缺点统统接下了,C语言中指针本身并不太难,是C语言的精华,当年刚 ...

  8. lighttpd fastcgi的搭建

    公司很久以前有个task需要在板子上搭建个webserver以响应局域网内手机的请求. 以前是用lighttpd plugin实现的,后来仔细想想用fast cgi来弄也可以. 在install li ...

  9. C:函数指针、回调函数

    函数指针 是一个指针,指向函数的指针,指针存放的都是地址,所以函数指针存放的是函数的地址.数组名就是数组的首地址,函数名就是函数的首地址.与数组类似. 代码demo int (*p) (int ,in ...

  10. 无责任Windows Azure SDK .NET开发入门篇三[使用Azure AD 管理用户信息--3.3 Details用户详细信息]

    3.3 Details用户详细信息 用户详细信息是通过objectId获取.代码如下 public async Task<ActionResult> Details(string obje ...