“SQL Server不存(cún)在或訪問被(bèi)拒絕”問(wèn)題的(de)解決
最近做一個項目(Asp.net+Sql Server 2000),在原來開發的機器上運行(háng)沒有任何問題.但當我在另外一台機器上調試程(chéng)序(本機調試)的時候,總出現“SQL Server不存在或訪問被(bèi)拒絕”。相信在(zài)任何(hé)一個搜索網站輸入這樣的檢索(suǒ)詞,一定會獲得n多的頁麵(miàn)。
總結(jié)起(qǐ)來的關於SQL Server連接中此類四個最常見錯(cuò)誤(wù)錯誤解決方案如下:
一(yī)."SQL Server 不存在或訪問被拒絕"
這個(gè)是最複雜的(de),錯誤發生的原因比較多(duō),需要(yào)檢查的方麵也比(bǐ)較多.
一般(bān)說來,有以下(xià)幾種可能性:
1,SQL Server名(míng)稱或(huò)IP地址拚寫有誤
2,服務器端網絡配置有(yǒu)誤
3,客戶端網絡配置(zhì)有誤(wù)
要解(jiě)決這個問題,我們一般要遵循以下的步驟來一步步找出導(dǎo)致(zhì)錯誤的原因(yīn).
============= 首先,檢查網絡物理(lǐ)連接(jiē) =============
ping <服務器IP地(dì)址(zhǐ)/服務器名稱>
如果 ping <服務(wù)器IP地址> 不成功,說明(míng)物理連接有問題,這時候(hòu)要檢查硬件設備,如網卡,HUB,路由器等.
還有一種可能是由於客戶端和服務器(qì)之間(jiān)安裝有防(fáng)火牆軟件造成的,比如(rú) ISA Server.防(fáng)火牆軟件可能(néng)會屏蔽對 ping,telnet 等(děng)的響應
因此在(zài)檢查(chá)連接問題的時候,我們要先把防火牆軟件暫時關閉(bì),或者打(dǎ)開所有被封(fēng)閉的端口.
如果ping <服(fú)務器IP地址> 成功而(ér),ping <服務器(qì)名稱> 失敗
則(zé)說明名(míng)字解析有問題,這時候要檢查 DNS 服務是(shì)否正常.
有時候客戶端和服務器不在同一個局域網裏麵(miàn),這時候(hòu)很可(kě)能無法直接(jiē)使用服務器名稱來(lái)標識該(gāi)服(fú)務器(qì),這時候我們可(kě)以使用HOSTS文件來(lái)進(jìn)行名字解析,
具(jù)體(tǐ)的方法是:
1.使用記事本打(dǎ)開HOSTS文件(一般情況下(xià)位於C:\WINNT\system32\drivers\etc).
添加一條(tiáo)IP地址與服務器名稱的對應(yīng)記錄,如:
172.168.10.24 myserver
2.或(huò)在 SQL Server 的客戶(hù)端網(wǎng)絡實用工具裏麵進行(háng)配置(zhì),後麵會有(yǒu)詳細說明.
============= 其次,使用(yòng) telnet 命令檢查SQL Server服務器工作狀(zhuàng)態 =============
telnet <服務器IP地址> 1433
如果命令(lìng)執行成功,可以看到屏幕一閃(shǎn)之(zhī)後光標在左上角不停閃動(dòng),這(zhè)說明 SQL Server 服(fú)務(wù)器工作正(zhèng)常,並且正在監聽(tīng)1433端口(kǒu)的 TCP/IP 連接(jiē)
如果命令返回"無法打開連接"的錯(cuò)誤(wù)信(xìn)息(xī),則說明服(fú)務器端(duān)沒有(yǒu)啟動 SQL Server 服(fú)務,
也(yě)可能服(fú)務器端沒啟用 TCP/IP 協議,或者服(fú)務(wù)器端沒有在 SQL Server 默認的端口(kǒu)1433上(shàng)監聽.
=============接著,我們要到服務器上檢查服務(wù)器端的網絡配置,檢(jiǎn)查是否啟用了命名管道.是否啟用了 TCP/IP 協議等等 =============
可以利用(yòng) SQL Server 自帶的服務器網絡使用工具來進行檢查.
點(diǎn)擊:程序 -- Microsoft SQL Server -- 服(fú)務器(qì)網絡使用工具
打開該工具後(hòu),在"常規"中(zhōng)可以看到服(fú)務器啟用了哪些協議.
一般而言(yán),我們(men)啟用命名管道(dào)以及 TCP/IP 協議.
點中 TCP/IP 協議,選(xuǎn)擇"屬性",我們可以來檢查 SQK Server 服務默(mò)認端口的設置
一(yī)般而言(yán),我們使用 SQL Server 默認的1433端(duān)口.如果選中"隱(yǐn)藏服務(wù)器",則意(yì)味著客戶端(duān)無法通(tōng)過枚舉服務(wù)器來(lái)看到這台服務(wù)器,起到了保護的(de)作(zuò)用,但不影響連(lián)接.
============= 接(jiē)下來我們要到客戶(hù)端檢(jiǎn)查客戶(hù)端的(de)網絡配(pèi)置(zhì) =============
我們同(tóng)樣可(kě)以利用 SQL Server 自帶的客戶端網絡使用工具來(lái)進行檢查,
所不同的是這次是(shì)在客(kè)戶端來運(yùn)行(háng)這(zhè)個工具.
點(diǎn)擊:程序(xù) -- Microsoft SQL Server -- 客戶端網絡使用工具
打開該工具(jù)後,在"常規"項中(zhōng),可以看到客戶端啟用(yòng)了哪(nǎ)些協議.
一般(bān)而(ér)言,我們同樣需要啟用命名管道以及 TCP/IP 協議.
點擊 TCP/IP 協議,選擇"屬(shǔ)性",可以檢(jiǎn)查客戶端默認連接端口的設(shè)置,該端(duān)口(kǒu)必須與服務器一致.
單擊(jī)"別(bié)名"選項(xiàng)卡,還可以為服務器配置別(bié)名.服務(wù)器的別名是用(yòng)來連接的名(míng)稱(chēng),
連接參數中的服務(wù)器是真正的服(fú)務器名(míng)稱(chēng),兩者可以相(xiàng)同或不同.別(bié)名的設置與(yǔ)使用HOSTS文件有(yǒu)相似之(zhī)處.
通過以上幾個(gè)方麵的檢(jiǎn)查,基本上可以(yǐ)排除第一種錯誤.
二."無法(fǎ)連接到服(fú)務器,用戶xxx登陸失敗(bài)"
該錯誤產生(shēng)的原因是由於SQL Server使用了"僅 Windows"的身份驗證方式(shì),
因此(cǐ)用戶(hù)無法使(shǐ)用SQL Server的登錄帳戶(如 sa )進行連接.解(jiě)決方法如下所(suǒ)示:
1.在服(fú)務(wù)器端使用企業管理器,並(bìng)且選擇(zé)"使用 Windows 身份(fèn)驗證(zhèng)"連(lián)接上 SQL Server
2.展開"SQL Server組",鼠標(biāo)右鍵點擊SQL Server服務器的名稱,選擇"屬性(xìng)",再選擇"安全性"選項卡
3.在"身份(fèn)驗(yàn)證"下,選擇(zé)"SQL Server和 Windows ".
4.重新啟動SQL Server服務.
在以上解(jiě)決方法中(zhōng),如果在第 1 步中(zhōng)使用"使用 Windows 身份驗證"連接(jiē) SQL Server 失敗,
那就通過修(xiū)改注冊表來解決(jué)此(cǐ)問題(tí):
1.點擊(jī)"開始(shǐ)"-"運行",輸入regedit,回車進入注冊表編輯器
2.依次展開注冊表項,瀏覽到以下注冊表鍵:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer]
3.在屏幕右方找到名稱"LoginMode",雙擊編輯雙字節(jiē)值
4.將(jiāng)原值從(cóng)1改為2,點擊"確定"
5.關閉注冊表編輯(jí)器
6.重新啟動SQL Server服務(wù).
此時,用(yòng)戶可以(yǐ)成功(gōng)地使用sa在企業管理(lǐ)器中新建SQL Server注(zhù)冊,
但是仍然無(wú)法使用Windows身(shēn)份驗證模(mó)式來(lái)連接(jiē)SQL Server.
這(zhè)是因為在(zài) SQL Server 中有兩個缺省的登錄帳戶(hù):
BUILTIN\Administrators
<機器(qì)名>\Administrator 被刪除.
要恢複(fù)這(zhè)兩(liǎng)個帳戶,可以使用以(yǐ)下的方法:
1.打開企業管理器,展開服務器組(zǔ),然後展開(kāi)服務器(qì)
2.展開"安(ān)全性",右擊"登(dēng)錄",然後單擊"新建(jiàn)登錄"
3.在(zài)"名稱(chēng)"框(kuàng)中,輸入 BUILTIN\Administrators
4.在"服務(wù)器角色"選項卡(kǎ)中,選擇"System Administrators"
5.點擊"確定"退(tuì)出
6.使用(yòng)同樣(yàng)方法添加 <機器(qì)名>\Administrator 登錄(lù).
說明:
以下注冊表(biǎo)鍵(jiàn):
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\LoginMode
的值決(jué)定(dìng)了SQL Server將采取何種身份驗證模式.
1.表示使用"Windows 身份驗證"模式
2.表示使用(yòng)混合模式(Windows 身份驗證和 SQL Server 身份驗證).
三(sān).提示連接超時
如果遇到第三個錯誤,一(yī)般而言表示客戶端已經找到了(le)這台服(fú)務器,並且可以進行連接,
不過是由於(yú)連接的(de)時間大於允許的時(shí)間而(ér)導致出錯.
這種情況(kuàng)一般(bān)會發生在當用戶(hù)在Internet上運行企業(yè)管理(lǐ)器來(lái)注冊另外一台同樣在Internet上的服務器,
並且是慢速連(lián)接時(shí),有可能會(huì)導(dǎo)致以上的超(chāo)時錯誤.有(yǒu)些情況下,由於(yú)局域(yù)網的網絡(luò)問(wèn)題,也會(huì)導致這樣的(de)錯誤.
要(yào)解決這樣的錯(cuò)誤,可以修(xiū)改客(kè)戶端的(de)連接超時設置.
默認情況(kuàng)下,通(tōng)過企業管理器(qì)注冊另(lìng)外一台SQL Server的(de)超時設置是 4 秒,
而(ér)查詢分析器是 15 秒(miǎo)(這也(yě)是為(wéi)什麽在企業(yè)管(guǎn)理器裏發(fā)生錯誤的可能性(xìng)比較大(dà)的原因).
具體步驟為(wéi):
企業管(guǎn)理器中的設置:
1.在企業管(guǎn)理器(qì)中,選擇菜單(dān)上的(de)"工(gōng)具",再選擇(zé)"選項"
2.在彈出的(de)"SQL Server企業管理器屬性"窗口中,點擊"高級"選(xuǎn)項(xiàng)卡
3.在"連接設置"下(xià)的"登錄(lù)超(chāo)時(shí)(秒(miǎo))"右邊的框中(zhōng)輸入(rù)一個比較大的數字,如 20.
查詢分析器中的設置:
工具 -- 選項 -- 連接 -- 將(jiāng)登錄超時設置為(wéi)一個較大的數字
四.大(dà)部分機(jī)都用Tcp/ip才能(néng)成功,有(yǒu)次我發現用Named Pipes才可以?
這是因為在(zài)windows 2000以後(hòu)的操作係(xì)統(tǒng)中,MS為解決SQL SERVER的安全問題將TCP/IP配(pèi)置
為SQLSERVER的(de)默(mò)認(rèn)連接協(xié)議,你可以在CLIENT NETWORK UTILITY中看到TCP/IP和NAME PIPE
的(de)順序。
你也可(kě)以(yǐ)在:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SuperSocketNetLib]
"ProtocolOrder"=hex(7):74,00,63,00,70,00,00,00,00,00
看到默認(rèn)的(de)協(xié)議。
2.怎麽在程序中更改Named Pipes , Tcp/ip ,其sql語句怎麽寫?
你可以在上麵提到的注冊表的(de)位置(zhì)修改(gǎi):
CLIENT端:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SuperSocketNetLib]
"ProtocolOrder"=hex(7):74,00,63,00,70,00,00,00,00,00
SERVER端(duān):
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\SuperSocketNetLib]
"ProtocolOrder"=hex(7):74,00,63,00,70,00,00,00,00,00
我(wǒ)的問題應(yīng)該屬於(yú)第一類,遺憾的是我按照上麵說(shuō)的(de)方法(fǎ)都不能解決(jué)這(zhè)個問題(tí)。我(wǒ)使用:telnet <服(fú)務(wù)器IP地址> 1433 顯示不能正確連(lián)接。按照說的方法也不能解決這個問題(tí)。有網友說出(chū)現1433端(duān)口不能(néng)連接的因(yīn)為是Sql Server 2000沒有打補丁的緣故(gù),但我打(dǎ)過sp4後仍然不能正確連接1433端口。
我在web.config裏的設置為:
<configuration>
<appSettings>
<!--"data source=SASANK;initial catalog=CODER;persist security info=False;user id=sa;workstation id=SASANK;packet size=4096"-->
<add key="ConnectionString" value=
關鍵詞:SQL,Server
閱讀本(běn)文(wén)後您有(yǒu)什麽感想? 已(yǐ)有 人給出評價!
- 2
- 2
- 2
- 2
- 2
- 2