【问题标题】:Switch between databases, use two databases simultaneously在数据库之间切换,同时使用两个数据库
【发布时间】:2010-12-28 15:19:33
【问题描述】:

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

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

编辑: 一些错误:

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

【问题讨论】:

  • 切换到更好的虚拟主机。
  • 同时使用两个数据库意味着是什么意思?
  • 您确定不是您的数据库导致缓慢吗?
  • @marc_s:集群是“高可用性”,而不是“负载平衡”。这是不正确的
  • 是否与您的 adhoc XML backups 有关?

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


【解决方案1】:

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

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

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

除非您愿意投入大量时间和金钱,否则最好将托管服务提供商切换到具有更好数据库支持的服务提供商。考虑到实际上有成千上万这样的公司,这是一个很容易解决的问题。

更新

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

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

【讨论】:

【解决方案2】:

不是。

数据一致性和完整性:

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

防火墙、远程服务器等:

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

误解:

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

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

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

【讨论】:

  • 辅助数据库将在另一个国家的另一台服务器上。
【解决方案3】:

如果它在您的代码中,最重要的是找到超时的原因,而不是通过优化查询等来纠正代码。

我认为您需要的是 Failover Server ,如果一台服务器出现故障,您可以在其中切换。

或者

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

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

【讨论】:

  • 没错,想想热/冷复制
  • -1 故障转移服务器无济于事。如果服务器超载,您认为同步任务会做什么?如果同步是自动的,那么它是一种高可用性解决方案(镜像、集群),这仍然意味着一台服务器随时运行。这不是负载平衡
  • 我说的是数据库服务器切换,因为在大多数情况下,您的部署策略包括 DR 服务器,因此您可以在发生故障时切换到 DR 服务器,您在实时场景中有何建议,您是否没有在部署策略中包含 DR 或故障转移服务器
  • 问题询问“同时使用两个数据库”。您的回答与此无关。对于不同的问题,这是一个很好的答案。超时 服务器故障。更有可能是糟糕的代码。
  • :),好吧,我需要休息一下,我只是读我想读的。
【解决方案4】:

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

所以你需要的是异步 sql 命令对吗?

【讨论】:

  • 是的,这可能是一个解决方案。等待超时错误不会很漂亮。
  • 我猜你知道“漂亮”绝对不匹配任何解决方案,以避免服务器故障的问题,我们尝试修补客户端而不是修复服务器......
  • @HasanGursoy :客户端在客户端/服务器的上下文中使用,服务器是您的数据库服务器,而客户端是调用应用程序(在这种情况下是一个 web 应用程序)!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多