1 問題的提出
某企業正常使用的一套C/S模式進銷存系統,新增加的一台客戶機在連接數據庫服務器(安裝SQL Server 2000)時出現故障提示—“[DBNETLIB][ConnectionOpen(connect()).]SQL Server 不存在或拒絕訪問”,系統無法登錄,其它的客戶機工作正常。
2 解決過程及思路
對於這種故障提示,一般資料上對此故障介紹的解決辦法是檢查客戶機上防火牆和1433端口的設置。出現故障的客戶機上安裝的是卡巴斯基6.0互聯網安全套裝,在卡巴斯基的“網絡設置”中添加1433端口後,出現的故障提示變為“一般性網絡錯誤 (recv())”,造成後面這種故障提示信息的原因很多,不易確定。為此,比較正常工作的客戶機和出現故障的客戶機的SQL SERVER客戶端設置,發現工作正常的客戶機使用“Named pipes”為優先使用的協議,使用服務器的名稱來連接數據庫服務器,出現故障的客戶機使用“tcp/ip”為優先啟用的協議,使用服務器的IP地址來連接數據庫服務器,默認端口為1433,在出現故障的客戶機上把 “Named pipes”設置為優先啟用的協議,使用服務器的名稱來連接數據庫服務器則連接正常,可以正常運行。由此確定故障與TCP/IP協議有關,在服務器(Windows 2000 SERVER SP4+SQL Server 2000,IP地址為10.140.90.249)上運行netstat –an命令,結果如下:
Active Connections
Proto Local Address Foreign Address State
……
TCP 10.140.90.249:80 10.140.90.52:2519 TIME_WAIT
TCP 10.140.90.249:80 10.140.90.52:2523 TIME_WAIT
TCP 10.140.90.249:80 10.140.90.52:2525 TIME_WAIT
TCP 10.140.90.249:80 10.140.90.52:2527 TIME_WAIT
TCP 10.140.90.249:80 10.140.90.52:2529 ESTABLISHED
TCP 10.140.90.249:80 10.140.90.52:2531 ESTABLISHED
TCP 10.140.90.249:139 0.0.0.0:0 LISTENING
TCP 10.140.90.249:1051 10.140.90.249:2161 ESTABLISHED
TCP 10.140.90.249:2161 10.140.90.249:1051 ESTABLISHED
……
從上述的內容可以看出,服務器上TCP/IP協議中沒有打開監聽1433端口,在網上搜索關於SQL Server和1433端口有關信息,發現SQL Server 7.0是默認打開1433端口,而SQL Server 2000在SP4以前是默認關閉1433端口的,詢問管理員,服務器上曾安裝過SQL Server 2000的SP4補丁,由於SQL Server 2000的版本號不顯示在“關於”中,於是進入“查詢分析器”檢查SQL Server 2000的版本號,在“查詢分析器”中執行:
SELECT @@VERSION
返回值為“8.00.194 RTM”,該值為SQL Server 2000的原始版本,進一步詢問管理員,得知在安裝SP4時沒有停止服務器上的SQL Server服務,而SQL Server 2000 SP4明確要求安裝時要停止服務器上的SQL Server服務和所有客戶端程序後才能安裝,由此判斷服務器上的SQL Server 2000 SP4沒有安裝成功。SQL Server 2000版本和版本號關系可以在網上查到。
重新在服務器上安裝SQL Server 2000 SP4,出現提示“以前進行的程序安裝創建了掛起的文件操作。運行程序之前,必須重新啟動計算機。”表明以前的SP4沒有安裝成功,重新啟動服務器,這個提示繼續出現,啟動注冊表編輯器,來到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager分支,刪除PendingFileRenameOperations項目,然後重新安裝SQL Server 2000 SP4成功。再在服務器上執行netstat –an命令,1433端口赫然在列,處於“LISTENING”狀態,把出現故障的客戶機設置為TCP/IP連接方式,啟動程序,連接順利完成,錯誤信息不再出現。
3 結束語
現在的軟件系統越來越復雜,牽扯的系統也越來越多,排除故障時不能被故障的表面現象所迷惑,要順籐摸瓜,逐步分析排除,到有關軟件系統的論壇和官方網站了解相關產品的信息,尤其是補丁信息,在排除故障時才能事半功倍,少走彎路。
這種故障在單機狀態時也會出現,一般是SQL SERVER的客戶端TCP/IP設置為優先啟用的協議,使用IP地址連接SQL SERVER,網線物理連接有問題或者IP地址設置有問題時。