2010-03-07 86 views
0

我正在研究Java Web应用程序(Adobe Flex前端,JPA/Hibernate/BlazeDS/Spring MVC后端),并且很快就会达到无法再擦除数据库并重新生成它。JDBC SQL Server数据库迁移

处理DB模式更改的最佳方法是什么?生产和测试数据库是SQL Server 2005,开发人员使用MySQL,单元测试针对HSQLDB内存数据库运行。我很高兴让开发机器继续使用Hibernate擦除并重新加载来自示例数据的数据库以重新生成表格。但是,对于生产部署,DBA希望有一个他可以手动执行的DDL脚本。

因此,我的理想解决方案是我可以编写Rails式迁移,在测试服务器上执行它们,并在验证它们能够写出DBA可以在生产环境中执行的SQL Server DDL后执行它们服务器(并且已经被验证可以再次运行测试服务器)。

这是什么工具?我应该手动编写DDL(并让开发机器使用Hibernate重新生成数据库)?我可以使用像migrate4j这样的工具吗(它似乎对SQL Server的支持有限,如果有的话)?

我还希望将DB操作脚本集成到此过程中(例如,通过分割所有现有字符串的JDBC脚本将“Name”字段转换为“First Name”,“Last Name”字段) 。

任何建议将不胜感激!

回答

1

处理DB模式更改的最佳方法是什么?

幂等change scripts一个版本表(并与一些比当前存储在版本表的版本时应用所有更改脚本的工具)。还请检查提到的信息Bulletproof Sql Change Scripts Using INFORMATION_SCHEMA Views

要实现这一点,你可以推出自己的解决方案,或使用现有的工具,如DbUpdater(在change scripts意见所),LiquiBasedbdeploy。后者有我的偏好。

+0

这是完美的。 LiquiBase是我正在寻找的确切工具。谢谢! – zpinter 2010-03-07 05:47:45

0

我依靠hibernate在生产服务器上创建任何需要的东西。没有丢失数据的风险,因为它永远不会删除任何东西:它只会增加丢失的数据。

在当前的项目中,我们已经建立了一个约定,通过该约定,需要对数据库(模式或数据)进行更改的任何功能都需要提供它自己的DDL/DML片段,这意味着我们需要做的就是将片段聚合到一个脚本中并执行它以使生产更新。这些都不是大规模工作(片段的顺序变得至关重要,并非每个人都遵循约定等),但是在一个小团队和一个迭代过程中,它工作得很好。