首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何生成从旧数据库迁移到新DB的SQL脚本?

如何生成从旧数据库迁移到新DB的SQL脚本?
EN

Stack Overflow用户
提问于 2012-08-23 16:21:40
回答 1查看 1.2K关注 0票数 1

我们正在使用java和oracle11g为客户开发一个基于web的解决方案。该项目是为客户安装的,但其大部分功能正在开发中。每个月,我们发布一个新的版本,应该安装在客户网站。问题是,在每个版本中,DB (表、视图、SPs、触发器等)都有很多变化。我无法从开发线获得转储,并将其带到客户站点。

问题是如何生成一个SQL脚本来将customer的模式迁移到它的新版本(开发版本)?是否有自动生成脚本的工具?在java中有任何开源代码可以做到这一点吗?在这个问题上有什么最佳做法吗?

编辑

根据答案,最好的做法似乎是禁止开发人员直接更改DB方案,他们应该为每个DB更新编写和提交一个更改脚本。但是使用这种方法,过一段时间后,会出现大量的更改脚本,每个脚本都在DB中保存一个特定的更新。然后,我如何管理这些大量脚本?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-23 20:12:41

简单的回答是,考虑到您描述的情况,您需要进行大量的工作,以便在以前的版本和下一个版本之间找到一个点到点的迁移脚本。

数据库差异工具确实存在,但是在这个博客文章中最好描述的概念中存在一个普遍的缺陷:

http://blog.liquibase.org/2007/06/the-problem-with-database-diffs.html

TL;DR: diff工具无法确定特定更改的上下文。例如,如果在开发过程中更正了列名中的拼写错误,则需要在现有数据库上使用重命名列命令,以保留表中已经保存的任何数据。数据库diff工具只能看到新模式中不存在的旧列,也只能看到旧模式中不存在的新列。因此,该工具将删除旧列,并添加新列,但结果是,原来在该列中的所有数据现在都消失了。

作为最佳实践,我建议您主动跟踪数据库更改。像Django和Rails这样的较新的web框架支持迁移跟踪,但是像Liquibase (上面的链接)这样的开源解决方案也存在于Java世界。我们在我目前的公司使用Liquibase,到目前为止我们已经成功地将这些迁移成本降到最低。我们在经历了您现在所面临的这种迁移之后,进行了转换。

祝好运!

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12096083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档