【原創】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 博客推薦欄中快速看到這些文章,感謝!。

相關文章
相關標籤/搜索