隨着時間的推移,咱們的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; }
最終但咱們的空間不知足檢查要求的時候,咱們就能夠收到郵件提醒了