■ 湖南 曹彩武
筆者在一家公立醫療機構信息科工作,近年來,醫改工已經是醫院工作中的重中之重。而利用信息化解決看病難、看病貴的問題也就成了信息科工作的重點之一。
最近,上級有關部門要求筆者單位將所有用戶在單位的就診數據上傳到上級互聯互通平臺,上傳方式是通過單位內搭建一臺前置服務器,雙網卡,一張網卡連接單位內網訪問信息系統,另一網卡連接專線進行上傳數據。
前置服務器安裝Oracle數據庫,Oracle數據庫安裝成功后,發現通過專線訪問前置機1521端口失敗,為什么會發生這種情況?請看筆者是如何對故障進行排查的。
購進服務器一臺,安裝了Windows Server 2008 R2企業版操作系統,雙網卡,前置服務器安裝了Oracle數據庫。

圖1 通過衛計專網telnet 提示連接失敗
按照上級有關部門要求,訪問相關專網網卡的IP設置成10.66.X.X,子網掩碼為255.255.254.0,網關為10.66.25.X。單位內網網卡IP設置 成192.168.0.X,子網掩碼為255.255.255.0,網關為192.168.0.X。
前置服務器需在單位信息系統中提取所有病人數據后上傳至上級有關部門,所以前置服務器需要同時與單位內網和專網進行通信。于是筆者在前置服務器上添加了兩條路由:route add 10.65.X.X mask 255.255.252.0 10.66.25.X。此路由是指訪問專網10.65.8.X網段的信息走10.66.25.254這個網關。路由route add 0.0.0.0 mask 255.255.255.0 192.168.0.X是指在訪問其他的時則走192.168.0.X這個網關。
路由添加完成后單位內網測試ping 192.168.X.X不丟包,而且telnet 192.168.X.X 1521正常訪問。
于是筆者聯系相關工程師測試能否與10.66.X.X正常通信,對方反饋說ping 10.66.X.X不丟包,網絡通信正常,但是telnet 10.66.X.X 1521顯示端口連接失敗,無法正常訪問,如圖1所示。
1521端口是Oracle數據庫的默認監聽端口。應用系統通過這個端口與Oracle數據建立連接并進行通信。如果此端口無法訪問,那么前置服務器上的數據將無法上傳到對方的服務器。
什么原因導致單位內網可以正常訪問服務器上的1521端口,而通過專網又無法訪問呢?
首先,筆者測試了在服務器上telnet 127.0.0.1 1521 發現能正常訪問,證明本機的1521端口肯定是開放的。
其次,筆者考慮可能是服務器上的殺毒軟件把1521端口封閉了,但是在醫院內網和本機上測試沒有問題,證明與殺毒軟件無關。
進一步檢查操作系統自帶防火墻是否將1521端口封閉。在防火墻高級設置、入站規則里將其他端口關閉,測試發現關閉后醫院內網無法與服務器的任何端口進行通信。于是增加一條訪問服務器TCP 1521端口的入站規則。
經測試,增加入站規則后,單位內網仍可正常訪問服務器的1521端口。但是通過專網依舊無法與1521端口通信,提示連接失敗,問題依舊。難道是網卡的原因?但是物理網卡跟服務器系統的端口沒有直接的關系,能夠ping通,證明網卡的通信肯定沒有問題。

圖2 將192.168.0.34改成服務器名hlhtserver
經過筆者的再三思考和同事們的集體討論,分析出問題應該只能出在安裝的Oracle軟件上面了。
但是Oracle在整個安裝過程中始終都沒有報錯,于是筆者開始檢查Oracle的配置文件,打開路徑“D:OracleAdministratorproduct11.2.0dbhome_1NETWORKADMINlistener.ora”文件,發現配置文件中:(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.34)(PORT=1521))。
問題找到了!如果配置文件中只有192.168.X.X通過單位內網肯定能訪問1521成功了,通過專線就肯定無法訪問1521端口了。于是嘗試將IP地址改成服務器名,(ADDRESS=(PROTOCOL=TCP)(HOST=hlhtserver)(PORT=1521)),如圖2所示。
最后,通過專線telnet 10.66.X.X 1521成功了,至此問題解決。
筆者回頭分析,認為有可能是在安裝Oracle的時候,專線并沒有開通,所以寫入配置文件的地址就成了醫院內網的IP,當專線開通后,通過專線自然就無法訪問1521端口了。筆者把該故障及相應的解決方法記錄下來,與大家分享。