如何將 ODBC DSN 連接到預設埠上的非預設 SQL Server 實例?
我們正在將一台伺服器上的 SQL Server 2000 數據庫遷移到另一台伺服器上的 SQL Server 2008 R2。客戶端應用程序使用使用者 DSN 直接連接到 Internet 上的 SQL Server。
我已經在舊伺服器上備份了數據庫,並在新伺服器上恢復,並且能夠使用 SQL Management Studio 登錄、執行查詢等。
新伺服器中的 SQL Server 不是預設實例,但我使用 SQL 配置管理器將該實例的預設埠更改為 1433。SQL Management Studio 只需指定伺服器 IP 或域名即可連接到正確的實例(所以沒有防火牆問題,或者我認為)。
到現在為止還挺好。
當我嘗試使用我的客戶端應用程序連接到伺服器時,問題就出現了。我收到連接錯誤/無效實例錯誤。客戶端應用程序在 50 個不同位置的大約 100 台電腦上執行,因此無法在一天內完成每台電腦的重新配置,從而導致一些停機時間。
我嘗試在我的電腦中創建一個 DSN 來測試連接。如果我使用埠號 (123.123.123.123,1433) 指定 IP 地址,它可以工作,但如果我只使用 IP 地址 (123.123.123.123),我會收到與上述相同的錯誤。
連接失敗:
SQLState:‘01000’
SQL Server 錯誤:14
$$ Microsoft $$$$ ODBC SQL Server Driver $$$$ TCP/IP Sockets $$ConnectionOpen(無效的實例())。
連接失敗:
SQLState:‘08001’
SQL Server 錯誤:14
$$ Microsoft $$$$ ODBC SQL Server Driver $$$$ TCP/IP Sockets $$無效連接。
除了 SQL Server 版本之外,我能想到的新伺服器和舊伺服器之間的唯一區別是,在舊伺服器中它是預設實例,而在新伺服器中它是命名實例。
你對我接下來可以嘗試什麼有什麼想法嗎?
編輯:
我嘗試過的其他一些事情:
- 我正在使用 SQL Server ODBC 驅動程序。如果我使用 SQL Server Native Client 驅動程序,一切都會按我的預期工作。
- 如果我使用伺服器的公共 IP 地址在同一伺服器中創建 DSN 連接,則會觀察到相同的行為。
- 如果我停止非預設實例,並在 1433 埠上執行預設實例,它會按預期工作(不指定埠)。如果我將非預設實例設置為偵聽埠 1433,我需要明確指定要連接的埠。
結束編輯
謝謝!
路易斯·阿隆索·拉莫斯
使用該客戶端似乎無法實現您想要實現的目標。
該問題是由於較舊的 SQL 客戶端(特別是使用 MDAC sqlsvr32.dll 驅動程序)在連接到 SQL Server 時執行“InstanceValidity”檢查造成的。驅動程序將“MSSQLServer”作為實例傳遞以驗證 InstanceValidity 檢查。在這種情況下,由於在預設埠 (1433) 上偵聽的實例名稱被命名為“Instance01”和“Instance02”,因此它會失敗,因為實例名稱與 InstanceValidity 檢查不匹配。
根據在這種情況下最方便的方式,您可能需要在客戶端上指定埠、更改客戶端或將命名實例更改為預設實例。