我刚刚将所有数据库从一台服务器移动到另一台集群服务器。新的 SQL Server 2008 R2(企业版)安装在非标准端口上使用命名实例。SQL 在 Windows Server 2008 R2 Enterprise 服务器上运行。我的 Web 服务器在 Windows Server 2008 Enterprise 上运行。这些数据库由三个不同的网站使用,它们都托管在一台服务器上。移动数据库后,我更改了网站中的数据库连接字符串,然后检查它们是否工作正常。
只有其中一个网站在工作。我更改了非工作站点上的连接字符串以指定 SQL 正在侦听的端口号。这使另一个站点正常工作。第三个站点仍然没有工作。
我尝试了一个 iisreset (真的是出于绝望),但现在第一个最初工作的站点无法正常工作。只有使用指定端口号的第二个站点正在运行。
我禁用了 Web 服务器和数据库服务器之间的防火墙规则,现在所有三个站点都可以正常工作。但是防火墙被禁用了,所以我不能这样。
我不知道为什么防火墙会阻止服务器上的一个站点连接到数据库,而不是另一个站点,以及为什么只有将端口号明确添加到数据库连接字符串中才能连接第三个站点. 我也对 iisreset 如何产生任何影响(阻止第一个站点工作)感到困惑。
- Windows 防火墙已关闭
- SQL 浏览器服务正在运行
- SQL 肯定在我认为它正在运行的端口上运行
- TCP 和 UDP 端口 1434 和运行 SQL 的端口号都在防火墙上打开
- 旧数据库全部脱机,因此站点不可能仍然以某种方式连接到原始位置
- 来自网站服务器的 sql 集群的 nslookup 工作正常
- 禁用防火墙后,这些站点都可以正常工作,因此(我假设)必须与防火墙相关
有任何想法吗?
一些谜团已经解决 - 一些站点可以连接而一些不能连接的原因是在 machine.config 文件中存储了两个站点正在使用的附加连接字符串。指定端口号时工作的站点没有使用此连接字符串,所以工作正常。指定端口号时,其他站点无法工作,因为我没有在 machine.config 中将端口号添加到此连接字符串中。将端口号添加到该连接字符串以及存储在 web.config 中的端口号允许所有站点工作。
此外,iisreset 起作用的原因是,一旦 IIS 知道 SQL 正在使用的端口号,它似乎会“记住”端口号,因此它不再需要依赖使用端口 1434。一旦我做了 iisreset它“忘记”了使用的端口号,因此不得不在端口 1434 上发出请求,但由于某种原因这不起作用。
所以我的问题已经从一个非常令人困惑的“有时工作”的情况变成了一个基本的“无法在端口 1434 上通信”的情况。