我们在将 SQL 2008 R2 (10.50.1600) 作为命名实例安装时遇到了一个奇怪的问题。为了让任何外部客户端连接,我们必须遵循一定的程序,但不应该这样做。现在我确实打开了 SQL 服务器上的TCP/IP
和Named Pipes
协议并重新启动它,这不是问题。我们位于 Active Directory 域(从 Server 2003 运行)。无论服务器或客户端是什么操作系统(XP、2003、2008、Vista、7、64 位、32 位等),问题都存在。任何可以连接的东西也会出现此问题,例如 SQL Management Studio、ADO(来自我们的应用程序)等。
问题是在任何客户端可以连接到这个服务器之前,每个客户端机器必须首先通过 ODBC 连接到这个服务器(我们不使用 ODBC)。在执行此操作之前连接到 10.5 SQL 服务器的任何尝试都会导致“服务器不存在或访问被拒绝”。但是一旦我们可以在 ODBC 中连接(通过Named Pipes
),那么其他一切都开始工作了。使用计算机名称和 IP 地址时会出现同样的问题。事实上,如果我们想用计算机名\实例名连接,那么我们必须先在ODBC中这样做,然后如果我们想通过IP地址\实例名连接,那么我们也必须这样做那。
我们不得不在每台客户端计算机上执行此操作。同样,一旦 ODBC 能够通过命名管道连接到此 SQL 服务器,那么该客户端的所有未来尝试都会起作用。
什么可能导致这种情况发生?如何避免?我不应该像我们所说的那样做这个“ODBC 技巧”。我从来没有在任何其他版本的 SQL 上遇到过这个问题。