杜發展
(福建省高速公路集團有限公司 泉州管理分公司,福建 泉州 362000)
近年來我國高速公路產業快速發展,福建省內已實現縣縣通高速。高速公路收費站作為上下高速的門戶,其運行情況直接關系到民眾能否高效、有序的進出高速公路、享受高速交通帶來的便利。收費服務器作為收費站計算機系統的核心,直接影響收費車道數據傳輸、稽查、財務、監控等計算機能否正常運行。但如果服務器系統崩潰或硬件故障,很可能造成數據的丟失,導致整個收費系統錯亂并可能造成費源流失。做好收費服務器的數據庫數據備份,可以保障服務器突發故障時及時有效恢復原始數據,保障收費站收費車道的良好運行,避免重大的經濟財產損失。
目前高速公路收費站收費服務器數據庫備份是由各收費服務器數據庫設定作業于凌晨遠程備份于維護站機房數據服務器或工作站,普遍存在每日備份檢查不及時、備份異常未及時發現和每月收費數據備份不及時等問題,這些問題都可能對數據恢復造成影響。為有效解決這一問題,根據高速公路運營管理實際需要,自主研制出“一套高速公路收費系統遠程數據備份系統”。該系統利用DOS 批處理自動地批量地執行DOS 命令以自動實現高速公路收費系統每日遠程數據備份、檢查和每月遠程數據備份、檢查,有效地保證了收費站收費服務器數據庫備份的及時性、有效性、穩定性,有力支持著高速公路收費系統穩定運行。
高速公路收費系統遠程數據備份系統由遠端計算機設定計劃任務每天定期執行“高速公路收費系統遠程數據備份系統.bat”實現每日遠程數據備份、檢查和每月遠程數據備份、檢查。工作步驟如圖1 所示。

圖1 高速公路收費系統遠程數據備份系統工作步驟圖
基于此,“一套高速公路收費系統遠程數據備份系統”構成如圖2 所示,共有9 個文件,分別為“高速公路收費系統遠程數據備份系統.bat”“每日遠程數據備份.bat”“每日檢查文件更新.bat”“每日異常提醒.bat”“每月遠程備份數據.bat”“每月檢查文件更新.bat”“每月異常提醒.bat”“每日異常提醒.mp3”和“每月異常提醒.mp3”。“高速公路收費系統遠程數據備份系統.bat”是整套系統的核心,承擔管控和調用其他bat 文件的任務。

圖2 高速公路收費系統遠程數據備份系統構成圖
高速公路收費服務器數據庫備份文件為壓縮文件格式,統一命名為tsdb_full_收費站代碼。永春就維站轄區11 個收費站站代碼如下:永春湖洋-3201,永春東-3202,安溪湖頭-3203,安溪劍斗-3204,安溪感德-3205,安溪福田-3206,德化上涌-3207,德化九仙山-3208,德化-7508,蓬壺-7506,下洋-7507。
高速公路收費系統遠程數據備份系統bat 文件功能即宏觀控制高速公路收費系統遠程數據備份系統各個流程。
bat 文件內容如下:



每日遠程數據備份bat 文件功能即ftp 遠程登錄維護站數據備份服務器并拷貝數據庫備份文件至本地。bat 文件內容如下:

每日檢查文件更新bat 文件功能即檢查判斷指定文件夾內所有文件更新日期是否為當前電腦系統日期,文件不存在或無更新即返回相關收費站異常信息。bat 內容如下:
@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 永春湖洋今日遠程收費數據備份異常!!!&set /a n=1&goto p1)
:p1
if "%FileDate11%" equ "%SysDate%" (goto p2) else(echo.&echo 永春東今日遠程收費數據備份異常!!!&set /a n=2&goto p2)
:p2
if "%FileDate12%" equ "%SysDate%" (goto p3) else(echo.&echo 安溪湖頭今日遠程收費數據備份異常!!!&set /a n=3&goto p3)
:p3
if "%FileDate13%" equ "%SysDate%" (goto p4) else(echo.&echo 安溪劍斗今日遠程收費數據備份異常!!!&set /a n=4&goto p4)
:p4
if "%FileDate14%" equ "%SysDate%" (goto p5) else(echo.&echo 安溪感德今日遠程收費數據備份異常!!!&set /a n=5&goto p5)
:p5
if "%FileDate15%" equ "%SysDate%" (goto p6) else(echo.&echo 安溪福田今日遠程收費數據備份異常!!!&set /a n=6&goto p6)
:p6
if "%FileDate16%" equ "%SysDate%" (goto p7) else(echo.&echo 德化上涌今日遠程收費數據備份異常!!!&set /a n=7&goto p7)
:p7
if "%FileDate17%" equ "%SysDate%" (goto p8) else(echo.&echo 德化九仙山今日遠程收費數據備份異常!!!&set /a n=8&goto p8)
:p8
if "%FileDate18%" equ "%SysDate%" (goto p9) else(echo.&echo 德化今日遠程收費數據備份異常!!!&set /a n=9&goto p9)
:p9
if "%FileDate19%" equ "%SysDate%" (goto p10) else(echo.&echo 蓬壺今日遠程收費數據備份異常!!!&set /a n=10&goto p10)
:p10
if "%FileDate110%" equ "%SysDate%" (goto p11)else(echo.&echo 下洋今日遠程收費數據備份異常!!!&set /a n=11)
:p11
if %n%==0 (echo 每日檢查文件更新情況結束!&echo.&echo 今日收費數據備份任務已完成!) else (call每日異常提醒.bat)
每日異常提醒bat 文件功能即文字警示和語音循環警示,語音警示時間設定為半小時,時間可根據實際需要更改,警示內容為“今日遠程收費數據備份異常,請技術員及時處理”。bat 文件內容如下:
@echo off
echo.
echo 今日遠程收費數據備份異常,請技術員及時處理!!!
set /a c=0
:loop
start /min wmplayer.exe D:fjeit收費系統遠程備份系統每日異常提醒.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 今日收費數據備份任務未完成!!!
每月遠程備份數據bat 文件功能即將本地數據庫備份文件拷貝至指定磁盤文件夾,文件夾名稱為當天系統日期。bat 文件內容如下:
@echo off
set p=”%date:~,4%%date:~5,2%%date:~8,2%”
xcopy /y D:fjeitdbbackup*.zip E:每月收費數據備份\%p%
每月遠檢查文件更新bat 文件功能即判斷指定磁盤以系統日期命名的文件夾內是否存在備份文件,無備份文件即返回相關收費站異常信息。bat 文件內容如下:
@echo off
echo.
echo 每月檢查文件更新開始...
set b=”%date:~,4%%date:~5,2%%date:~8,2%”
set /a m=0
if exist E:每月收費數據備份\%b% sdb_full_3201.zip(goto p1) else (echo.&echo 每月收費數據備份永春湖洋數據備份異常!!!&set /a m=1&goto p1)
:p1
if exist E:每月收費數據備份\%b% sdb_full_3202.zip(goto p2) else (echo.&echo 每月收費數據備份永春東數據備份異常!!!&set /a m=2&goto p2)
:p2
if exist E:每月收費數據備份\%b% sdb_full_3203.zip(goto p3) else (echo.&echo 每月收費數據備份安溪湖頭數據備份異常!!!&set /a m=3&goto p3)
:p3
if exist E:每月收費數據備份\%b% sdb_full_3204.zip(goto p4) else (echo.&echo 每月收費數據備份安溪劍斗數據備份異常!!!&set /a m=4&goto p4)
:p4
if exist E:每月收費數據備份\%b% sdb_full_3205.zip(goto p5) else (echo.&echo 每月收費數據備份安溪感德數據備份異常!!!&set /a m=5&goto p5)
:p5
if exist E:每月收費數據備份\%b% sdb_full_3206.zip(goto p6) else (echo.&echo 每月收費數據備份安溪福田數據備份異常!!!&set /a m=6&goto p6)
:p6
if exist E:每月收費數據備份\%b% sdb_full_3207.zip(goto p7) else (echo.&echo 每月收費數據備份德化上涌數據備份異常!!!&set /a m=7&goto p7)
:p7
if exist E:每月收費數據備份\%b% sdb_full_3208.zip(goto p8) else (echo.&echo 每月收費數據備份德化九仙山數據備份異常!!!&set /a m=8&goto p8)
:p8
if exist E:每月收費數據備份\%b% sdb_full_7508.zip(goto p9) else (echo.&echo 每月收費數據備份德化數據備份異常!!!&set /a m=9&goto p9)
:p9
if exist E:每月收費數據備份\%b% sdb_full_7506.zip(goto p10) else (echo.&echo 每月收費數據備份蓬壺數據備份異常!!!&set /a m=10&goto p10)
:p10
if exist E:每月收費數據備份\%b% sdb_full_7507.zip(goto p11) else (echo.&echo 每月收費數據備份下洋數據備份異常!!!&set /a m=11&goto p11)
:p11
if %m%==0 (echo.&echo 每月檢查文件更新結束!&echo.&echo 每月收費數據備份任務已完成!) else (call每月異常提醒.bat)
每月異常提醒bat 文件功能即文字警示和語音循環警示,語音警示時間設定為半小時,時間可根據實際需要更改,警示內容為“本月遠程收費數據備份異常,請技術員及時處理”。bat 文件內容如下:
@echo off
echo.
echo 本月遠程收費數據備份異常,請技術員及時處理!!!
set /a t=0
:loop
start /min wmplayer.exe D:fjeit收費系統遠程備份系統每月異常提醒.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 本月收費數據備份任務未完成!!!
高速公路收費系統遠程數據備份系統每天自動運行,系統會自動根據系統日期與設定的執行每月遠程備份任務的日期比較后判斷是執行每日遠程備份單個任務還是每日遠程備份和每月遠程備份兩個任務,以2021年4月8日與4月9日模擬測試遠程數據備份系統運行的4 種情況。
(1)4月9日只執行每日遠程備份任務,系統檢查全部正常備份,如圖3 所示。系統運行結果為左邊控制界面信息與右邊結果界面完全符合。

圖3 高速公路收費系統遠程數據備份系統控制界面和結果界面一
(2)4月9日只執行每日遠程備份任務,部分收費站遠程數據備份異常,系統檢查是安溪福田遠程數據備份異常,如圖4 所示。系統運行結果為左邊控制界面信息與右邊結果界面完全符合。

圖4 高速公路收費系統遠程數據備份系統控制界面和結果界面二
(3)4月9日執行每日遠程備份任務和每月遠程備份任務,系統檢查全部正常備份,如圖5 所示。系統運行結果為左邊控制界面信息與右邊結果界面完全符合。

圖5 高速公路收費系統遠程數據備份系統控制界面和結果界面三
(4)4月8日執行每日遠程備份任務和每月遠程備份任務,部分收費站遠程數據備份異常,系統檢查是安溪福田遠程數據備份異常,如圖6 所示。系統運行結果為左邊控制界面信息與右邊結果界面完全符合。

圖6 高速公路收費系統遠程數據備份系統執行界面和結果界面四
以上4 種基本涵蓋了高速公路收費系統遠程數據備份系統可能出現的運行情況。遠程數據備份異常時語音報警與控制界面文字報警,如圖7 所示。

圖7 高速公路收費系統遠程數據備份系統執行界面和語音報警界面
綜上充分體現了這套高速公路收費系統遠程數據備份系統的科學性、自動性、準確性,極大方便了轄區收費服務器數據庫數據備份的統一管理。
通過近千次的試驗及部署應用,此套備份系統完全能夠替代人工備份。本系統安裝簡潔,操作方便簡單,已在永春機電維護站管理計算機部署應用980 天。目前已安全平穩運行980 天,均達到預期效果。計劃將本套系統推廣應用于泉州高速轄區內所有46 個收費站,建立市級遠程備份系統,實現收費服務器數據庫數據的統一備份管理。