摘要:對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行有效監(jiān)控是實(shí)現(xiàn)數(shù)據(jù)庫(kù)系統(tǒng)完整性的重要途徑。該文主要闡述如何利用Windows服務(wù)對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行有效監(jiān)控,實(shí)現(xiàn)了對(duì)異常情況的捕捉,并通過(guò)電子郵件服務(wù)給出警告信息,對(duì)實(shí)現(xiàn)系統(tǒng)的完整性起到了一定的保障作用。
關(guān)鍵詞:Windows服務(wù);電子郵件服務(wù);數(shù)據(jù)監(jiān)控
中圖分類號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):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
在數(shù)據(jù)庫(kù)系統(tǒng)持續(xù)運(yùn)行中,需要時(shí)刻關(guān)注系統(tǒng)自身和外界環(huán)境等可能產(chǎn)生的潛在影響和可能的危險(xiǎn),并及時(shí)予以處理。比如人力資源管理系統(tǒng)中的考勤管理子系統(tǒng),涉及到的硬件有考勤機(jī),如果個(gè)別考勤機(jī)由于通訊、停電等問(wèn)題造成通訊故障,而后續(xù)的相關(guān)程序沒(méi)有覺(jué)查到該危險(xiǎn)還繼續(xù)往下執(zhí)行的話,就會(huì)造成數(shù)據(jù)遺漏處理的嚴(yán)重后果。通過(guò)對(duì)相應(yīng)數(shù)據(jù)的監(jiān)控是能夠避免類似風(fēng)險(xiǎn)的。本文主要探討如何利用Windows服務(wù)實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)的有效監(jiān)控。
1 Windows服務(wù)淺析
在Windows系統(tǒng)中一直運(yùn)行著多種類型的服務(wù)。如Windows time、SQL Server、Internet Information Server(IIS)等程序(當(dāng)然服務(wù)的類型與你安裝的程序有關(guān)),這些都是Windows服務(wù)。使用Windows 服務(wù)可以持續(xù)地監(jiān)控計(jì)算機(jī)上所發(fā)生的每一事件或執(zhí)行計(jì)算機(jī)上的每一個(gè)任務(wù)。例如,通過(guò)手機(jī)定期收到的股票信息大多也是通過(guò)股價(jià)播報(bào)系統(tǒng)服務(wù)來(lái)實(shí)現(xiàn)的。信息供應(yīng)商從web站點(diǎn)上收集到股票結(jié)果以及股市行情,并把這些信息以電子郵件的形式發(fā)放給每一個(gè)客戶。在這個(gè)系統(tǒng)里,信息將每幾分鐘或每幾秒鐘自動(dòng)更新一次。
其實(shí),Windows服務(wù)是一個(gè)程序,當(dāng)我們啟動(dòng)操作系統(tǒng)后不需要用戶登錄該系統(tǒng)時(shí),該程序就可以自動(dòng)啟動(dòng)(需要將該服務(wù)的啟動(dòng)類型設(shè)置為自動(dòng)啟動(dòng))。當(dāng)應(yīng)用程序在后臺(tái)運(yùn)行時(shí),我們并不需要和該應(yīng)用程序進(jìn)行任何交互。
通過(guò)VS.NET平臺(tái),可以輕易地創(chuàng)建Windows服務(wù)。在創(chuàng)建一個(gè)服務(wù)應(yīng)用程序時(shí),主要是定義一些代碼來(lái)控制服務(wù)開(kāi)始和停止的時(shí)間,向服務(wù)發(fā)出什么命令,以及命令被接收后將執(zhí)行什么樣的操作。這些都是通過(guò)編寫(xiě)服務(wù)的事件代碼來(lái)實(shí)現(xiàn)的。例如:OnStop和OnStart事件。通過(guò)OnStart事件代碼告訴應(yīng)用程序在程序啟動(dòng)時(shí)需要執(zhí)行哪些命令。這有點(diǎn)像一個(gè)控制臺(tái)應(yīng)用程序中的Main過(guò)程,它是我們的啟動(dòng)代碼。因此,一旦放入了服務(wù)啟動(dòng)程序,我們想要發(fā)生的操作將要被執(zhí)行。
2 如何實(shí)現(xiàn)及部署監(jiān)控
數(shù)據(jù)庫(kù)監(jiān)控范圍很多,比如硬盤(pán)空間、系統(tǒng)性能等,監(jiān)控方法也很多。本文要探討的是如何監(jiān)控?cái)?shù)據(jù)庫(kù)中的敏感數(shù)據(jù)。下面就以人力資源管理系統(tǒng)中的考勤管理子系統(tǒng)為例,其對(duì)應(yīng)數(shù)據(jù)處理的簡(jiǎn)要流程有:
步驟1. 員工在考勤機(jī)上打卡;
步驟2. 系統(tǒng)自動(dòng)收集考勤機(jī)的考勤信息;
步驟3. 值班人員第二天早上運(yùn)行考勤邏輯處理程序。
很顯然風(fēng)險(xiǎn)在于執(zhí)行步驟3。如果系統(tǒng)沒(méi)有收集到所有考勤機(jī)的考勤信息,那么就會(huì)造成部分員工曠工,或缺卡。如何有效地監(jiān)控考勤機(jī)呢?我們只需要在考勤機(jī)內(nèi)的程序增加一個(gè)功能:定時(shí)發(fā)送信息到數(shù)據(jù)表,然后編寫(xiě)一個(gè)Windows服務(wù)對(duì)這個(gè)數(shù)據(jù)表的數(shù)據(jù)進(jìn)行監(jiān)控即可。其中核心的程序如下:
Dim WS_CheckTerminal As New System.Threading.Thread(AddressOf JustDoIt)
Protected Overrides Sub OnStart(ByVal args() As String)
Me.GetServicePara():主要功能是取系統(tǒng)的配置參數(shù)。
WS_CheckTerminal.Start()
End Sub
Private Sub JustDoIt()
While True
CheckData()
Dim OBJ As New ErrorLog()
End While
End Sub
其中,需要檢查的邏輯就是存放在CheckData()函數(shù)中。同時(shí),對(duì)任何捕捉到的異常信息(如某臺(tái)考勤機(jī)出現(xiàn)故障,該考勤機(jī)就沒(méi)有正確發(fā)送信息到指定表。)必須能及時(shí)、方便的通知值班人員。我們可以使用電子郵件進(jìn)行異常信息發(fā)布。
在.NET中,可以通過(guò)MailMessage、MailAttathment和SmtpMail等類對(duì)象使用電子郵件服務(wù):
·MailMessage類用于建立一個(gè)電子郵件信息,它定義將把哪些信息、信息主題、優(yōu)先權(quán)及信息的附件發(fā)送給誰(shuí)。其中,相應(yīng)的郵件信息可以存放在配置文件中。
·MailAttachment類用來(lái)定義伴隨消息一起發(fā)送的附件列表。
·SmtpMail類為發(fā)送信息提供實(shí)際機(jī)制,它使用了Send方法,并把MailMessage對(duì)象作為它的一個(gè)參數(shù)。
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
我們必須在計(jì)算機(jī)中安裝和配置SMTP(簡(jiǎn)單的郵件傳輸協(xié)議,Simple Mail Transfer Protocol)郵件服務(wù)。
這樣,才能使用.NET中的電子郵件服務(wù)。
此外,Windows服務(wù)應(yīng)用程序不能在IDE或命令行中運(yùn)行,它們必須安裝到Windows環(huán)境里,這樣才能控制這些服務(wù)應(yīng)用程序。我們可以使用一個(gè)安裝程序,或使用InstallUtil.exe命令行實(shí)用程序安裝該服務(wù)。
3 結(jié)論
如何實(shí)現(xiàn)對(duì)敏感數(shù)據(jù)進(jìn)行有效監(jiān)控是一項(xiàng)非常重要而又艱巨的任務(wù)。通過(guò)Windows服務(wù)可以實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)的有效監(jiān)控,并通過(guò)電子郵件服務(wù)及時(shí)將監(jiān)控到的異常信息發(fā)送給相關(guān)的管理人員。由于Windows服務(wù)采用了線程技術(shù),其占用系統(tǒng)資源少、執(zhí)行效率高,是一個(gè)簡(jiǎn)單有效的方法。實(shí)際工作中,可以先確定哪些是數(shù)據(jù)庫(kù)系統(tǒng)中的敏感數(shù)據(jù),然后對(duì)這些數(shù)據(jù)進(jìn)行監(jiān)控,這對(duì)實(shí)現(xiàn)系統(tǒng)的完整性起到了一定的保障作用。
參考文獻(xiàn):
[1] Barwell.F,Blair.R,et al.VB.NET高級(jí)編程[M].康博,譯.北京:清華大學(xué)出版社,2002.
[2] Bill.E,Hollis.B et al.VB 2005 .NET 3.0高級(jí)編程[M].楊浩,譯.5版.北京:清華大學(xué)出版社,2008.