0

我们有带有 sql server 的 asp.net Web 应用程序,它部署在带有联合数据库的服务器场上。我们使用存储过程(而不是准备好的 sql 语句)和 inproc 会话。作为实现高可用性的一部分(至少对于具有受控更改集的服务包),我们打算在服务器场上使用滚动部署,这意味着我们这样做:

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

虽然这意味着一些用户将被踢出,但该应用程序仍然可用,并且不需要放置维护页面。

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

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

  1. 如果版本有存储过程更改,请勿使用滚动部署
  2. 如果在发布中使用滚动部署,则只允许的存储过程,即使这意味着代码重复
  3. 在应用层引入存储过程版本控制和一些框架组件,以自动将版本号附加到正在调用的存储过程中。
  4. 覆盖现有存储过程并允许某些存储过程调用失败。

所有方法都有优点和缺点,其中 3) 是最可行但也最复杂的。你会推荐哪一个?sql server 中是否有任何技巧来处理这种情况?还有其他方法吗?

4

1 回答 1

0

如果您想涵盖对数据库的任何类型的更改,您可能需要查看数据库镜像和滚动升级

摘自链接:

提高了升级期间生产数据库的可用性。

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

于 2011-09-08T14:42:14.100 回答