在生产环境中,我发现必须为“Microsft OLE DB Provider for SQL Server”UDL 显式指定端口 1433。像这样:
Provider=SQLOLEDB.1;User ID=USER;Data Source=IP,1433
没有指定端口,错误是:
Test connection failed because of an error in initializing provider.
[DBNETLIB][ConnectionOpen (Invalid Instance()).]Invalid connection.
相同环境,但SQL Native Client 10.1,不需要显式指定1433:
Provider=SQLNCLI10.1;Integrated Security="";Persist Security Info=False;
User ID=USER;Data Source=IP;...
针对开发 SQL Server 进行相同的测试,OLE DB UDL 不需要需要指定的默认端口。
什么情况下可能需要显式指定默认端口?
生产系统采用集群方式,具有主主动和辅助被动,以及与其建立连接的集群服务器。开发环境只是单一的SQL Server 2008。我不知道还有什么区别。如果您认为这会起作用,那为什么这很重要?
SQL Server 的客户端(在其中创建 UDL): Windows Server 2008 R2 标准版 MDAC 2.8
所有 SQL 数据库服务器: 微软 SQL Server 2008 (SP1) - 10.0.2734.0 (X64) Windows Server 企业服务包 2
预先感谢您的帮助。
最佳答案
这是集群特有的已知问题。原因是集群管理器将在一个 IP/端口上进行应答,然后将通信移交给实际(物理)服务器,该服务器可能在不同的端口上进行通信。看起来可能没有修复方法,但您已经找到了解决方法。
有关详细信息,请查看此 Microsoft Technet 文章:http://support.microsoft.com/kb/318432
关于sql-server - 为什么 SQL Server 2008 OLE DB UDL 需要显式指定端口 1433?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18491347/