摘要:對數據庫中的數據進行有效監控是實現數據庫系統完整性的重要途徑。該文主要闡述如何利用Windows服務對數據庫數據進行有效監控,實現了對異常情況的捕捉,并通過電子郵件服務給出警告信息,對實現系統的完整性起到了一定的保障作用。
關鍵詞:Windows服務;電子郵件服務;數據監控
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2009)36-10457-02
Monitoring Database Table by Windows Services
HU Jun-min
(School of Business Administration, Jimei University, Xiamen 361021, China)
Abstract: To achieve the integrity of database systems,it is an important way to monitor the data in database table. This paper explains how to use Windows services to monitor the database data effectively. Capture any wrong data, and then send a warning message through e-mail service. The approach plays a certain amount of protection to keep the integrity of the database system.
Key words: Windows services; Email service; data monitoring
在數據庫系統持續運行中,需要時刻關注系統自身和外界環境等可能產生的潛在影響和可能的危險,并及時予以處理。比如人力資源管理系統中的考勤管理子系統,涉及到的硬件有考勤機,如果個別考勤機由于通訊、停電等問題造成通訊故障,而后續的相關程序沒有覺查到該危險還繼續往下執行的話,就會造成數據遺漏處理的嚴重后果。通過對相應數據的監控是能夠避免類似風險的。本文主要探討如何利用Windows服務實現對數據庫數據的有效監控。
1 Windows服務淺析
在Windows系統中一直運行著多種類型的服務。如Windows time、SQL Server、Internet Information Server(IIS)等程序(當然服務的類型與你安裝的程序有關),這些都是Windows服務。使用Windows 服務可以持續地監控計算機上所發生的每一事件或執行計算機上的每一個任務。例如,通過手機定期收到的股票信息大多也是通過股價播報系統服務來實現的。信息供應商從web站點上收集到股票結果以及股市行情,并把這些信息以電子郵件的形式發放給每一個客戶。在這個系統里,信息將每幾分鐘或每幾秒鐘自動更新一次。
其實,Windows服務是一個程序,當我們啟動操作系統后不需要用戶登錄該系統時,該程序就可以自動啟動(需要將該服務的啟動類型設置為自動啟動)。當應用程序在后臺運行時,我們并不需要和該應用程序進行任何交互。
通過VS.NET平臺,可以輕易地創建Windows服務。在創建一個服務應用程序時,主要是定義一些代碼來控制服務開始和停止的時間,向服務發出什么命令,以及命令被接收后將執行什么樣的操作。這些都是通過編寫服務的事件代碼來實現的。例如:OnStop和OnStart事件。通過OnStart事件代碼告訴應用程序在程序啟動時需要執行哪些命令。這有點像一個控制臺應用程序中的Main過程,它是我們的啟動代碼。因此,一旦放入了服務啟動程序,我們想要發生的操作將要被執行。
2 如何實現及部署監控
數據庫監控范圍很多,比如硬盤空間、系統性能等,監控方法也很多。本文要探討的是如何監控數據庫中的敏感數據。下面就以人力資源管理系統中的考勤管理子系統為例,其對應數據處理的簡要流程有:
步驟1. 員工在考勤機上打卡;
步驟2. 系統自動收集考勤機的考勤信息;
步驟3. 值班人員第二天早上運行考勤邏輯處理程序。
很顯然風險在于執行步驟3。如果系統沒有收集到所有考勤機的考勤信息,那么就會造成部分員工曠工,或缺卡。如何有效地監控考勤機呢?我們只需要在考勤機內的程序增加一個功能:定時發送信息到數據表,然后編寫一個Windows服務對這個數據表的數據進行監控即可。其中核心的程序如下:
Dim WS_CheckTerminal As New System.Threading.Thread(AddressOf JustDoIt)
Protected Overrides Sub OnStart(ByVal args() As String)
Me.GetServicePara():主要功能是取系統的配置參數。
WS_CheckTerminal.Start()
End Sub
Private Sub JustDoIt()
While True
CheckData()
Dim OBJ As New ErrorLog()
End While
End Sub
其中,需要檢查的邏輯就是存放在CheckData()函數中。同時,對任何捕捉到的異常信息(如某臺考勤機出現故障,該考勤機就沒有正確發送信息到指定表。)必須能及時、方便的通知值班人員。我們可以使用電子郵件進行異常信息發布。
在.NET中,可以通過MailMessage、MailAttathment和SmtpMail等類對象使用電子郵件服務:
·MailMessage類用于建立一個電子郵件信息,它定義將把哪些信息、信息主題、優先權及信息的附件發送給誰。其中,相應的郵件信息可以存放在配置文件中。
·MailAttachment類用來定義伴隨消息一起發送的附件列表。
·SmtpMail類為發送信息提供實際機制,它使用了Send方法,并把MailMessage對象作為它的一個參數。
Private Sub SendMail(ByVal subject As String, ByVal a_SendFrom As String, ByVal a_SendTo As String, ByVal a_CCTo As String, ByVal message As String, Optional ByVal FileName As String = \"\")
Try
Dim mail As New MailMessage()
Dim evg As New ErrorLog()
Dim smtpMail As New System.Net.Mail.SmtpClient
SmtpMail.Host = GetConfig(ConfigType.Smtp)
SmtpMail.Send(GetConfig(ConfigType.Sender), GetConfig(ConfigType.SendTo), subject, message)
Catch ex As Exception
Throw ex
End Try
End Sub
我們必須在計算機中安裝和配置SMTP(簡單的郵件傳輸協議,Simple Mail Transfer Protocol)郵件服務。
這樣,才能使用.NET中的電子郵件服務。
此外,Windows服務應用程序不能在IDE或命令行中運行,它們必須安裝到Windows環境里,這樣才能控制這些服務應用程序。我們可以使用一個安裝程序,或使用InstallUtil.exe命令行實用程序安裝該服務。
3 結論
如何實現對敏感數據進行有效監控是一項非常重要而又艱巨的任務。通過Windows服務可以實現對數據庫數據的有效監控,并通過電子郵件服務及時將監控到的異常信息發送給相關的管理人員。由于Windows服務采用了線程技術,其占用系統資源少、執行效率高,是一個簡單有效的方法。實際工作中,可以先確定哪些是數據庫系統中的敏感數據,然后對這些數據進行監控,這對實現系統的完整性起到了一定的保障作用。
參考文獻:
[1] Barwell.F,Blair.R,et al.VB.NET高級編程[M].康博,譯.北京:清華大學出版社,2002.
[2] Bill.E,Hollis.B et al.VB 2005 .NET 3.0高級編程[M].楊浩,譯.5版.北京:清華大學出版社,2008.