杜發(fā)展
(福建省高速公路集團有限公司 泉州管理分公司,福建 泉州 362000)
近年來我國高速公路產(chǎn)業(yè)快速發(fā)展,福建省內(nèi)已實現(xiàn)縣縣通高速。高速公路收費站作為上下高速的門戶,其運行情況直接關(guān)系到民眾能否高效、有序的進出高速公路、享受高速交通帶來的便利。收費服務(wù)器作為收費站計算機系統(tǒng)的核心,直接影響收費車道數(shù)據(jù)傳輸、稽查、財務(wù)、監(jiān)控等計算機能否正常運行。但如果服務(wù)器系統(tǒng)崩潰或硬件故障,很可能造成數(shù)據(jù)的丟失,導(dǎo)致整個收費系統(tǒng)錯亂并可能造成費源流失。做好收費服務(wù)器的數(shù)據(jù)庫數(shù)據(jù)備份,可以保障服務(wù)器突發(fā)故障時及時有效恢復(fù)原始數(shù)據(jù),保障收費站收費車道的良好運行,避免重大的經(jīng)濟財產(chǎn)損失。
目前高速公路收費站收費服務(wù)器數(shù)據(jù)庫備份是由各收費服務(wù)器數(shù)據(jù)庫設(shè)定作業(yè)于凌晨遠程備份于維護站機房數(shù)據(jù)服務(wù)器或工作站,普遍存在每日備份檢查不及時、備份異常未及時發(fā)現(xiàn)和每月收費數(shù)據(jù)備份不及時等問題,這些問題都可能對數(shù)據(jù)恢復(fù)造成影響。為有效解決這一問題,根據(jù)高速公路運營管理實際需要,自主研制出“一套高速公路收費系統(tǒng)遠程數(shù)據(jù)備份系統(tǒng)”。該系統(tǒng)利用DOS 批處理自動地批量地執(zhí)行DOS 命令以自動實現(xiàn)高速公路收費系統(tǒng)每日遠程數(shù)據(jù)備份、檢查和每月遠程數(shù)據(jù)備份、檢查,有效地保證了收費站收費服務(wù)器數(shù)據(jù)庫備份的及時性、有效性、穩(wěn)定性,有力支持著高速公路收費系統(tǒng)穩(wěn)定運行。
高速公路收費系統(tǒng)遠程數(shù)據(jù)備份系統(tǒng)由遠端計算機設(shè)定計劃任務(wù)每天定期執(zhí)行“高速公路收費系統(tǒng)遠程數(shù)據(jù)備份系統(tǒng).bat”實現(xiàn)每日遠程數(shù)據(jù)備份、檢查和每月遠程數(shù)據(jù)備份、檢查。工作步驟如圖1 所示。
圖1 高速公路收費系統(tǒng)遠程數(shù)據(jù)備份系統(tǒng)工作步驟圖
基于此,“一套高速公路收費系統(tǒng)遠程數(shù)據(jù)備份系統(tǒng)”構(gòu)成如圖2 所示,共有9 個文件,分別為“高速公路收費系統(tǒng)遠程數(shù)據(jù)備份系統(tǒng).bat”“每日遠程數(shù)據(jù)備份.bat”“每日檢查文件更新.bat”“每日異常提醒.bat”“每月遠程備份數(shù)據(jù).bat”“每月檢查文件更新.bat”“每月異常提醒.bat”“每日異常提醒.mp3”和“每月異常提醒.mp3”?!案咚俟肥召M系統(tǒng)遠程數(shù)據(jù)備份系統(tǒng).bat”是整套系統(tǒng)的核心,承擔(dān)管控和調(diào)用其他bat 文件的任務(wù)。
圖2 高速公路收費系統(tǒng)遠程數(shù)據(jù)備份系統(tǒng)構(gòu)成圖
高速公路收費服務(wù)器數(shù)據(jù)庫備份文件為壓縮文件格式,統(tǒng)一命名為tsdb_full_收費站代碼。永春就維站轄區(qū)11 個收費站站代碼如下:永春湖洋-3201,永春東-3202,安溪湖頭-3203,安溪劍斗-3204,安溪感德-3205,安溪福田-3206,德化上涌-3207,德化九仙山-3208,德化-7508,蓬壺-7506,下洋-7507。
高速公路收費系統(tǒng)遠程數(shù)據(jù)備份系統(tǒng)bat 文件功能即宏觀控制高速公路收費系統(tǒng)遠程數(shù)據(jù)備份系統(tǒng)各個流程。
bat 文件內(nèi)容如下:
每日遠程數(shù)據(jù)備份bat 文件功能即ftp 遠程登錄維護站數(shù)據(jù)備份服務(wù)器并拷貝數(shù)據(jù)庫備份文件至本地。bat 文件內(nèi)容如下:
每日檢查文件更新bat 文件功能即檢查判斷指定文件夾內(nèi)所有文件更新日期是否為當(dāng)前電腦系統(tǒng)日期,文件不存在或無更新即返回相關(guān)收費站異常信息。bat 內(nèi)容如下:
@echo off
For /f “tokens=2 delims==” %%i in (‘wmic datafile where “Name=’D:\fjeit\dbbackup\tsdb_full_3201.zip’”get LastModif ied /value ^| f indstr “=”’)
do ( set “StrDate10=%%i”)
for /f “tokens=2 delims==” %%i in (‘wmic datafile where “Name=’D:\fjeit\dbbackup\tsdb_full_3202.zip’”get LastModif ied /value ^| f indstr “=”’)
do ( set “StrDate11=%%i”)
for /f “tokens=2 delims==” %%i in (‘wmic datafile where “Name=’D:\fjeit\dbbackup\tsdb_full_3203.zip’”get LastModif ied /value ^| f indstr “=”’)
do ( set “StrDate12=%%i”)
for /f “tokens=2 delims==” %%i in (‘wmic datafile where “Name=’D:\fjeit\dbbackup\tsdb_full_3204.zip’”get LastModif ied /value ^| f indstr “=”’)
do ( set “StrDate13=%%i”)
for /f “tokens=2 delims==” %%i in (‘wmic datafile where “Name=’D:\fjeit\dbbackup\tsdb_full_3205.zip’”get LastModif ied /value ^| f indstr “=”’)
do ( set “StrDate14=%%i”)
for /f “tokens=2 delims==” %%i in (‘wmic datafile where “Name=’D:\fjeit\dbbackup\tsdb_full_3206.zip’”get LastModif ied /value ^| f indstr “=”’)
do ( set “StrDate15=%%i”)
for /f “tokens=2 delims==” %%i in (‘wmic datafile where “Name=’D:\fjeit\dbbackup\tsdb_full_3207.zip’”get LastModif ied /value ^| f indstr “=”’)
do ( set “StrDate16=%%i”)
for /f “tokens=2 delims==” %%i in (‘wmic datafile where “Name=’D:\fjeit\dbbackup\tsdb_full_3208.zip’”get LastModif ied /value ^| f indstr “=”’)
do ( set “StrDate17=%%i”)
for /f “tokens=2 delims==” %%i in (‘wmic datafile where “Name=’D:\fjeit\dbbackup\tsdb_full_7508.zip’”get LastModif ied /value ^| f indstr “=”’)
do ( set “StrDate18=%%i”)
for /f “tokens=2 delims==” %%i in (‘wmic datafile where “Name=’D:\fjeit\dbbackup\tsdb_full_7506.zip’”get LastModif ied /value ^| f indstr “=”’)
do ( set “StrDate19=%%i”)
for /f “tokens=2 delims==” %%i in (‘wmic datafile where “Name=’D:\fjeit\dbbackup\tsdb_full_7507.zip’”get LastModif ied /value ^| f indstr “=”’)
do ( set “StrDate110=%%i”)
set “FileDate10=%StrDate10:~0,8%”
set “FileDate11=%StrDate11:~0,8%”
set “FileDate12=%StrDate12:~0,8%”
set “FileDate13=%StrDate13:~0,8%”
set “FileDate14=%StrDate14:~0,8%”
set “FileDate15=%StrDate15:~0,8%”
set “FileDate16=%StrDate16:~0,8%”
set “FileDate17=%StrDate17:~0,8%”
set “FileDate18=%StrDate18:~0,8%”
set “FileDate19=%StrDate19:~0,8%”
set “FileDate110=%StrDate110:~0,8%”
set /a n=0
for /f “tokens=2 delims==” %%i in (‘wmic path win32_operatingsystem get LocalDateTime /value ^| findstr “=”’)do (set “StrDate2=%%i”)
set “SysDate=%StrDate2:~0,8%”
if "%FileDate10%" equ "%SysDate%" (goto p1) else(echo.&echo 永春湖洋今日遠程收費數(shù)據(jù)備份異常!!!&set /a n=1&goto p1)
:p1
if "%FileDate11%" equ "%SysDate%" (goto p2) else(echo.&echo 永春東今日遠程收費數(shù)據(jù)備份異常!!!&set /a n=2&goto p2)
:p2
if "%FileDate12%" equ "%SysDate%" (goto p3) else(echo.&echo 安溪湖頭今日遠程收費數(shù)據(jù)備份異常!!!&set /a n=3&goto p3)
:p3
if "%FileDate13%" equ "%SysDate%" (goto p4) else(echo.&echo 安溪劍斗今日遠程收費數(shù)據(jù)備份異常!!!&set /a n=4&goto p4)
:p4
if "%FileDate14%" equ "%SysDate%" (goto p5) else(echo.&echo 安溪感德今日遠程收費數(shù)據(jù)備份異常!!!&set /a n=5&goto p5)
:p5
if "%FileDate15%" equ "%SysDate%" (goto p6) else(echo.&echo 安溪福田今日遠程收費數(shù)據(jù)備份異常!!!&set /a n=6&goto p6)
:p6
if "%FileDate16%" equ "%SysDate%" (goto p7) else(echo.&echo 德化上涌今日遠程收費數(shù)據(jù)備份異常!!!&set /a n=7&goto p7)
:p7
if "%FileDate17%" equ "%SysDate%" (goto p8) else(echo.&echo 德化九仙山今日遠程收費數(shù)據(jù)備份異常!!!&set /a n=8&goto p8)
:p8
if "%FileDate18%" equ "%SysDate%" (goto p9) else(echo.&echo 德化今日遠程收費數(shù)據(jù)備份異常!!!&set /a n=9&goto p9)
:p9
if "%FileDate19%" equ "%SysDate%" (goto p10) else(echo.&echo 蓬壺今日遠程收費數(shù)據(jù)備份異常!!!&set /a n=10&goto p10)
:p10
if "%FileDate110%" equ "%SysDate%" (goto p11)else(echo.&echo 下洋今日遠程收費數(shù)據(jù)備份異常!!!&set /a n=11)
:p11
if %n%==0 (echo 每日檢查文件更新情況結(jié)束!&echo.&echo 今日收費數(shù)據(jù)備份任務(wù)已完成!) else (call每日異常提醒.bat)
每日異常提醒bat 文件功能即文字警示和語音循環(huán)警示,語音警示時間設(shè)定為半小時,時間可根據(jù)實際需要更改,警示內(nèi)容為“今日遠程收費數(shù)據(jù)備份異常,請技術(shù)員及時處理”。bat 文件內(nèi)容如下:
@echo off
echo.
echo 今日遠程收費數(shù)據(jù)備份異常,請技術(shù)員及時處理!!!
set /a c=0
:loop
start /min wmplayer.exe D:fjeit收費系統(tǒng)遠程備份系統(tǒng)每日異常提醒.mp3
rem 延遲6 秒
ping -n 6 127.0.0.1>nul
set /a c=%c%+1
if %c% leq 300 goto loop
taskkill /f /t /im wmplayer.exe>nul
echo.
echo 今日收費數(shù)據(jù)備份任務(wù)未完成!!!
每月遠程備份數(shù)據(jù)bat 文件功能即將本地數(shù)據(jù)庫備份文件拷貝至指定磁盤文件夾,文件夾名稱為當(dāng)天系統(tǒng)日期。bat 文件內(nèi)容如下:
@echo off
set p=”%date:~,4%%date:~5,2%%date:~8,2%”
xcopy /y D:fjeitdbbackup*.zip E:每月收費數(shù)據(jù)備份\%p%
每月遠檢查文件更新bat 文件功能即判斷指定磁盤以系統(tǒng)日期命名的文件夾內(nèi)是否存在備份文件,無備份文件即返回相關(guān)收費站異常信息。bat 文件內(nèi)容如下:
@echo off
echo.
echo 每月檢查文件更新開始...
set b=”%date:~,4%%date:~5,2%%date:~8,2%”
set /a m=0
if exist E:每月收費數(shù)據(jù)備份\%b% sdb_full_3201.zip(goto p1) else (echo.&echo 每月收費數(shù)據(jù)備份永春湖洋數(shù)據(jù)備份異常!!!&set /a m=1&goto p1)
:p1
if exist E:每月收費數(shù)據(jù)備份\%b% sdb_full_3202.zip(goto p2) else (echo.&echo 每月收費數(shù)據(jù)備份永春東數(shù)據(jù)備份異常!!!&set /a m=2&goto p2)
:p2
if exist E:每月收費數(shù)據(jù)備份\%b% sdb_full_3203.zip(goto p3) else (echo.&echo 每月收費數(shù)據(jù)備份安溪湖頭數(shù)據(jù)備份異常!!!&set /a m=3&goto p3)
:p3
if exist E:每月收費數(shù)據(jù)備份\%b% sdb_full_3204.zip(goto p4) else (echo.&echo 每月收費數(shù)據(jù)備份安溪劍斗數(shù)據(jù)備份異常!!!&set /a m=4&goto p4)
:p4
if exist E:每月收費數(shù)據(jù)備份\%b% sdb_full_3205.zip(goto p5) else (echo.&echo 每月收費數(shù)據(jù)備份安溪感德數(shù)據(jù)備份異常!!!&set /a m=5&goto p5)
:p5
if exist E:每月收費數(shù)據(jù)備份\%b% sdb_full_3206.zip(goto p6) else (echo.&echo 每月收費數(shù)據(jù)備份安溪福田數(shù)據(jù)備份異常!!!&set /a m=6&goto p6)
:p6
if exist E:每月收費數(shù)據(jù)備份\%b% sdb_full_3207.zip(goto p7) else (echo.&echo 每月收費數(shù)據(jù)備份德化上涌數(shù)據(jù)備份異常!!!&set /a m=7&goto p7)
:p7
if exist E:每月收費數(shù)據(jù)備份\%b% sdb_full_3208.zip(goto p8) else (echo.&echo 每月收費數(shù)據(jù)備份德化九仙山數(shù)據(jù)備份異常!!!&set /a m=8&goto p8)
:p8
if exist E:每月收費數(shù)據(jù)備份\%b% sdb_full_7508.zip(goto p9) else (echo.&echo 每月收費數(shù)據(jù)備份德化數(shù)據(jù)備份異常!!!&set /a m=9&goto p9)
:p9
if exist E:每月收費數(shù)據(jù)備份\%b% sdb_full_7506.zip(goto p10) else (echo.&echo 每月收費數(shù)據(jù)備份蓬壺數(shù)據(jù)備份異常!!!&set /a m=10&goto p10)
:p10
if exist E:每月收費數(shù)據(jù)備份\%b% sdb_full_7507.zip(goto p11) else (echo.&echo 每月收費數(shù)據(jù)備份下洋數(shù)據(jù)備份異常!!!&set /a m=11&goto p11)
:p11
if %m%==0 (echo.&echo 每月檢查文件更新結(jié)束!&echo.&echo 每月收費數(shù)據(jù)備份任務(wù)已完成!) else (call每月異常提醒.bat)
每月異常提醒bat 文件功能即文字警示和語音循環(huán)警示,語音警示時間設(shè)定為半小時,時間可根據(jù)實際需要更改,警示內(nèi)容為“本月遠程收費數(shù)據(jù)備份異常,請技術(shù)員及時處理”。bat 文件內(nèi)容如下:
@echo off
echo.
echo 本月遠程收費數(shù)據(jù)備份異常,請技術(shù)員及時處理!!!
set /a t=0
:loop
start /min wmplayer.exe D:fjeit收費系統(tǒng)遠程備份系統(tǒng)每月異常提醒.mp3
rem 延遲6 秒
ping -n 6 127.0.0.1>nul
set /a t=%t%+1
if %t% leq 300 goto loop
taskkill /f /t /im wmplayer.exe>nul
echo.
echo 本月收費數(shù)據(jù)備份任務(wù)未完成!!!
高速公路收費系統(tǒng)遠程數(shù)據(jù)備份系統(tǒng)每天自動運行,系統(tǒng)會自動根據(jù)系統(tǒng)日期與設(shè)定的執(zhí)行每月遠程備份任務(wù)的日期比較后判斷是執(zhí)行每日遠程備份單個任務(wù)還是每日遠程備份和每月遠程備份兩個任務(wù),以2021年4月8日與4月9日模擬測試遠程數(shù)據(jù)備份系統(tǒng)運行的4 種情況。
(1)4月9日只執(zhí)行每日遠程備份任務(wù),系統(tǒng)檢查全部正常備份,如圖3 所示。系統(tǒng)運行結(jié)果為左邊控制界面信息與右邊結(jié)果界面完全符合。
圖3 高速公路收費系統(tǒng)遠程數(shù)據(jù)備份系統(tǒng)控制界面和結(jié)果界面一
(2)4月9日只執(zhí)行每日遠程備份任務(wù),部分收費站遠程數(shù)據(jù)備份異常,系統(tǒng)檢查是安溪福田遠程數(shù)據(jù)備份異常,如圖4 所示。系統(tǒng)運行結(jié)果為左邊控制界面信息與右邊結(jié)果界面完全符合。
圖4 高速公路收費系統(tǒng)遠程數(shù)據(jù)備份系統(tǒng)控制界面和結(jié)果界面二
(3)4月9日執(zhí)行每日遠程備份任務(wù)和每月遠程備份任務(wù),系統(tǒng)檢查全部正常備份,如圖5 所示。系統(tǒng)運行結(jié)果為左邊控制界面信息與右邊結(jié)果界面完全符合。
圖5 高速公路收費系統(tǒng)遠程數(shù)據(jù)備份系統(tǒng)控制界面和結(jié)果界面三
(4)4月8日執(zhí)行每日遠程備份任務(wù)和每月遠程備份任務(wù),部分收費站遠程數(shù)據(jù)備份異常,系統(tǒng)檢查是安溪福田遠程數(shù)據(jù)備份異常,如圖6 所示。系統(tǒng)運行結(jié)果為左邊控制界面信息與右邊結(jié)果界面完全符合。
圖6 高速公路收費系統(tǒng)遠程數(shù)據(jù)備份系統(tǒng)執(zhí)行界面和結(jié)果界面四
以上4 種基本涵蓋了高速公路收費系統(tǒng)遠程數(shù)據(jù)備份系統(tǒng)可能出現(xiàn)的運行情況。遠程數(shù)據(jù)備份異常時語音報警與控制界面文字報警,如圖7 所示。
圖7 高速公路收費系統(tǒng)遠程數(shù)據(jù)備份系統(tǒng)執(zhí)行界面和語音報警界面
綜上充分體現(xiàn)了這套高速公路收費系統(tǒng)遠程數(shù)據(jù)備份系統(tǒng)的科學(xué)性、自動性、準(zhǔn)確性,極大方便了轄區(qū)收費服務(wù)器數(shù)據(jù)庫數(shù)據(jù)備份的統(tǒng)一管理。
通過近千次的試驗及部署應(yīng)用,此套備份系統(tǒng)完全能夠替代人工備份。本系統(tǒng)安裝簡潔,操作方便簡單,已在永春機電維護站管理計算機部署應(yīng)用980 天。目前已安全平穩(wěn)運行980 天,均達到預(yù)期效果。計劃將本套系統(tǒng)推廣應(yīng)用于泉州高速轄區(qū)內(nèi)所有46 個收費站,建立市級遠程備份系統(tǒng),實現(xiàn)收費服務(wù)器數(shù)據(jù)庫數(shù)據(jù)的統(tǒng)一備份管理。