司存友 劉 淼 崔彥萍
(江蘇省水文水資源勘測局,江蘇 南京 210029)
根據(jù)水利部辦公廳《關(guān)于做好水情信息交換有關(guān)工作的通知》(辦汛﹝2011〕119 號)文件精神,2011年江蘇省水文水資源勘測局在全省范圍內(nèi)開展了《實時雨水情數(shù)據(jù)庫表結(jié)構(gòu)與標識符》(SL323-2011)貫標和水情信息交換系統(tǒng)的試運行工作。水情信息交換系統(tǒng)不再采用《水情信息編碼標準》(SL330-2005)進行數(shù)據(jù)交換,而是直接基于數(shù)據(jù)庫進行水情數(shù)據(jù)交換。由于省去了編碼、譯電過程,交換效率明顯提升,故障率大為減少。
2011年6月以來,全省13 個地市水文分局和6 個廳屬工程管理處全部采用水情信息交換系統(tǒng)傳輸水情數(shù)據(jù)。系統(tǒng)運行兩年多以來,總體穩(wěn)定,為防汛防旱提供了大量、實時的雨水情數(shù)據(jù)。
水情信息交換系統(tǒng)利用Web Service、數(shù)據(jù)庫觸發(fā)器、自定義控制表等技術(shù),建立了基于不同數(shù)據(jù)庫平臺之間的水情數(shù)據(jù)交換機制,實現(xiàn)了網(wǎng)絡(luò)內(nèi)任何節(jié)點水情基礎(chǔ)數(shù)據(jù)、實時數(shù)據(jù)、統(tǒng)計數(shù)據(jù)、預(yù)報數(shù)據(jù)的可靠快速傳輸。系統(tǒng)采用微軟的DotNet FrameWork、Spring.net 技術(shù)框架,實現(xiàn)程序?qū)哟谓Y(jié)構(gòu)的清晰分割,同時,采用Ibatis.net 實現(xiàn)數(shù)據(jù)層訪問,采用Web Service 技術(shù)實現(xiàn)遠程數(shù)據(jù)傳輸,利用Ajax 技術(shù)實現(xiàn)良好的界面交互效果。軟件系統(tǒng)架構(gòu)采用了MVC 三層結(jié)構(gòu)設(shè)計,層次和邏輯清晰,降低了系統(tǒng)開發(fā)和維護的成本,并提高了系統(tǒng)的可擴展性。
系統(tǒng)運行環(huán)境的網(wǎng)絡(luò)設(shè)備主要由應(yīng)用服務(wù)器、數(shù)據(jù)庫服務(wù)器、監(jiān)控終端組成。系統(tǒng)應(yīng)用服務(wù)器在運行數(shù)據(jù)輪詢程序時,可同時通過IIS 提供數(shù)據(jù)接收Web 服務(wù)。通過軟件的配置,信息交換節(jié)點可以同時作為發(fā)送節(jié)點和接收節(jié)點(見圖1)。
交換系統(tǒng)采用分層架構(gòu),數(shù)據(jù)層基于實時雨水情數(shù)據(jù)庫,應(yīng)用層核心模塊主要包括:數(shù)據(jù)輪詢模塊、數(shù)據(jù)發(fā)送模塊、數(shù)據(jù)接收模塊、數(shù)據(jù)入庫模塊等(見圖2)。
數(shù)據(jù)詳細交換流程如下(見圖3):
(1)外部系統(tǒng)對發(fā)送節(jié)點實時雨水情數(shù)據(jù)庫中基本信息類、實時信息類、預(yù)報信息類、統(tǒng)計信息類的數(shù)據(jù)進行插入(修改、刪除)操作時,啟動水情數(shù)據(jù)庫相關(guān)表的觸發(fā)器;
(2)觸發(fā)器將發(fā)生變動的數(shù)據(jù)記錄保存到待交換信息記錄表中;
(3)系統(tǒng)定時對待交換信息記錄表進行輪詢檢查,發(fā)現(xiàn)有待發(fā)送數(shù)據(jù)后,根據(jù)系統(tǒng)設(shè)置的轉(zhuǎn)發(fā)關(guān)系,為各接收單位生成相應(yīng)的數(shù)據(jù)文件,并啟動發(fā)送模塊;
(4)發(fā)送模塊負責(zé)把數(shù)據(jù)文件分別發(fā)送給各接收節(jié)點;
圖1 系統(tǒng)網(wǎng)絡(luò)拓撲結(jié)構(gòu)圖
圖2 水情信息交換系統(tǒng)架構(gòu)圖
圖3 數(shù)據(jù)交換流程圖
(5)接收節(jié)點通過Web Service 接口,接收上傳的文件,并啟動入庫模塊;
(6)入庫模塊負責(zé)解讀數(shù)據(jù)文件,并把數(shù)據(jù)記錄插入到已接收信息記錄表中,同時,插入(修改、刪除)相應(yīng)的基本類、實時類、預(yù)報類和統(tǒng)計類信息。
系統(tǒng)安裝后,文件目錄組成如圖4 所示。
2.5.1 文件數(shù)據(jù)格式
文件中每行數(shù)據(jù)對應(yīng)一條【待交換信息表】的記錄,每行數(shù)據(jù)的格式如圖5 所示。
2.5.2 發(fā)送文件名命名規(guī)則
SEND_YYYYMMDDHHMMSS_###.TXT
SEND_:固定前綴
YYYYMMDDHHMMSS:文件生成時間
###:分割文件編號
2.5.3 接收自動上傳文件名命名規(guī)則
RECEIVE_發(fā)送單位代碼_上傳文件名.TXT
RECEIVE_:固定前綴
上傳文件名:發(fā)送方本地的文件名稱(系統(tǒng)自動生成)
2.6.1 交換單位信息表
用于存儲各交換單位的基本信息,主要包括:單位代碼、單位名稱、交換類型、IP 地址、端口號、服務(wù)名、是否啟動交換等。
2.6.2 交換站點信息表
用于存儲對外交換信息的測站的相關(guān)信息,主要包括:單位代碼、測站編碼等。
2.6.3 交換表單信息表
用于存儲對外交換信息表單的相關(guān)信息,主要包括:單位代碼、表標識、是否啟動交換等。
2.6.4 待發(fā)送信息記錄表
用于記錄待發(fā)送的水情信息,數(shù)據(jù)進入水情庫后,通過觸發(fā)器生成的待發(fā)送數(shù)據(jù)進入此表。主要包括:發(fā)送流水號、測站編碼、表標識、數(shù)據(jù)時間、擴展關(guān)鍵字、操作類型、交換信息、輪詢狀態(tài)等。
2.6.5 已處理信息記錄表
圖4 文件目錄組成
圖5 每行數(shù)據(jù)格式
用于記錄已經(jīng)輪詢處理過的水情信息,主要包括:發(fā)送流水號、測站編碼、表標識、數(shù)據(jù)時間、擴展關(guān)鍵字、操作類型、交換信息、時間戳等。
2.6.6 發(fā)送文件信息表
用于存儲信息交換發(fā)送文件的相關(guān)信息,主要包括:發(fā)送文件編號、單位代碼、發(fā)送類型、發(fā)送狀態(tài)、發(fā)送文件名、發(fā)送時間、發(fā)送次數(shù)、錯誤行號等。
2.6.7 信息配發(fā)記錄表
用于記錄已處理信息和接收信息單位之間的配發(fā)關(guān)系,主要包括:單位代碼、發(fā)送流水號、發(fā)送文件編號、數(shù)據(jù)時間、發(fā)送狀態(tài)、統(tǒng)計標記等。
2.6.8 接收文件信息表
用于存儲信息交換接收文件的相關(guān)信息,主要包括:接收文件編號、單位代碼、接收類型、接收狀態(tài)、接收文件名、接收時間等。
2.6.9 接收信息記錄表
用于記錄信息交換接收到的水情信息,主要包括:接收流水號、接收文件編號、單位代碼、發(fā)送流水號、測站編碼、表標識、數(shù)據(jù)時間、擴展關(guān)鍵字、操作類型、交換信息、入庫狀態(tài)、入庫時間、錯誤信息、人工處理時間、統(tǒng)計標記等。
正常網(wǎng)絡(luò)相通的情況下,系統(tǒng)不能相連的原因多數(shù)是交換單位相關(guān)信息配置錯誤。某些水情中心因為服務(wù)器故障,更換了IP 地址、端口號、密碼等信息,而又未通知相關(guān)分中心會導(dǎo)致不能相連。另外,各單位的“ISSTARTS”控制啟用標識未打開(設(shè)置成“0”),也會造成不能相連。發(fā)生此類故障時應(yīng)重點檢查ST_INSTCD_E 配置表內(nèi)容。
交換系統(tǒng)界面在一切正常的狀態(tài)下,仍然出現(xiàn)某些信息不能發(fā)送的情況,一般為交換控制表配置錯誤,以及觸發(fā)器出現(xiàn)邏輯錯誤等。
3.2.1 配置錯誤
報汛數(shù)據(jù)不能交換的主要原因可能是配置錯誤。
一是站點漏配。由于交換站點特別多,如果管理人員不細心而漏配了站點,就會導(dǎo)致該站點所有表項信息不能報送,可以在ST_STCD_E 表里對某單位的報送站點情況進行詳細檢查。
二是發(fā)送內(nèi)容配置錯誤。水情數(shù)據(jù)庫共有基本信息類、實時類、統(tǒng)計類、預(yù)報類4 大類共91 張表項水情信息,所有需發(fā)送的表項信息全部配置在ST_TABLE_E 表里,如果漏配某個表項信息,就會導(dǎo)致該表項所有站點信息均不能發(fā)送。
三是“ST_TABLE_E ISSTARTS”啟用開關(guān)未打開,如需發(fā)送,應(yīng)配置為“1”。
3.2.2 觸發(fā)器邏輯問題
觸發(fā)器是產(chǎn)生數(shù)據(jù)交換最原始的動力,任何進入水情表項的數(shù)據(jù)都是通過觸發(fā)器生成待發(fā)送信息,所以,觸發(fā)器本身邏輯錯誤或者觸發(fā)器被誤刪,都會造成相關(guān)表項內(nèi)容不能正確發(fā)送數(shù)據(jù)。如:遙測小時時段雨量為零,或日雨量不能發(fā)送,就是雨量觸發(fā)器本身邏輯問題所致。經(jīng)過降雨量觸發(fā)器邏輯修正,問題可得以解決。
3.2.3 數(shù)據(jù)庫故障
由于各分中心數(shù)據(jù)庫維護力量較為薄弱,疏于對數(shù)據(jù)庫性能進行優(yōu)化,導(dǎo)致各類數(shù)據(jù)庫發(fā)生故障,從而影響了水情數(shù)據(jù)交換。一般故障是因數(shù)據(jù)庫空間暴滿、硬盤損壞、核心配置參數(shù)被誤操作等造成,這就要求管理人員應(yīng)做好數(shù)據(jù)庫日常備份和維護工作。
主要原因是A 分中心代發(fā)B 中心站點信息,而省中心又將B 中心站點信息發(fā)給了A 分中心,導(dǎo)致循環(huán)往復(fù)發(fā)送,嚴重消耗系統(tǒng)資源。如遇此種情況,省中心應(yīng)將發(fā)給A 分中心的所有B 中心站點信息刪除,待B 分中心恢復(fù)后,重新配置給A 分中心。
水情數(shù)據(jù)交換緩慢,多為Oracle數(shù)據(jù)性能故障引起。主要原因是:信息配發(fā)記錄表、已處理信息記錄表、接收文件信息表等控制表信息記錄條數(shù)過大(幾百萬條),引起性能故障。處理方法:停止交換系統(tǒng)、IIS 服務(wù)、Oracle 數(shù)據(jù)庫服務(wù),重構(gòu)記錄條數(shù)過大的表(先建新表,然后移動舊表數(shù)據(jù),最后刪除舊表),釋放空間。
3.5.1 密碼問題
一是密碼過期。Oracle 安裝后,在運行過程中,不少單位出現(xiàn)了密碼過期不能登錄的問題。處理方法:將概要文件(Dba_profiles)的密碼有效期由默認的180 天修改為“無限制”。
二是密碼遺忘。管理員粗心而忘記數(shù)據(jù)庫密碼的事情常有發(fā)生。處理方法:通過操作系統(tǒng)超級用戶登錄后,解除密碼鎖定,然后重新設(shè)置密碼。
3.5.2 Oracle 配置文件被篡改
通過Tnsping 數(shù)據(jù)庫地址,報錯:TNS-12535操作超時,或ORA-12541 無監(jiān)聽程序,或TNS-01155在LISTENER.ORA 中指定的SID_LIST_LISTENER參數(shù)不正確等。這些錯誤一般是三個配置文件Listener.ora、Sqlnet.orq、Tnsnames.ora 被人為錯誤篡改造成的。處理方法:詳細檢查SID_NAME、ORACLE_HOME 等信息是否正確。另外,管理員更改服務(wù)器主機名或主機IP 地址時,要修改相關(guān)數(shù)據(jù)庫配置信息,否則會導(dǎo)致數(shù)據(jù)庫不能訪問。
3.5.3 多個數(shù)據(jù)庫實例
由于反復(fù)安裝,會導(dǎo)致多個Oracle實例,不僅影響了系統(tǒng)性能,而且導(dǎo)致管理者混淆。處理方法:刪除無用的實例。
個別分中心登錄數(shù)據(jù)庫時異常緩慢,Tnsping ip 速度很慢,或失敗,或報Listener 未啟(實際是啟動的),登錄數(shù)據(jù)庫需7 min 以上;第一個SQL 執(zhí)行很慢,但其后執(zhí)行SQL 速度正常。經(jīng)仔細排查,發(fā)現(xiàn)是因Listener.log 文件過大(4G 以上)導(dǎo)致。處理步驟:停止Oracle 服務(wù)進程,刪除Listener.log 文件。另外,也可以觀察一下Sqlnet.log 大小。
3.7.1 文件過多過大導(dǎo)致磁盤空間溢出
在inetpublogsLogFilesW3SVC1目錄下,IIS 每天產(chǎn)生“U_EX+日期.log”文件。如果不及時作刪除處理,會產(chǎn)生大量的日志文件,導(dǎo)致C 盤空間暴滿,IIS 無法正常運轉(zhuǎn)。
3.7.2 Asp.net 損壞導(dǎo)致交換系統(tǒng)無法啟動
Asp.net 損壞,會導(dǎo)致交換系統(tǒng)出現(xiàn)“無法連接到Web Service,請重新連接測試”等報錯信息。處理辦法:重新安裝Asp.net,并通過“Aspnet_regiis-i ”命令進行重新注冊。
系統(tǒng)每天產(chǎn)生大量的收發(fā)文件,其特點是單個文件小、文件數(shù)量多,如果不及時處理,時間久了會造成磁盤性能下降或占滿磁盤空間,進而導(dǎo)致系統(tǒng)運行緩慢或不能運行的故障。處理辦法:按各單位目錄,定期刪除過期收發(fā)文件。
軟件的特點就是其正確性無法自身證明,軟件代碼或多或少都存在一些缺陷或隱患,在生產(chǎn)運行中就會發(fā)生各種各樣的故障。作為管理人員,首先必須熟悉交換系統(tǒng)的原理和數(shù)據(jù)流程及重要控制的表結(jié)構(gòu)內(nèi)容,才能通過分析故障表象以及數(shù)據(jù)流轉(zhuǎn)環(huán)節(jié),有效地查找問題、解決問題。其次,要加強日常管理,如:編制存儲過程,自動清除主要控制表項過大的記錄;制作系統(tǒng)腳本,通過計劃任務(wù)刪除過期的收發(fā)文件,以保障系統(tǒng)運行足夠的空間,并定期進行數(shù)據(jù)庫性能優(yōu)化。另外,要做好應(yīng)急備份交換系統(tǒng),在復(fù)雜故障短時間內(nèi)不能解決時,可啟用備份交換系統(tǒng),以保證報汛數(shù)據(jù)的時效性和完整性,為防汛防旱提供基礎(chǔ)數(shù)據(jù)保障。