1. 程式人生 > >Sql為什麼連線不上伺服器上的資料庫

Sql為什麼連線不上伺服器上的資料庫

如何來解決三個最常見的連線錯誤。  
      cmd.Netstat -at
    第一個錯誤"SQL   Server   不存在或訪問被拒絕"通常是最複雜的,錯誤發生的原因比較多,需要檢查的方面也比較多。一般說來,有以下幾種可能性:  
    1、SQL   Server名稱或IP地址拼寫有誤;  
    2、伺服器端網路配置有誤;  
    3、客戶端網路配置有誤。  
    要解決這個問題,我們一般要遵循以下的步驟來一步步找出導致錯誤的原因。  
    首先,檢查網路物理連線:  
     ping   <伺服器IP地址>   或者 ping   <伺服器名稱>  
    如果   ping   <伺服器IP地址>   失敗,說明物理連線有問題,這時候要檢查硬體裝置,如網絡卡、HUB、路由器等。還有一種可能是由於客戶端和伺服器之間安裝有防火牆軟體造成的,比如   ISA   Server。防火牆軟體可能會遮蔽對   ping、te.Net   等的響應,因此在檢查連線問題的時候,我們要先把防火牆軟體暫時關閉,或者開啟所有被封閉的埠。  
    如果ping   <伺服器IP地址>   成功而   ping   <伺服器名稱>   失敗,則說明名字解析有問題,這時候要檢查   DNS   服務是否正常。有時候客戶端和伺服器不在同一個局域網裡面,這時候很可能無法直接使用伺服器名稱來標識該伺服器,這時候我們可以使用HOSTS檔案來進行名字解析,具體的方法是:  
    1、使用記事本開啟HOSTS檔案(一般情況下位於C:/WINNT/system32/drivers/etc).  
    2、新增一條IP地址與伺服器名稱的對應記錄,如:  
      172.168.10.24   myserver  
    也可以在   SQL   Server   的客戶端網路實用工具裡面進行配置,後面會有詳細說明。  
    其次,使用   te.Net   命令檢查SQL   Server伺服器工作狀態:  
     te.Net   <伺服器IP地址>   1433  
    如果命令執行成功,可以看到螢幕一閃之後游標在左上角不停閃動,這說明   SQL   Server   伺服器工作正常,並且正在監聽1433埠的   TCP/IP   連線;如果命令返回"無法開啟連線"的錯誤資訊,則說明伺服器端沒有啟動   SQL   Server   服務,也可能伺服器端沒啟用   TCP/IP   協議,或者伺服器端沒有在   SQL   Server   預設的埠1433上監聽。  
    接著,我們要到伺服器上檢查伺服器端的網路配置,檢查是否啟用了命名管道,是否啟用了   TCP/IP   協議等等。我們可以利用   SQL   Server   自帶的伺服器網路使用工具來進行檢查。  
    點選:程式   ->   Microsoft   SQL   Server   ->   伺服器網路使用工具,開啟該工具後看到的畫面如下圖所示:  
    從這裡我們可以看到伺服器啟用了哪些協議。一般而言,我們啟用命名管道以及   TCP/IP   協議。  
    點中   TCP/IP   協議,選擇"屬性",我們可以來檢查   SQK   Server   服務預設埠的設定,如下圖所示:  
    一般而言,我們使用   SQL   Server   預設的1433埠。如果選中"隱藏伺服器",則意味著客戶端無法通過列舉伺服器來看到這臺伺服器,起到了保護的作用,但不影響連線。  
    檢查完了伺服器端的網路配置,接下來我們要到客戶端檢查客戶端的網路配置。我們同樣可以利用   SQL   Server   自帶的客戶端網路使用工具來進行檢查,所不同的是這次是在客戶端來執行這個工具。  
    點選:程式   ->   Microsoft   SQL   Server   ->   客戶端網路使用工具,   開啟該工具後看到的畫面如下圖所示:  
   從這裡我們可以看到客戶端啟用了哪些協議。一般而言,我們同樣需要啟用命名管道以及   TCP/IP   協議。  
    點選   TCP/IP   協議,選擇"屬性",可以檢查客戶端預設連線埠的設定,如下圖所示。  
    該埠必須與伺服器一致。  
    單擊"別名"選項卡,還可以為伺服器配置別名。伺服器的別名是用來連線的名稱,連線引數中的伺服器是真正的伺服器名稱,兩者可以相同或不同。如下圖中,我們可以使用myserver來代替真正的伺服器名稱sql2kcn-02,並且使用網路庫   Named   Pipes。別名的設定與使用HOSTS檔案有相似之處。  
   通過以上幾個方面的檢查,錯誤   1   發生的原因基本上可以被排除。  
       
  下面我們再詳細描述如何來解決錯誤   2。  
   
    當用戶嘗試在查詢分析器裡面使用sa來連線SQL   Server,或者在企業管理器裡面使用sa來新建一個SQL   Server註冊時,經常會遇到如圖   2   所示的錯誤資訊。該錯誤產生的原因是由於SQL   Server使用了"僅   Windows"的身份驗證方式,因此使用者無法使用SQL   Server的登入帳戶(如   sa   )進行連線。解決方法如下所示:  
   
    1、   在伺服器端使用企業管理器,並且選擇"使用   Windows   身份驗證"連線上   SQL   Server;  
   
    2、   展開"SQL   Server組",滑鼠右鍵點選SQL   Server伺服器的名稱,選擇"屬性",再選擇"安全性"選項卡;  
   
    3、   在"身份驗證"下,選擇"SQL   Server和   Windows   "。  
   
    4、   重新啟動SQL   Server服務。  
   
    在以上解決方法中,如果在第   1   步中使用"使用   Windows   身份驗證"連線   SQL   Server   失敗,那麼我們將遇到一個兩難的境地:首先,伺服器只允許了   Windows   的身份驗證;其次,即使使用了   Windows   身份驗證仍然無法連線上伺服器。這種情形被形象地稱之為"自己把自己鎖在了門外",因為無論用何種方式,使用者均無法使用進行連線。實際上,我們可以通過修改一個登錄檔鍵值來將身份驗證方式改為   SQL   Server   和   Windows   混合驗證,步驟如下所示:  
   
    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   身份驗證)。  
   
    看完如何解決前兩個錯誤的方法之後,讓我們來看一下如圖   3   所示的第三個錯誤。  
   
    如果遇到第三個錯誤,一般而言表示客戶端已經找到了這臺伺服器,並且可以進行連線,不過是由於連線的時間大於允許的時間而導致出錯。這種情況一般會發生在當用戶在Inte.Net上執行企業管理器來註冊另外一臺同樣在Inte.Net上的伺服器,並且是慢速連線時,有可能會導致以上的超時錯誤。有些情況下,由於區域網的網路問題,也會導致這樣的錯誤。  
   
    要解決這樣的錯誤,可以修改客戶端的連線超時設定。預設情況下,通過企業管理器註冊另外一臺SQL   Server的超時設定是   4   秒,而查詢分析器是   15   秒(這也是為什麼在企業管理器裡發生錯誤的可能性比較大的原因)。具體步驟為:  
   
    1、在企業管理器中,選擇選單上的"工具",再選擇"選項";  
   
    2、在彈出的"SQL   Server企業管理器屬性"視窗中,點選"高階"選項卡;  
   
    3、在"連線設定"下的"登入超時(秒)"右邊的框中輸入一個比較大的數字,如   20。  
   
    查詢分析器中也可以在同樣位置進行設定。  
   
    簡單一點就是:  
  /**********************************/  
  1、先保證ping通  
   
  2、在dos下寫入te.Net   ip   1433不會報錯  
   
  3、用ip連如企業管理器:  
  企業管理器-->右鍵SQlserver組-->新建sqlserver註冊-->下一步-->寫入遠端例項名(IP,機器名)-->下一步-->選Sqlserver登陸-->下一步-->寫入登陸名與密碼(sa,pass)-->下一步-->下一步-->完成  
   
  4、如果還不行:  
  sqlserver伺服器-->開始選單-->SQLserver-->伺服器網路實用工具-->啟用   WinSock代理-->代理地址:(sqlserver伺服器IP)-->代理埠-->1433-->OK了  
   
  5、如果還不行:  
  sqlserver客戶端-->開始選單-->SQLserver-->客戶端網路實用工具-->別名-->新增-->寫入別名如"大力"-->"網路庫"選tcp/ip-->伺服器名稱寫入遠端ip或例項名-->OK了