許多初學者在使用SQL Server時都會遇到使用SQL Server Management Studio無法連接遠程數據庫實例的問題,大致的錯誤描述如下:
An error has occurred while establishing a connection to the server.
(provider: Named Pipes Provider, error: 40 – Could not open a connection to SQL Server) (Microsoft SQL Server, Error: 5)
An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections. (provider: Named Pipes Provider, error: 40 – Could not open a connection to SQL Server) (Microsoft SQL Server, Error: 1326)
意思是說不能在數據庫之間建立一個連接,原因是命名管道提供者出現錯誤。其實這是一個比較典型的數據庫服務器設置問題,在局域網或廣域網中都可能會遇到,我們只需要對數據庫服務器進行一些配置便可以解決這個問題,來看看具體的步驟。
確保服務器端數據庫服務已經啟動
開始->所有程序->Microsoft SQL Server 2008->Configutation Tools,打開SQL Server Configuration Manager,點擊SQL Server Services,查看數據庫服務是否已經啟動,如果服務未開啟,手動啟動它。當然,你還可以通過點擊Windows中的開始->控制面板->管理者工具->服務,來查看相應的數據庫服務是否啟動。或者如果服務器和你的機器在同一網絡,你還可以通過命令“sqlcmd -L”(注意L要大寫)去查看該網絡內所有可用的SQL Server服務器。
在SQL Server Configuration中啟用TCP/IP
多個SQL Server服務器之間通過網絡相互通信是需要TCP/IP支持的,為使SQL Server服務器能被遠程連接必須確保TCP/IP已經啟用。按照前面介紹的步驟打開SQL Server Configuration Manager,然後打開SQL Server Network Configuration,選擇你要設置的數據庫,然後點擊TCP/IP,右鍵啟用。如果有必要,你還可以啟用Named Pipes。記住,所有的修改都必須在重啟SQL Server服務之後才能生效!
在Windows防火牆中打開SQL Server的端口號
很多時候我們在對數據庫服務器本身做了很多次設置後仍然無法成功建立遠程連接,這時就要考慮是否是防火牆在作怪。默認情況下,許多端口號和服務都會被防火牆所禁止而不能遠程訪問或執行,SQL Server默認的端口號也不例外。我們應該重新設置Windows防火牆給SQL Server添加例外。除非人為修改,默認情況下SQL Server的端口號是1433,將該端口號添加到Windows防火牆中。如果SQL Server存在命名實例,那麼也應該將SQL Server browser添加到Windows防火牆中。(有關SQL Server的命名實例將在後面介紹)
打開Windows控制面板,選擇Windows防火牆->Change Settings->Exceptions->Add Port
點擊Add port...在彈出的對話框中填入:
Name: SQL
Port Number: 1433
Protocol: Select TCP
在SQL Server管理器中啟用遠程連接
這一步通常會被數據庫管理員忽略,如果未啟用數據庫遠程連接,數據庫實例只允許在本地進行連接而不能被遠程連接,啟用遠程連接同樣非常重要。默認設置中遠程連接是被禁止的。如下圖,打開SQL Server Management Studio,右鍵點擊數據庫實例然後選擇屬性菜單。
在打開的窗口中,左側選擇Connections,然後勾選"Allow remote connections to this server"。
啟用SQL Server Browser服務
如果SQL Server在安裝時不是用的默認實例名而是自定義的實例名,並且沒有配置特定的TCP/IP端口號,那麼按照我們前面的描述SQL Server仍然不能支持遠程連接。但如果你啟用的SQL Server Browser服務,便可以通過動態TCP/IP端口號進行遠程SQL Server連接。啟用SQL Server Browser服務非常簡單,與啟用SQL Server類似,在SQL Server Configuration Manager中右鍵點擊SQL Server Browser,然後選擇啟用。啟用該服務將會影響到服務器上所有已安裝的SQL Server實例。
在防火牆中為sqlbrowser.exe應用程序創建例外
我們在前面已經提到了,自定義命名的SQL Server實例要支持遠程連接需要啟用sqlbrowser服務,Windows防火牆可能會阻止該服務執行。因此,我們必須在Windows防火牆中給sqlbrowser服務添加例外。
首先找到服務器上安裝sqlbrowser.exe程序的路徑,如C:\Program Files\Microsoft SQL Server\90\Shared\sqlbrowser.exe。如果不確定SQL Server安裝在什麼地方,你可以在Windows搜索一下文件名。與我們在前面介紹的在防火牆中添加SQL TCP/IP端口號的方法類似,給sqlbrowser.exe應用程序添加防火牆例外。
重新創建數據庫別名
創建SQL Server別名並在應用程序中使用它很常見。使用數據庫別名可以確保一旦數據庫的位置發生了變化,如更換了新的服務器,IP地址發生了變化等,應用程序中的數據庫連接字符串不用修改。否則你更換了數據庫的位置,你還要通知所有使用該數據庫的應用程序修改源代碼或配置文件中的連接字符串,這恐怕是不可能的。所以,使用數據庫別名來配置連接字符串是一個非常明智的選擇。另外,你還可以使用相同的別名來指向不同的數據庫實例,當修改別名參數時,可以馬上實現數據庫之間的切換。創建數據庫別名非常簡單,在SQL Server Configuration Manager中選擇Aliases進行創建。