Sql Server串連的連接埠問題
昨天遇到一個比較奇怪的問題,機器A、機器B,都裝有Sql Server2000,C#程式從A連B上的資料庫OK,但是從B連A的資料庫總是有異常,異常提示“在建立與伺服器的串連時出錯。在串連到 SQL Server 2005 時,在預設的設定下 SQL Server 不允許進行遠端連線可能會導致此失敗”。
由於A、B上都裝有VS2005,帶著裝了Sql Server2005Express,當時便懷疑是Sql Server2005在搞鬼,拿異常資訊上網搜了一下,按照網上的解決方案一步步配置了Sql Server2005,結果問題並沒有解決。
後來發現這些異常資訊有時候也會誤導人,實際的問題跟Sql Server2005Express並沒有關係,而是出在Sql Server2000的連接埠設定上,因為A機器上的資料庫連接埠不是預設的1433,導致程式串連不上。
關於Sql Server2000遠端連線,也找到了一篇文章,整理一下,以後可以按下面的步驟處理:
1)看Ping 伺服器IP能否能通。這個實際上是看和遠程Sql Server 2000伺服器的物理串連是否存在。如果不行,請檢查網路,查看配置,當然得確保遠程Sql Server 2000伺服器的IP拼字正確。
2) 在Dos或命令列下輸入Telnet 伺服器IP連接埠,看能否連通。如Telnet 202.114.100.100 1433。1433是Sql Server 2000的對於Tcp/IP的預設偵聽連接埠。如果這一步有問題,應該檢查以下選項:
(1)檢查遠程伺服器是否啟動了Sql Server 2000服務。如果沒有,則啟動。
(2)檢查伺服器端有沒啟用Tcp/IP協議,因為遠端連線(通過網際網路)需要靠這個協議。檢查方法是,在伺服器上開啟 開始菜單->程式->Microsoft SQL Server->伺服器網路工具 + 生產力,看啟用的協議裡是否有Tcp/IP協議,如果沒有,則啟用它。
(3)檢查伺服器的Tcp/IP連接埠是否配置為1433連接埠。仍然在伺服器網路工具 + 生產力裡查看啟用協議裡面的Tcp/IP的屬性,確保預設連接埠為1433,並且隱藏伺服器複選框沒有勾上。
事實上,如果預設連接埠被修改,也是可以的,但是在用戶端做Telnet測試時,寫伺服器連接埠號碼時必須與伺服器配置的連接埠號碼保持一致。如果隱藏伺服器複選框被勾選,則意味著用戶端無法通過枚舉伺服器來看到這台伺服器,起到了保護的作用,但不影響串連,但是Tcp/IP協議的預設連接埠將被隱式修改為2433,在用戶端串連時必須作相應的改變。
(如果連接埠不是1433,則在程式中設定連接字串時,應類似“server=192.168.6.10,2433;database=….”)
(4)如果伺服器端作業系統打過sp2補丁,則要對windows防火牆作一定的配置,要對它開放1433連接埠,通常在測試時可以直接關掉windows防火牆(其他的防火牆也關掉最好)。
(5)檢查伺服器是否在1433連接埠偵聽。如果伺服器沒有在Tcp串連的1433連接埠偵聽,則是串連不上的。檢查方法是在伺服器的dos或命令列下面輸入:netstat -a -n 或者是netstat -an,在結果清單裡看是否有類似 tcp 127.0.0.1 1433 listening 的項。如果沒有,則通常需要給Sql Server 2000打上至少sp3的補丁。