您如何处理数据库表的配置管理?

时间:2008-09-19 20:16:33

标签: sql sql-server database tsql

您如何处理数据库表的源代码管理和自动部署(配置管理)。我在SQL Server环境中工作,很容易编写drop,并为存储过程/触发器/函数甚至作业创建文件。编写新数据库表的脚本也很容易。但是,如果稍后您要修改该表,则不一定只需删除它并使用新字段重新创建它,以免丢失数据。有没有自动化的方法来处理这个问题?更新新更改的表后,您是否编写临时表并回填? (如果有大量数据,可能会很粗糙)

任何建议都将不胜感激。

6 个答案:

答案 0 :(得分:2)

像Red-gate的SQL Compare这样的工具对于确保您拥有完整的脚本非常有用。您仍可能需要手动调整它以确保以正确的顺序编写对象脚本。确保脚本触发器和约束等以及表。通常,您将需要使用alter命令而不是drop和create,尤其是在表格非常大的情况下。

我们所有的表和函数以及存储过程都需要在源代码控制之下,因此如果需要,我们可以返回旧版本。此外,我们的dbas定期删除他们在Source COntrol中找不到的任何东西,这样可以防止开发人员忘记这样做。

当然,所有升级到生产的开发脚本都应首先在QA或登台服务器上运行,以确保脚本在prod上运行之前能够正常运行(并且无需更改)。还需要考虑在prod上运行的时间,你不想锁定用户,特别是在繁忙的时间和时间已经表明在星期五下午晚些时候将脚本加载到生产通常是一个坏主意。

答案 1 :(得分:2)

我们在使用Oracle DB时有类似的经验。我们建立了采用SVN和自动脚本(从SVN中提取更改)以构建补丁的程序。 有关详细信息,请参阅http://www.scmsupport.com/scm.php?go=home.htmlhttp://scmsupport.wordpress.com/

答案 2 :(得分:1)

有一些工具可以帮助您开发模式,开发更改,对这些更改进行版本化,并帮助您比较版本之间的差异,甚至生成SQL以进行DDL更改。

例如,查看Embarcadero Change Manager以及Embarcardero提供的其他产品。

答案 3 :(得分:1)

您可以自动创建初始创建脚本,但ALTER脚本确实需要根据具体情况进行手工编码,因为在实践中您需要在其中执行自定义内容。

在任何情况下,您都需要一些为每个更改创建应用和回滚脚本的方法,并有一个运行它们的安装程序脚本(当然还有回滚它们)。这样的安装程序应该记住架构所处的版本,并按正确的顺序运行所有必要的迁移。

请参阅我的文章:

http://marksverbiage.blogspot.com/2008/07/versioning-your-schema.html

答案 4 :(得分:0)

它会有所不同,具体取决于您希望如何处理现有数据以及架构更改的范围,但即使在Management Studio中,在提交更改之前,您也可以生成所有更改的脚本。

对于大量数据或存在约束或外键的情况,即使是简单的ALTER操作也会花费大量时间。

答案 5 :(得分:0)

哦,忘了说,在将架构更改加载到生产环境之前,请确保您拥有一组良好的数据库备份。比抱歉更安全。