我们正在将一台服务器上的SQL Server 2000数据库迁移到另一台服务器上的SQL Server 2008 R2。 客户端应用程序使用用户DSN直接连接到Internet上的SQL Server。
我在旧服务器上备份了数据库,并在新服务器上进行了恢复,并且能够使用SQL Management Studiologin,运行查询等等。
新服务器中的SQL Server不是默认实例,但是我使用SQLconfigurationpipe理器将该实例的默认端口更改为1433.SQL Management Studio可以通过指定服务器IP或域名(so没有防火墙问题,或者我会认为)。
到现在为止还挺好。
当我尝试用我的客户端应用程序连接到服务器时出现问题。 我得到一个连接错误/无效的实例错误。 客户端应用程序运行在50个不同位置的大约100台计算机上,因此每个计算机的重新configuration都不能在一天内完成,从而导致一些停机时间。
我试图在我的电脑中创build一个DSN来testing连接。 如果我用一个端口号(123.123.123.123,1433)指定IP地址,那么它可以工作,但是如果我只使用IP地址(123.123.123.123),我会得到与上面相同的错误。
连接失败:
SQLState:'01000'
SQL Server错误:14
[Microsoft] [ODBC SQL Server驱动程序] [TCP / IP套接字] ConnectionOpen(无效实例())。
连接失败:
SQLState:'08001'
SQL Server错误:14
[Microsoft] [ODBC SQL Server驱动程序] [TCP / IP套接字]无效的连接。
除了SQL Server版本之外,新旧服务器和旧服务器之间唯一的区别在于旧的是默认实例,而新的服务器是新实例。
你有什么想法,我可以尝试下一步?
编辑:
我已经尝试了一些其他的事情:
结束编辑
谢谢!
路易斯·阿隆索·拉莫斯
看来,你想要实现的是不可能使用该客户端。
此问题是由于较旧的SQL客户端(特别是使用MDAC sqlsvr32.dll驱动程序)在连接到SQL Server时执行“InstanceValidity”检查的结果。 驱动程序通过“MSSQLServer”作为实例来validationInstanceValidity检查。 在这种情况下,因为侦听默认端口(1433)的实例名称被命名为“Instance01”和“Instance02”,所以它失败,因为实例名称与InstanceValidity检查不匹配。
根据在这种情况下最为方便的方法,您可能需要在客户端上指定端口,更改客户端或将命名实例更改为默认实例。
资料来源: http : //social.msdn.microsoft.com/Forums/sqlserver/en-US/7f353b59-7e7f-4ec3-adcb-e69ca2629b21/named-sql-2008-r2-server-listening-on-default-port- 1433 -用专用IP地址的,需要端口?论坛= sqldataaccess
首先validation您的SQL Server实例是否启用了TCP / IP协议。 然后检查您的SQL Server实例正在“侦听”哪个TCP / IP端口。
那么如果在这台机器上有一个防火墙检查如果在SQL Server Management Studio程序的规则(入站)中有一个exception如果是这样,那么它将能够通过防火墙,但ODBC不会。
关于服务器引用,您可以尝试引用您的服务器为“服务器名\实例名”或使用端口号,请尝试“servername,1433”或“servername \ instancename,1433”作为您的服务器地址。
您的服务器还需要知道哪个端口应答,当TCP端口为空时不意味着使用默认端口。 根据你想达到的目标,你可能需要做或者validation这些事情是否正确完成:
如何在您的服务器中设置端口分配https://dba.stackexchange.com/questions/47651/when-is-a-dynamic-port-dynamic
configuration服务器以侦听特定的TCP端口(SQL Serverconfigurationpipe理器) http://msdn.microsoft.com/en-us/library/ms177440.aspx
分配一个静态端口到SQL Server命名实例 – 并避免一个常见的陷阱http://blogs.msdn.com/b/arvindsh/archive/2012/09/08/how-to-assign-a-static-port-对一个-SQL服务器的命名实例与规避-A-共pitfall.aspx
要连接到远程SQL Server,您有两个select,一个是使用IP和端口(更安全),或者显式指定命名实例并打开UDP端口1434并启用SQL Server Browser。
原因是:只有SQL Server的命名实例可以使用dynamic端口分配过程。 在dynamic端口分配过程中,当您第一次启动SQL Server实例时,端口设置为零(0)。 因此,SQL Server从操作系统请求一个空闲的端口号。 只要端口号分配给SQL Server,SQL Server就开始监听分配的端口。
当SQL Server实例使用dynamic端口分配时,除非用户或程序员显式指定端口,否则在SQL Server客户端上构build的连接string不会指定目标TCP / IP端口。 因此,SQL Server客户端库在UDP端口1434上查询服务器以收集有关SQL Server的目标实例的信息。 当SQL Server返回信息时,SQL Server客户端库将数据发送到SQL Server的相应实例。
如果UDP端口1434被禁用,则SQL Server客户端不能dynamic确定SQL Server的命名实例的端口。 因此,SQL Server客户端可能无法连接到SQL Server的命名实例。 在这种情况下,SQL Server客户端必须指定SQL Server 2008的命名实例的dynamic分配的端口。
此外,取决于你想要什么你可能想要使用系统ODBC,而不是一个用户的ODBC。 不同之处在于用户ODBC绑定到计算机上的一个用户帐户。
我有完全相同的问题,我设法解决它! 这是我学到的。
如果你已经安装了一个命名实例。 您不能将名称更改为默认值。 但是,您可以:使命名实例侦听默认端口。 哪些有助于从Management Studio进行连接,而无需指定实例名称,但对ODBC无效。
你可以创build别名(名字如MSSQLServer或IP地址,作为一个窍门),使您的客户端工作。 可能适用于某些应用程序。
如果这种解决方法没有帮助,那么最好的办法就是彻底卸载SQL并重新安装,但是即使您select了“默认实例”,新的安装可能会再次使用命名实例的名称。 您可以在SQL服务中validation它是否仍旧采用旧名称。 在这种情况下,最好的方法(为我工作)是安装一个名为MSSQLServer的新实例,该实例名称是默认实例名称。 这是什么将使它与ODBC的工作。
在另一个注意:SQL采取计算机名称并将其用作别名。