【发布时间】:2018-05-29 15:50:56
【问题描述】:
我们正在将数据库迁移到新的数据中心。我的迁移计划是更新所有客户端在连接到它时使用的 DNS 记录。
我已经通过启动一个循环执行以下操作的进程对此进行了测试:
- 打开一个新的 SQL 连接,使用 DNS 条目作为服务器名称
- 使用该连接执行查询
- 关闭并释放 SQL 连接
在运行时,我更新了 DNS 条目以指向新服务器。
除非我停止并重新启动进程,否则查询将继续针对旧服务器执行。
我在使用 HttpClient 发送 Web 请求时尝试过相同的方法,并且似乎每 2 分钟刷新一次它的 DNS,但 SqlConnection 对象会一直保持原始分辨率,直到整个过程重新启动。我认为这是因为连接是池化的,当它从池中获取连接时,它不会重新验证 DNS 条目。
理想情况下,我希望避免在迁移过程中回收应用程序池和重新启动服务。有没有其他人经历过这种行为?如果是这样,您是否找到强制 SqlConnection 重新评估它用作服务器名称的 DNS 条目的方法?
【问题讨论】:
-
您能否在切换数据库服务器之前重新部署应用程序? IE。代码或配置更改是否可接受?
-
大约有 40 个单独的软件以某种方式使用此数据库服务器,所以我不希望这样做,但这并非不可能。
-
作为一个选项 - 您可能有一个不时查询 DNS 的计时器,当检测到更改时 - 清除所有连接池。
-
首先要尝试的是:在 DSN 更改后刷新连接池(msdn.microsoft.com/en-us/library/… 表示
SqlClient) - 这是否使它按预期方式工作? -
@MarcGravell 从现有答案中已经很清楚了,但是检测 DNS 更改的最佳方法是什么?
标签: c# sql-server dns connection-pooling sqlconnection