【问题标题】:JDBC SQL Server Database MigrationsJDBC SQL Server 数据库迁移
【发布时间】:2010-03-07 00:13:04
【问题描述】:

我正在开发一个 Java Web 应用程序(Adobe Flex 前端、JPA/Hibernate/BlazeDS/Spring MVC 后端),很快我将无法再擦除数据库并重新生成它。

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

所以,我理想的解决方案是我可以编写 Rails 样式的迁移,在测试服务器上执行它们,并在验证它们工作后能够写出 DBA 可以在生产服务器上执行的 SQL Server DDL (并且已经过验证可以在测试服务器上工作)。

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

我还希望将数据库操作脚本集成到此过程中(例如,通过拆分所有现有字符串的 JDBC 脚本将“名称”字段转换为“名字”、“姓氏”字段)。

任何建议将不胜感激!

【问题讨论】:

    标签: java sql-server jdbc migration database


    【解决方案1】:

    处理数据库架构更改的最佳方法是什么?

    幂等change scripts 带有版本表(以及一个应用所有更改脚本的工具,其编号大于当前存储在版本表中的版本)。还要检查提到的帖子Bulletproof Sql Change Scripts Using INFORMATION_SCHEMA Views

    要实现这一点,您可以推出自己的解决方案或使用现有工具,如DbUpdater(在change scripts 的cmets 中提到)、LiquiBasedbdeploy。后者有我的偏好。

    【讨论】:

    • 这是完美的。 LiquiBase 正是我正在寻找的工具。谢谢!
    【解决方案2】:

    我依靠休眠在生产服务器上创建它需要的任何东西。没有丢失数据的风险,因为它从不删除任何内容:它只会添加丢失的内容。

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

    【讨论】:

      猜你喜欢
      • 2011-02-05
      • 1970-01-01
      • 1970-01-01
      • 2010-12-28
      • 2013-09-25
      • 2016-05-03
      • 2011-05-30
      • 2013-11-12
      • 1970-01-01
      相关资源
      最近更新 更多