在数据库之间切换,同时使用两个数据库

时间:2010-12-28 15:19:33

标签: c# asp.net sql-server sql-server-2005

我有一个使用一个SQL数据库的网站,但托管公司有时非常慢,我有数据库超时,登录和类似错误。我可以实现我的代码同时使用两个数据库吗?我有存储过程,数据会定期更新。

修改 简单地说:当dbDefault关闭且无法访问时,我需要使用dbSecondary,以便Web应用程序继续运行。 Ant这两个数据库必须始终相同。

修改 一些错误:

  • 将请求发送到服务器时发生传输级错误。 (提供者:TCP提供者,错误:0 - 远程主机强行关闭现有连接。)
  • 建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。 (提供者:命名管道提供程序,错误:40 - 无法打开与SQL Server的连接)
  • 超时已过期。从池中获取连接之前经过的超时时间。这可能是因为所有池连接都在使用中并且达到了最大池大小。
  • 无法打开登录请求的数据库“db”。登录失败。用户“root”登录失败。

4 个答案:

答案 0 :(得分:4)

负载平衡和/或故障转移群集数据库服务器通常涉及大量工作。

您需要确保在两个数据库服务器之间合并复制所有数据。除非您有专用服务器,否则托管服务提供商很少提供此选项。

允许合并复制可能涉及重新设计数据库的部分内容;这可能是不可行的。

除非您愿意投入大量时间和金钱,否则只需将托管服务提供商转换为具有更好数据库支持的服务提供商,您就会好得多。考虑到有成千上万的这类公司,这是一个简单的解决方案。

<强>更新

您在编辑中发现的几乎所有错误通常都归因于未能正确处理连接,命令和读取器。您可能需要查看代码以确保正确访问sql server。每个连接,命令和阅读器都应该包含在using子句中,以确保它们被正确释放回连接池。

如果您提供数据访问代码示例(请提出新问题),我们可以帮助您重写它。

答案 1 :(得分:1)

不是。

数据一致性和完整性:

  • 您如何决定在什么时间拨打什么数据或拨打电话?
  • 写作会发生什么?

防火墙,远程服务器等:

  • 如果您使用其他托管公司,您将如何连接?

误解:

  • 一台服务器上的两个数据库=绝对没有优势。
  • 服务器可能过载,第二个数据库会使情况变得更糟

数据库超时当然可能与代码有关,它可能无法帮助您拥有2个具有相同代码或设计相同的数据库......

不是一个好的答案,但如果您的主机提供的服务很差,那么您的选择是有限的

答案 2 :(得分:1)

总是找到Timeout的原因,如果它在你的代码中,而不是通过优化查询等来纠正代码。

我认为您需要的是故障转移服务器,如果一台服务器关闭,您可以切换。

或者

你可以在web.config中维护两个连接字符串,如果一个服务器关闭,可以切换到其他服务器。

在这两种方法中,您需要设计一个策略来同步服务器。

答案 3 :(得分:1)

如果你的数据库同步(这是你要做的事情的明显要求),最好的解决方案是依赖于负载均衡器,但如果不能,我猜你的目标是运行查询同时针对两个数据库并返回第一个结果,否则您将不得不等待超时对第二个服务器运行请求。

那么你需要的是异步sql命令吗?