2011-09-06 84 views
0

我们在具有联合数据库的服务器场上部署了sql server的asp.net Web应用程序。我们使用存储过程(而不是准备好的sql语句)和inproc会话。由于实现高可用性的一部分(至少与控制组更改服务包),我们打算在这意味着我们做这个农场使用滚动部署:Rolling在网络农场中部署Web应用程序

  1. 关闭一组服务器的
  2. 在这些服务器上部署应用程序
  3. 调出这些服务器
  4. 关闭另一个组。对所有组重复1-3。

虽然这意味着有些用户会被启动,但应用程序仍然可用,维护页面不需要维护。

简单的部分是部署Web应用程序,但更困难的部分是如果存储过程发生变化(例如添加了新参数)。当需要存储过程的两个版本(现有的和正在部署的新版本)时,会有一点意义。

我们考虑存储的过程4个选项:

  1. 不要只使用新的滚动部署的情况下,释放了一个存储过程变化
  2. 如果在一份新闻稿中所使用的滚动部署,存储过程将被允许,即使这意味着代码重复
  3. 在应用层中引入存储过程版本控制和某些框架组件,以自动将版本号附加到正在调用的存储过程。
  4. 覆盖现有的存储过程并允许一些存储过程调用失败。

所有的方法都有优点和缺点,而且这些3)是最可行的,也是最复杂的。 你会推荐哪一个?有没有在SQL Server中处理这种情况的技巧?还有其他方法吗?

+0

只有存储过程更改?没有其他数据库更改:表,视图,触发器等? – joerage

+0

@joerage:是的,首先,我们只在存储过程发生变化的情况下才考虑使用这种模式(其中包括90%的次要版本,服务包等),但是如果有更新的通用解决方案所有更改 – Kiran

回答

0

如果您想要涵盖对数据库的任何类型更改,您可能需要查看database mirroring and rolling upgrades。从链接

摘录:

提高生产数据库的升级过程中的可用性。

为了最大限度地减少镜像数据库的停机时间,可以顺序升级参与数据库镜像会话的SQL Server实例。这将导致只有单一故障转移的停机时间。这种升级形式被称为滚动升级。

+0

从链接中,它看起来应该用于修补数据库服务器本身而不是应用程序代码。 – Kiran