虽然为增量数据库更新整理了迁移脚本,但我发现没有任何现成的数据库差异工具(我已经研究过)将生成开发过程所需的迁移脚本。
与几乎所有其他开发项目一致,我们需要能够使生产模式与最新的开发模式保持同步,而不会丢失生产数据。
到目前为止,该方法是删除并重新创建不是表的任何对象(注意将序列的下一个序列更新为适当的值),然后通过删除不再存在的列来处理表差异,添加列已创建,重命名其类型或长度已更改的列,添加新列定义,然后使用适当的类型转换使用数据填充更改的列。
当前的方法是完全自动化的,但它没有考虑简单重命名的列。区分表定义(DBMS_METADATA_DIFF)并没有给出任何机器可理解的线索,即列之后的列添加实际上是列重命名。对于人类来说,列重命名可能是显而易见的,特别是如果重命名只是语法修正或选择更合适的名称。
我试图通过编写我自己的数据库差异脚本生成器并添加用于发现列重命名的逻辑来解决这个问题(支持人工干预,确认等)。现在,我很确定我必须重新发明另一个轮子。
有什么好的开源库我应该看看吗?我更喜欢C#但是因为它是我正在使用的Oracle,所以可能有一些很好的Java实现。任何指针都赞赏。
答案 0 :(得分:1)
我们使用RedGate SQL Compare和SQL Data Compare API在安装时在引导数据库和目标(客户端)数据库之间生成差异架构和数据更新脚本。它工作得很好。 RedGate提供了类似的Oracle产品(没有使用它,因此您的里程可能会有所不同)
http://www.red-gate.com/products/oracle-development/schema-compare-for-oracle/
PS,我知道它不是开源的,但我认为你很难找到像这样容易使用的库。