許多初學者在使用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進行建立。