我不希望网站出现任何停机时间。
编辑:我不能购买任何新硬件或软件。
有没有更好的方法?
编辑:注意:我的网站不使用持久信息(如会话状态),因此重新编译应用程序不会对我造成任何问题。
没有一个好的方法可以防止IIS在应用程序更新时重新启动。理论上是可能的,但需要做出的更改会超过其好处。
我认为您应该尽量将停机时间最小化,而不是完全消除它。没有人喜欢停机时间,但在很多情况下,它是必要的恶。
对于数据库更改,有一些工具可以使更新数据库的过程更加容易。我建议看一下Red Gate的SQL Compare和SQL Data Compare。这些工具可以让您比较模式和数据,并在几秒钟内同步数据库。我已经使用这两个工具几年了,它们真的是节省时间的绝佳工具。
SQL Compare:
http://www.red-gate.com/products/sql-development/sql-compare/
SQL 数据比较:
http://www.red-gate.com/products/sql-development/sql-data-compare/
如果您正在进行存储过程更改,或许可以在添加新参数时将参数设置为默认值?这样可以使您在网站发布之前移动数据库代码。
当前生产存储过程的示例...
ALTER PROCEDURE [dbo].[p_Stored_Proc_Name]
@Some_Id INT
AS
ALTER PROCEDURE [dbo].[p_Stored_Proc_Name]
@Some_Id INT,
@New_Parameter = 0
AS
你需要确保你的存储过程代码能够按照你的意愿处理 @New_Parameter = 0。
你需要使你的数据库更改向后兼容,先部署它们。然后你就可以继续处理时间问题。
我喜欢@rick schott的想法,关于使数据库更改向后兼容。但是,我认为最终你需要某种类型的集群/农场/花园。如果你有集群化的Web服务器和集群化的数据库服务器,你可以从池中取出一个Web和一个数据库,部署到那里,在那里测试应用程序。然后将它们放回池中,取出其他的,更新它们并将它们放回。
dt.Rows[0]["CustomerId"];
ORM(对象关系映射)对于减轻数据库变更非常有用。但是,这可能不适合您。因此,在重大数据库更改之外,我会尝试编写与现有模式和新模式兼容的代码。例如,使您的代码不太依赖于列是否存在(或不存在)......如果int不存在,则默认为零......如果varchar不存在,则默认为空字符串。
"计算机科学中的所有问题都可以通过另一层间接性来解决。" Butler Lampson
自动化流程!
我将编写一个批处理: