我们为外部付费客户开发产品(即我们不是只为我们控制范围内的环境生产产品的内部 IT 职能部门),我们目前必须同时支持 SQL Server 2005+ 和 Oracle 10.2+ 作为后端。我们将 TeamCity 与 Wix 一起用于 CI 和构建,这些构建将发送给我们的测试团队,显然,当测试结束时,最终会发送给我们的客户。目前我们有无数的 SQL 脚本来升级数据库。在最基本的形式中,可能有一个 DDL 脚本和一个数据脚本(每个版本、每个平台),但也可能有包含存储过程的脚本,甚至是客户端特定的脚本。根据客户端升级的版本数量(例如 2.0 到 2.7),他们可能必须以正确的顺序运行多达两打脚本。
显然,人为错误的范围很大,并且目前无法降级,并且由于脚本的自动版本编号存在缺陷(以及数据库记录已运行的脚本的相当笨拙的方式),它不是总是清楚在数据库上运行了什么。显然,这不是一个很好的情况。
我正在研究使用 Fluent Migrator 或类似的东西——不一定是 Fluent——尝试为整个过程带来更多的顺序和版本控制,但是有很多关于如何使用的文章和示例与 CI 一起,我找不到将迁移集成到 MSI 安装程序或类似设备中的任何信息。
我想做的是将它作为我们整体安装程序的一部分,或者专门为升级/降级数据库制作一个。暂时不考虑任何客户端特定的迁移,甚至可以从这样的安装程序执行通用迁移吗?如果是这样,如何在单个安装程序中针对多个平台(即同时提供 SQL 和 Oracle 迁移并在运行时确定使用哪个平台)?
我的计划是将迁移保留在单个程序集中(类似于本文中的描述),并让安装程序根据创建安装程序时包含的信息执行适当的向上/向下迁移。假设可以做到,这听起来像是一个明智的解决方案,还是有更好的方法来管理我不知道的所有这些?
非常感谢
史蒂夫