摘要:在使用SQL Server的過程中,用戶遇到最多的問題就是連接失敗。該文就使用客戶端工具和利用用戶自己開發的客戶端程序這兩種連接SQL Sercver的方式,分析在連接過程中出現的常見錯誤,并提出解決辦法。
關鍵詞:SQL Server;連接失敗;錯誤;解決方法
中圖分類號:TP311文獻標識碼:A 文章編號:1009-3044(2009)24-6917-03
The Analysis And Solution Of Common Errors In SQL Server Connection
LIU Hua-yun
(Dept. ofSoftware, Jiangxi Vocational College of Ahead Software, Nanchang 330041, China)
Abstract: In the use of SQL Server, the user is experiencing the largest number of failed connections. This paper analyzed the common errors of SQL Server connection and provide some solution by making use of two kinds of connection way to connect SQL Server of client tools and the client program of the development of the users' own.
Key words: SQL Server; connection failed; error; solution
1 客戶端工具連接失敗
在使用SQL Server 2000自帶的客戶端工具(以企業管理器為例)連接SQL Server時,最常見的錯誤有如下一些:
1.1 SQL Server不存在或訪問被拒絕
1.1.1 錯誤描述
“SQL Server不存在或訪問被拒絕”錯誤,通常是最容易發生的(如圖1所示),因為錯誤發生的原因比較多,所以需要檢查的方面也比較多。
一般說來,有以下幾種可能性:1) 網絡連接問題;2) SQL Server服務器問題;3) 服務器端網絡配置問題;4) 客戶端網絡配置問題;5) 服務器安全設置問題。
1.1.2 解決方法及步驟
1)檢查網絡連接
a) ping服務器IP地址。首先先關閉服務器和客戶端的防火墻,這是為了排除防火墻軟件可能會屏蔽對ping,telnet等的響應。然后開始ping服務器IP地址,如果ping服務器IP地址不成功,說明物理連接有問題,這時候要檢查硬件設備,如網卡,HUB,路由器等。
b) ping服務器名稱。如果失敗則說明名字解析有問題,這時候要檢查Netbuis協議是否安裝;DNS服務是否正常。有時候客戶端和服務器不在同一個局域網里面,這時候很可能無法直接使用服務器名稱來標識該服務器,這時我們可以使用HOSTS文件來進行名字解析,具體的方法是:
a) 使用記事本打開HOSTS文件(一般情況下位于C:\\WINNT\\system32\\drivers\\etc)。
b) 添加一條IP地址與服務器名稱的對應記錄,如:172.168.21.199 myserver
其次,使用telnet命令檢查SQL Server服務器工作狀態。如果命令執行成功,可以看到屏幕一閃之后光標在左上角不停閃動,這說明SQL Server服務器工作正常,并且正在監聽1433端口的TCP/IP連接;如果命令返回“無法打開連接”的錯誤信息,則說明服務器沒有啟動SQL Server服務,也可能服務器端沒啟用TCP/IP協議,或者服務器沒有在SQL Server默認的端口1433上監聽。
2) 檢查服務器、客戶端網絡配置
服務器檢查是否啟用了命名管道;是否啟用了TCP/IP 協議等等。我們可以利用SQL Server自帶的服務器網絡使用工具來進行檢查。
單擊:程序->Microsoft SQL Server服務器網絡實用工具;打開該工具后(如圖2所示),在“常規”中可以看到服務器啟用了哪些協議,默認我們啟用命名管道以及TCP/IP協議。選中TCP/IP協議,選擇“屬性”,彈出一對話框(如圖3所示)。我們可以來檢查SQL Server服務默認端口的設置。一般而言,我們使用SQL Server默認的1433端口。如果選中“隱藏服務器”,則意味著客戶端無法通過枚舉服務器來看到這臺服務器,起到了保護的作用,但不影響連接。
3) 檢查客戶端的網絡配置
我們同樣可以利用SQL Server自帶的客戶端網絡實用工具來進行檢查,所不同的是這次是在客戶端來運行這個工具。單擊程序→ Microsoft SQL Server客戶端網絡使用工具;打開該工具后(如圖4所示),在“常規”項中,可以看到客戶端啟用了哪些協議。同樣,我們需要啟用命名管道以及TCP/IP協議。點擊TCP/IP協議,選擇“屬性”,可以檢查客戶端默認連接端口的設置,該端口必須與服務器一致。
4) 檢查服務器的安全設置
確認啟用了guest賬戶,并且確認允許通過guest帳戶從網絡訪問該服務器。
通過以上幾個方面的檢查,基本上可以排除第一種錯誤。
1.2 用戶xxx登錄失敗
1.2.1 錯誤描述
該錯誤產生的原因是由于SQL Server使用了“僅Windows”的身份驗證方式,因此用戶無法使用SQL Server的登錄帳戶(如sa)進行連接(如圖5所示)。
1.2.2 解決方法及步驟
1)在服務器端使用企業管理器,并且選擇“使用Windows身份驗證”連接上SQL Server;2)展開“SQL Server組”,鼠標右鍵點擊SQL Server服務器的名稱,選擇“屬性”,再選擇“安全性”選項卡;3)在“身份驗證”下,選擇“SQL Server和Windows”;4)重新啟動SQL Server服務。
在以上解決方法中,如果在第1步中使用“使用Windows 身份驗證”連接SQL Server失敗,那就通過修改注冊表來解決此問題:
1)點擊“開始”→“運行”,輸入regedit,回車進入注冊表編輯器;2)依次展開注冊表項,瀏覽到以下注冊表:[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\MSSQLServer\\MSSQLServer];3)在屏幕右方找到名稱“LoginMode”,雙擊編輯雙字節值;4)將原值從1改為2,點擊“確定”;5)關閉注冊表編輯器;6)重新啟動SQL Server服務。
此時,用戶可以成功地使用sa在企業管理器中新建SQL Server注冊,但是仍然無法使用Windows身份驗證模式來連接SQL Server。這是因為在SQL Server中有兩個缺省的登錄帳戶:BUILTIN\\Administrators和<機器名>\\Administrator 被刪除。
要恢復這兩個帳戶,可以使用以下的方法:
1)打開企業管理器,展開服務器組,然后展開服務器;2)展開“安全性”,右擊“登錄”,然后單擊“新建登錄”;3)在“名稱”框中,輸入BUILTIN\\Administrators;4)在“服務器角色”選項卡中,選擇“System Administrators” ;5)點擊“確定”退出;6)使用同樣方法添加<機器名>\\Administrator 登錄。
說明:以下注冊表鍵:
HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\MSSQLServer\\MSSQLServer\\LoginMode的值決定了SQL Server將采取何種身份驗證模式。其中1表示使用“Windows 身份驗證”模式;2表示使用混合模式(Windows 身份驗證和SQL Server身份驗證)。
1.3 提示連接超時
1.3.1 錯誤描述
如果遇到這個錯誤(如圖6所示),一般而言表示客戶端已經找到了這臺服務器,并且可以進行連接,不過是由于連接的時間大于允許的時間而導致出錯。這種情況一般會發生在當用戶在Internet上運行企業管理器來注冊另外一臺同樣在Internet上的服務器,并且是慢速連接時,有可能會導致以上的超時錯誤。有些情況下,由于局域網的網絡問題,也會導致這樣的錯誤。
1.3.2 解決方法及步驟
要解決這樣的錯誤,可以修改客戶端的連接超時設置。默認情況下,通過企業管理器注冊另外一臺SQL Server的超時設置是4秒,而查詢分析器是15秒(這也是為什么在企業管理器里發生錯誤的可能性比較大的原因)。
企業管理器中的設置:
1)在企業管理器中,選擇菜單上的“工具”,再選擇“選項”;
2)在彈出的“SQL Server企業管理器屬性”窗口中,點擊“高級”選項卡;
3)在“連接設置”下的“登錄超時(秒)”右邊的框中輸入一個比較大的數字,如20。
查詢分析器中也可以在同樣位置進行設置。
2 應用程序連接失敗
2.1 錯誤描述
在應用程序中我們也會遇到類似的錯誤信息,例如:
1)Microsoft OLE DB Provider for SQL Server (0x80004005)
[DBNETLIB][ConnectionOpen (Connect()).]Specified SQL server not found.
2)Microsoft OLE DB Provider for SQL Server (0x80004005)
用戶 'sa' 登錄失敗。原因:未與信任SQL Server連接相關聯。
3)Microsoft OLE DB Provider for ODBC Drivers錯誤'80004005'。
[Microsoft][ODBC SQL Server Driver]超時已過期。
2.2 解決方法分析與步驟
首先,讓我們來詳細看以下的示意圖(如圖7所示)來了解一下使用ODBC和使用OLE DB連接SQL Server有什么不同之處。
從圖7中,我們可以看出在實際使用中,應用程序創建和使用各種ADO對象,ADO對象框架調用享用的OLE DB提供者。為了訪問SQL Server數據庫,OLE DB提供了兩種不同的方法:用于SQL Server的OLE DB提供者以及用于ODBC的OLE DB提供者。這兩種不同的方法對應于兩種不同的連接字符串,標準的連接字符串寫法如下所示:
2.2.1 使用用于SQL Server的OLE DB提供者
1)使用SQL Server身份驗證:
oConn.Open \"Provider=sqloledb;\" \"Data Source=myServerName;\" _
\"Initial Catalog=myDatabaseName;\" \"User Id=myUsername;\" _
\"Password=myPassword\"
2)使用Windows身份驗證(信任連接):
oConn.Open \"Provider=sqloledb;\" \"Data Source=myServerName;\" _
\"Initial Catalog=myDatabaseName;\" \"Integrated Security=SSPI\"
2.2.2 使用用于 ODBC 的 OLE DB 提供者(不使用 ODBC 數據源)
1)使用 SQL Server 身份驗證:
oConn.Open \"Driver={SQL Server};\" \"Server=MyServerName;\"_
\"Database=myDatabaseName;\" \"Uid=myUsername;\" \"Pwd=myPassword\"
2)使用 Windows 身份驗證(信任連接):
oConn.Open \"Driver={SQL Server};\" \"Server=MyServerName;\" _
\"Database=myDatabaseName;\" \"Trusted_Connection=yes\"
2.2.3 使用用于 ODBC 的 OLE DB 提供者(使用 ODBC 數據源)
oConn.Open \"DSN=mySystemDSN;\" \"Uid=myUsername;\" \"Pwd=myPassword\"
如果遇到連接失敗的情況,我們只要按照客戶端工具連接失敗中所示的方法,結合程序中的連接字符串進行檢查,基本都能得到解決。另外,還有以下幾個要注意的地方:
1)配置 ODBC 數據源時,點擊“客戶端”配置選項可以讓我們指定連接使用的網絡庫、端口號等屬性(如圖8所示)。
2)如果遇到連接超時的錯誤,我們可以在程序中修改Connection對象的超時設置,再打開該連接。例如:
<%
Set Conn = Server.CreateObject(\"ADODB.Connection\")
DSNtest=\"DRIVER={SQL Server};SERVER=ServerName;UID=USER;PWD=password;DATABASE=mydatabase\"
Conn.Properties(\"Connect Timeout\") = 15 '以秒為單位
Conn.open DSNtest
%>
3)如果遇到查詢超時的錯誤,我們可以在程序中修改Recordset對象的超時設置,再打開結果集。例如:
Dim cn As New ADODB.Connection
Dim rs As ADODB.Recordset
. . .
cmd1 = txtQuery.Text
Set rs = New ADODB.Recordset
rs.Properties(\"Command Time Out\") = 300
'同樣以秒為單位,如果設置為 0 表示無限制
rs.Open cmd1, cn
rs.MoveFirst
3 結束語
該文針對大部分用戶在使用SQL Server過程中常見的連接失敗的錯誤,重點討論了在使用 SQL Server 客戶端工具以及用戶開發的應用程序兩種情況下,如何診斷并解決連接失敗的錯誤。看過本文以后,相信每一個讀者都會對 SQL Server 的連接工作原理、身份驗證方式以及應用程序開發等有一個較為全面而深入的了解。
參考文獻:
[1] 微軟公司.sql server自帶的幫助文檔“sql server Books online”[M/OL],2000, http://msdn.microsoft.com/zh-cn/default.aspx.
[2] 微軟公司.Microsoft SQL Server 2000 系統管理(英文影印版)[M].北京:北京大學出版社,2001.
[3] 微軟公司.微軟指定MCSE教材——Microsoft SQL Server2000數據庫設計與實現(影印版)[M].北京: 北京大學出版社, 2001.
[4] CSDN.SQL Server連接中的三個最常見錯誤[EB/OL].http://www.newasp.net/tech/data/4379.html.
[5] 微軟公司.Microsoft SQL Server 2000數據庫管理[M].北京: 北京希望電子出版社,2001.
[6] 求是科技.SQL Server2000數據庫管理與開發技術大全[M].北京:人民郵電出版社,2004.