[摘 要] 設(shè)計(jì)了一個(gè)基于Web的農(nóng)民進(jìn)城務(wù)工管理系統(tǒng),并成功應(yīng)用于涪陵農(nóng)業(yè)局的管理中,同時(shí)設(shè)計(jì)了高效的數(shù)據(jù)備份。本文介紹了該系統(tǒng)的功能、結(jié)構(gòu)、關(guān)鍵技術(shù)和數(shù)據(jù)的備份,及在其他的相關(guān)領(lǐng)域中的重大參考價(jià)值。
[關(guān)鍵詞] 混合查詢(xún) 進(jìn)城務(wù)工 數(shù)據(jù)備份
一、引言
隨著社會(huì)的發(fā)展,進(jìn)城務(wù)工的農(nóng)民越來(lái)越多,對(duì)農(nóng)民工的信息也就變得越來(lái)越難以管理。農(nóng)民進(jìn)城務(wù)工管理系統(tǒng)的建設(shè)已成為農(nóng)業(yè)局的重點(diǎn)工程。在此系統(tǒng)中,各鄉(xiāng)鎮(zhèn)的信息員可以增加、刪除、修改本鄉(xiāng)鎮(zhèn)進(jìn)城務(wù)工農(nóng)民的基本信息,也可以分類(lèi)匯總本鄉(xiāng)鎮(zhèn)進(jìn)城務(wù)工農(nóng)民的數(shù)據(jù),區(qū)級(jí)信息員可以增加、刪除、修改本區(qū)進(jìn)城務(wù)工農(nóng)民的基本信息,也可以分類(lèi)匯總或綜合匯總本區(qū)進(jìn)城務(wù)工農(nóng)民的數(shù)據(jù),同時(shí)可以遠(yuǎn)程對(duì)數(shù)據(jù)庫(kù)進(jìn)行備份,便于對(duì)本區(qū)的農(nóng)民工信息進(jìn)行管理和維護(hù)。
本文使用VB.NET編程語(yǔ)言開(kāi)發(fā)設(shè)計(jì)了B/S結(jié)構(gòu)的基于Web方式的農(nóng)民進(jìn)城務(wù)工管理系統(tǒng),通過(guò)實(shí)際應(yīng)用及改進(jìn),該系統(tǒng)不僅僅適用于農(nóng)業(yè)局,也可應(yīng)用于其他的相關(guān)領(lǐng)域。本文主要介紹了該系統(tǒng)的功能、結(jié)構(gòu)、實(shí)現(xiàn)的主要方法,數(shù)據(jù)庫(kù)的備份還原,以及還需要改進(jìn)和必須注意的一些事項(xiàng)。
二、系統(tǒng)的功能
根據(jù)該系統(tǒng)的特點(diǎn)系統(tǒng),將此系統(tǒng)分為兩大模塊,即鄉(xiāng)鎮(zhèn)管理員模塊和區(qū)管理員模塊,鄉(xiāng)鎮(zhèn)管理員模塊包括本鄉(xiāng)鎮(zhèn)農(nóng)民工信息插入、修改、刪除、分類(lèi)匯總、個(gè)人報(bào)表輸出打印、混合查詢(xún)等;區(qū)管理員模塊包括全區(qū)農(nóng)民工信息插入、修改、刪除、分類(lèi)匯總、綜合匯總、增加新管理員、數(shù)據(jù)庫(kù)備份等。所有操作都只需在客戶(hù)端通過(guò)Web瀏覽器進(jìn)行操作,就能完成其模塊體統(tǒng)的各種功能。
三、系統(tǒng)的實(shí)現(xiàn)
本進(jìn)城務(wù)工管理系統(tǒng)采用B/S基于Web的三層結(jié)構(gòu)模式。如圖1所示:
下面介紹實(shí)現(xiàn)該系統(tǒng)的幾個(gè)關(guān)鍵問(wèn)題。
1.數(shù)據(jù)庫(kù)設(shè)計(jì)
數(shù)據(jù)庫(kù)設(shè)計(jì)在一個(gè)管理系統(tǒng)中起著重要作用。一個(gè)設(shè)計(jì)合理、結(jié)構(gòu)清晰的數(shù)據(jù)庫(kù)能減少數(shù)據(jù)余、提高查詢(xún)速度、方便更新修改,可以減輕程序的負(fù)擔(dān),提高程序的執(zhí)行效率和穩(wěn)定性。根據(jù)進(jìn)城務(wù)工管理系統(tǒng)的要求,本系統(tǒng)主要由以下幾個(gè)表組成:信息員表、農(nóng)民工表、攜帶孩子情況表、生育情況表、變更情況表等組成。
信息員表用于保存信息員的基本信息,主要字段有:用戶(hù)名、密碼、權(quán)限和地區(qū);農(nóng)民工表用于保存進(jìn)城務(wù)工農(nóng)民的基本信息,主要字段有:編號(hào)、姓名、性別、文化程度、行業(yè)等;攜帶孩子情況表用于保存進(jìn)城務(wù)工農(nóng)民所攜帶孩子情況的基本信息,主要字段有:編號(hào)、姓名、性別、關(guān)系、出生日期、身份證號(hào)碼、就讀學(xué)校(幼兒園);生育情況表用于保存進(jìn)城務(wù)工農(nóng)民生育情況的基本信息,主要字段有:編號(hào)、時(shí)間、孩次、性別、政策內(nèi)外;變更情況表用于保存進(jìn)城務(wù)工農(nóng)民變更情況的基本信息,主要字段有:編號(hào)、變動(dòng)項(xiàng)目、更改后內(nèi)容、變更日期。由于農(nóng)民工表、攜帶孩子情況表、生育情況表、變更情況表之間是相關(guān)聯(lián)的,所以在數(shù)據(jù)庫(kù)中以編號(hào)作為其關(guān)聯(lián)項(xiàng),在數(shù)據(jù)庫(kù)中建立了如下關(guān)系圖。如圖2所示:
2.數(shù)據(jù)庫(kù)鏈接
采用ADO.NET技術(shù)鏈接數(shù)據(jù)庫(kù)。ADO.NET添加了許多新的對(duì)象和程序接口,如DataSet,DataView,DataReader,DataSetCommand,DataAdapter等,使得對(duì)數(shù)據(jù)庫(kù)的操作更簡(jiǎn)單。本系統(tǒng)主要運(yùn)用了DataSet,DataReader,DataAdapter這三個(gè)對(duì)象。
(1)DataSet對(duì)象。它是ADO.NET的核心,專(zhuān)門(mén)用來(lái)處理從數(shù)據(jù)存儲(chǔ)中讀出的數(shù)據(jù),并以離線的方式存在于本地內(nèi)存中。在DataSet中可包含一定數(shù)量的DataTable,且每個(gè)DataTable對(duì)應(yīng)一個(gè)數(shù)據(jù)庫(kù)的Table或View。一般來(lái)說(shuō),一個(gè)對(duì)應(yīng)的DataTable對(duì)象的數(shù)據(jù)表就是一組DataRow與DataColumn的集合。DataTable會(huì)負(fù)責(zé)維護(hù)每一數(shù)據(jù)行保留它的初始狀態(tài)和當(dāng)前狀態(tài),以解決數(shù)據(jù)庫(kù)的并發(fā)訪問(wèn)問(wèn)題。ADO.NET的離線模式減少了對(duì)數(shù)據(jù)服務(wù)器的壓力。在系統(tǒng)中所有信息基本上都是由DataSet來(lái)保存記錄的,然后綁定在DataGrid控件顯示出來(lái)。
(2)DataReader對(duì)象。當(dāng)以瀏覽的方式查看大量數(shù)據(jù)時(shí),會(huì)占用大量?jī)?nèi)存,導(dǎo)致性能下降。例如,一個(gè)鏈接(connection)用傳統(tǒng)的ADO Recorder對(duì)象去讀1000行數(shù)據(jù)庫(kù)的記錄,則必須為這1000行記錄將內(nèi)存分配給這個(gè)鏈接直至該鏈接的生命周期結(jié)束。如果有多個(gè)用戶(hù)在同一時(shí)間對(duì)同一計(jì)算機(jī)進(jìn)行同樣的操作,則機(jī)器內(nèi)存將被過(guò)度使用。為了解決這些問(wèn)題,.NET框架提供了DataReader對(duì)象,從數(shù)據(jù)庫(kù)返回一個(gè)只讀的,僅能向下滾動(dòng)的流(Stream),而且當(dāng)前的內(nèi)存中僅存一條記錄。本系統(tǒng)中對(duì)個(gè)人報(bào)表、分類(lèi)匯總等頁(yè)面均用DataReader來(lái)讀取和操作數(shù)據(jù)。
(3)DataAdapter對(duì)象。ADO.NET通過(guò)DataAdapter對(duì)象建立、初始化數(shù)據(jù)表,從而與DataSet對(duì)象結(jié)合起來(lái)在內(nèi)存中存放數(shù)據(jù)。DataAdapter對(duì)象能隱藏與Connection,Command對(duì)象溝通的細(xì)節(jié)。DataAdapter對(duì)象允許將DataSet對(duì)象中的數(shù)據(jù)保存到數(shù)據(jù)源(Data Souse),也可以從數(shù)據(jù)源中提取數(shù)據(jù)。同理,也可對(duì)底層數(shù)據(jù)保存體進(jìn)行數(shù)據(jù)的添加、刪除或修改操作。本系統(tǒng)用其來(lái)完成數(shù)據(jù)的維護(hù)操作。
3.數(shù)據(jù)庫(kù)管理系統(tǒng)的安全管理
三農(nóng)信息系統(tǒng)采用SQL Server 2000數(shù)據(jù)庫(kù)管理系統(tǒng)。在整個(gè)三農(nóng)信息系統(tǒng)安全管理中,我們采取了三重安全措施:數(shù)據(jù)庫(kù)的備份與恢復(fù);Windows Server 2003的RAID鏡像;ghost鏡像。
(1)數(shù)據(jù)庫(kù)的備份與恢復(fù)。三農(nóng)信息數(shù)據(jù)庫(kù)由于其量的龐大性和數(shù)據(jù)的重要性, 一旦崩潰或者數(shù)據(jù)丟失, 都是不可彌補(bǔ)的損失。而且, 隨著每天信息數(shù)據(jù)的入庫(kù), 數(shù)據(jù)備份更成為一個(gè)重要的安全環(huán)節(jié)。為了使數(shù)據(jù)庫(kù)發(fā)生故障后能在最短時(shí)間內(nèi)、最大限度地恢復(fù)正常, 主要也就是靠數(shù)據(jù)備份與恢復(fù)技術(shù)。
①數(shù)據(jù)庫(kù)的備份。為了將系統(tǒng)安全完整的備份,應(yīng)該在具體執(zhí)行備份之前,根據(jù)具體的環(huán)境和條件,制定一個(gè)完善可行的備份計(jì)劃,確保數(shù)據(jù)庫(kù)系統(tǒng)的安全。涪陵三農(nóng)信息系統(tǒng)中,在制定備份計(jì)劃時(shí),我們主要從以下幾個(gè)方面來(lái)考慮:a.備份的頻率:考慮到在整個(gè)系統(tǒng)中,農(nóng)產(chǎn)品的信息在時(shí)時(shí)變化,以及在農(nóng)技服務(wù)子系統(tǒng)中有大量的問(wèn)題與回答,因此,我們?cè)O(shè)置的備份頻率為一天。b.確定備份的內(nèi)容:備份的內(nèi)容就是要保護(hù)的內(nèi)容。在此系統(tǒng)中,我們所有的信息都是放在“糧油庫(kù)”、“論壇庫(kù)”、“信息庫(kù)”中,因此備份的內(nèi)容即是這三個(gè)庫(kù)。c.確定備份的介質(zhì):在備份中使用何種介質(zhì)是至關(guān)重要的,我們使用的介質(zhì)是網(wǎng)絡(luò)硬盤(pán),這樣便于我們以后的恢復(fù)操作。d.確定使用在線備份還是脫機(jī)備份:由于此系統(tǒng)是整個(gè)涪陵區(qū)幾十個(gè)鄉(xiāng)鎮(zhèn)在使用,訪問(wèn)量很大,而且是不定時(shí)的,因此我們采用在線備份。在線備份時(shí)由于用戶(hù)的操作會(huì)影響數(shù)據(jù)庫(kù)備份的速度,所以我們選在訪問(wèn)量教小時(shí)的零點(diǎn)備份。
在執(zhí)行數(shù)據(jù)庫(kù)備份操作中,利用SQL Server系統(tǒng)提供的 SQL Server Enterprise Manager來(lái)創(chuàng)建備份文件。
②數(shù)據(jù)庫(kù)的恢復(fù)。數(shù)據(jù)庫(kù)的備份是為了以后能夠順利地將破壞了的數(shù)據(jù)庫(kù)安全地恢復(fù)的工作。但是,備份與恢復(fù)相比,恢復(fù)的工作尤其重要和艱巨,因?yàn)閭浞輹r(shí)系統(tǒng)是處于正常環(huán)境狀態(tài),而當(dāng)進(jìn)行數(shù)據(jù)庫(kù)恢復(fù)時(shí),一般而言,系統(tǒng)的環(huán)境處于一種非正常的狀態(tài)。例如,系統(tǒng)的整個(gè)硬件失敗,或者系統(tǒng)軟件癱瘓,或者由于誤操作刪除了重要的數(shù)據(jù)等等。
在進(jìn)行數(shù)據(jù)庫(kù)恢復(fù)的進(jìn)程中,系統(tǒng)將自動(dòng)地進(jìn)行某些操作,確保數(shù)據(jù)庫(kù)安全和迅速地恢復(fù)。在恢復(fù)數(shù)據(jù)庫(kù)文件時(shí),必須確保數(shù)據(jù)庫(kù)備份文件是有效的,并且在備份文件中包含了所需要的備份內(nèi)容。
在執(zhí)行數(shù)據(jù)庫(kù)恢復(fù)操作中,利用SQL Server系統(tǒng)提供的 SQL Server Enterprise Manager來(lái)恢復(fù)數(shù)據(jù)。
(2)Windows Server 2003的RAID鏡像??紤]到三農(nóng)信息系統(tǒng)是針對(duì)涪陵區(qū)幾十個(gè)鄉(xiāng)鎮(zhèn)開(kāi)發(fā)的,如果服務(wù)器出現(xiàn)故障,則整個(gè)系統(tǒng)將導(dǎo)致癱瘓,在此期間用戶(hù)無(wú)法訪問(wèn)。因此我們采用了Windows Server 2003提供的基于軟RAID,將兩臺(tái)服務(wù)器的硬盤(pán)做鏡像,其中一臺(tái)服務(wù)器被指定為主服務(wù)器,另一臺(tái)為從服務(wù)器??蛻?hù)只能對(duì)主服務(wù)器上的鏡像卷進(jìn)行讀寫(xiě),即只有主服務(wù)器通過(guò)網(wǎng)絡(luò)向用戶(hù)提供服務(wù),從服務(wù)器相應(yīng)的卷被鎖定以防對(duì)數(shù)據(jù)庫(kù)的存取。主/從服務(wù)器分別通過(guò)心跳監(jiān)測(cè)線路相互檢測(cè)對(duì)方的運(yùn)行狀態(tài),當(dāng)主服務(wù)器因故障停機(jī)時(shí),從服務(wù)器馬上接管主服務(wù)器的應(yīng)用,網(wǎng)絡(luò)正常運(yùn)行,即對(duì)訪問(wèn)者來(lái)說(shuō)絲毫不受影響。
(3)Ghost鏡像??紤]到可能整個(gè)服務(wù)器系統(tǒng)全部癱瘓,也就是主/從服務(wù)器都因故障而無(wú)法啟動(dòng),我們制定了最后一個(gè)安全措施,即Ghost鏡像。
在整個(gè)系統(tǒng)正常運(yùn)行的時(shí)候,給系統(tǒng)在本地硬盤(pán)上作個(gè)Ghost鏡像,也就是原樣復(fù)制一個(gè)現(xiàn)有的系統(tǒng),同時(shí)我們將此鏡像文件復(fù)制到移動(dòng)硬盤(pán)上。當(dāng)本地硬盤(pán)也出現(xiàn)故障時(shí),我們可以通過(guò)移動(dòng)硬盤(pán)上的鏡像文件來(lái)恢復(fù),之后再將網(wǎng)絡(luò)硬盤(pán)上的數(shù)據(jù)庫(kù)還原到剛恢復(fù)的系統(tǒng)中。
4.區(qū)信息員管理界面
該界面主要完成了對(duì)農(nóng)民工信息的基本查詢(xún)、混合查詢(xún)、個(gè)人報(bào)表輸出打印、各鄉(xiāng)鎮(zhèn)農(nóng)民工的分類(lèi)匯總以及對(duì)整個(gè)地區(qū)農(nóng)民工的混合匯總、遠(yuǎn)程備份數(shù)據(jù)庫(kù)、錄入、修改、刪除農(nóng)民工的信息,以及增加、刪除、修改各鄉(xiāng)鎮(zhèn)的信息員。
在該系統(tǒng)中,由于各鄉(xiāng)鎮(zhèn)又有各自的居委,在此將鄉(xiāng)鎮(zhèn)與居委通過(guò)id相對(duì)應(yīng),再綁定到下拉列表框中,這樣極大地提高了開(kāi)發(fā)效率。
四、小結(jié)
進(jìn)城務(wù)工管理不僅已成功應(yīng)用與涪陵農(nóng)業(yè)局,而且在其他的相關(guān)領(lǐng)域中也有重大的參考價(jià)值。本文設(shè)計(jì)的這個(gè)基于Web的進(jìn)城務(wù)工管理系統(tǒng),非常成功地在涪陵農(nóng)業(yè)局中得以應(yīng)用。在建設(shè)此系統(tǒng)的同時(shí),也必須深切地認(rèn)識(shí)到安全管理的重要性, 從而把該系統(tǒng)管理得更好,讓它更好地為涪陵人民、國(guó)家建設(shè)做貢獻(xiàn)。
參考文獻(xiàn):
[1]沈大林 張小蕾:中文Dreamweaver MX/Flash MX/Fireworks MX三合一教程[M].北京:電子工業(yè)出版社.第三版,2003.P67~P88
[2]尚俊杰:ASP.NET程序設(shè)計(jì)[M].北京:清華大學(xué)出版社.第一版,2004
[3]龔小勇:關(guān)系數(shù)據(jù)庫(kù)與SQL Server 2000[M].北京:機(jī)械工業(yè)出版社.第三版,2004
[4]廖信彥:ASP.NET交互式Web數(shù)據(jù)庫(kù)程序設(shè)計(jì)[M].北京:鐵道出版社.第一版,2004
[5]肖金秀 何 鵬 王當(dāng)文:ASP.NET案例教程[M].北京:冶金工業(yè)出版社,2005
[6]蘇英如.ASP.NET程序設(shè)計(jì)及應(yīng)用[M].北京:中國(guó)水利水電出版社,2006
[7]尚俊杰 秦衛(wèi)中:ASP.NET程序設(shè)計(jì)案例教程[M].北京:清華大學(xué)出版社,2005
[8]葉汶華:ASP.NET網(wǎng)頁(yè)制作教程[M].北京:冶金工業(yè)出版社,2004