您如何处理数据库表的源代码控制管理和自动化部署(配置管理)。我在 SQL Server 环境中工作,很容易为存储过程/触发器/函数甚至作业编写删除脚本和创建文件。处理创建新数据库表的脚本也很容易。但是,如果稍后您想修改该表,则不一定只删除它并使用新字段重新创建它,以免丢失数据。有没有一种自动化的方法来处理这个问题?您是否在更新新更改的表后编写临时表并回填?(如果有很多数据可能会很粗糙)
任何建议将不胜感激。
您如何处理数据库表的源代码控制管理和自动化部署(配置管理)。我在 SQL Server 环境中工作,很容易为存储过程/触发器/函数甚至作业编写删除脚本和创建文件。处理创建新数据库表的脚本也很容易。但是,如果稍后您想修改该表,则不一定只删除它并使用新字段重新创建它,以免丢失数据。有没有一种自动化的方法来处理这个问题?您是否在更新新更改的表后编写临时表并回填?(如果有很多数据可能会很粗糙)
任何建议将不胜感激。
Red-gate 的 SQL 比较等工具在确保您拥有完整的脚本方面非常有用。您仍然可能需要手动调整它以确保对象以正确的顺序编写脚本。确保编写触发器和约束等脚本以及表。通常,您将希望使用alter 命令而不是drop 和create,尤其是在表很大的情况下。
我们所有的表和函数以及存储的过程也需要在源代码控制下,所以如果需要我们可以返回旧版本。此外,我们的 dbas 会定期删除他们在 Source COntrol 中找不到的任何内容,以防止开发人员忘记这样做。
当然,所有升级到生产的开发脚本都应该首先在 QA 或登台服务器上运行,以确保脚本在 prod 上运行之前能够正常运行(并且不需要更改)。此外,还需要考虑在 prod 上运行的时间,您不想锁定用户,尤其是在繁忙时段,而且时间表明,在周五下午晚些时候将脚本加载到生产环境通常是个坏主意。
我们在使用 Oracle DB 时也有类似的经历。我们建立了采用 SVN 和自动化脚本(从 SVN 中提取更改)以构建补丁的程序。有关详细信息,请参阅http://www.scmsupport.com/scm.php?go=home.html和http://scmsupport.wordpress.com/ 。
有一些工具可以帮助您开发架构、开发更改、版本化这些更改,并帮助您比较版本之间的差异,甚至生成 SQL 以进行 DDL 更改。
例如,查看Embarcadero Change Manager和 Embarcardero 提供的其他产品。
您可以自动创建初始创建脚本,但 ALTER 脚本确实需要根据具体情况手动编码,因为实际上您需要在其中执行自定义操作。
在任何情况下,您都需要某种方法来为每个更改创建应用和回滚脚本,并拥有一个运行它们的安装程序脚本(当然还有一个回滚来回滚它们)。这样的安装程序可能应该记住架构所在的版本,并以正确的顺序运行所有必要的迁移。
在这里查看我的文章:
http://marksverbiage.blogspot.com/2008/07/versioning-your-schema.html
它会有所不同,具体取决于您希望如何处理现有数据以及架构更改的广泛程度,但即使在 Management Studio 中,在提交更改之前,您也可以生成所有更改的脚本。
对于大量数据或存在约束或外键的情况,即使是简单的 ALTER 操作也可能需要大量时间。
哦忘了说,在将架构更改加载到生产环境之前,请确保您有一组良好的数据库备份。安全总比后悔好。