代码之家  ›  专栏  ›  技术社区  ›  Samuel Jack

分布式事务是在Windows安装程序自定义操作中启用数据库升级回滚的好主意吗?

  •  0
  • Samuel Jack  · 技术社区  · 14 年前

    我需要支持SQLServer2005和更高版本的所有版本。

    在我看来,问题在于windowsinstaller分两个阶段工作:它完成这项工作,同时存储撤销信息。然后,当所有的片段都就位时,它要么提交(删除撤销信息),要么执行回滚。

    这意味着标准事务无法完成这项工作。它们必须在我的executecustom操作中完成,我以后没有机会回滚它们。

    copy-only backup 如果需要的话,我可以在回滚操作中恢复数据库,但我认为这种方法虽然简单,但也有缺点。例如,我不知道我们的数据库会有多大,所以我不能保证目标机器上有足够的空间来保存备份。另外,备份和恢复可能需要一段时间才能完成,我不希望典型的安装(在不发生回滚的情况下)速度太慢。

    看来我可以利用 TransactionInterop 类导出一个cookie,使我能够在不同的自定义操作之间共享事务。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Remus Rusanu    14 年前

    我想说的是,沿着备份/还原路径(或者创建数据库快照并在回滚时从快照还原,缺点是需要EE)进行备份/还原的风险较小。

    还有一个选择是 undo 为每个 do 脚本在升级期间运行,并在回滚期间运行撤消脚本并删除安装的影响。我知道这是一个 坚硬的 问题是,可能需要开发(和测试)的脚本数量翻了一番,并且需要一些严肃的开发人员纪律。

        2
  •  1
  •   Christopher Painter    14 年前

    一旦你进入工业实力的重型起重企业应用程序类型的情况下,我喜欢得到我的数据库配置的安装程序,并进入应用程序作为第一次运行类型的故事。你可以用C#there做更重的提升,而不受MSI的限制。