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