在整理用于增量数据库更新的迁移脚本时,我发现没有一个成品数据库差异工具(根据我所调查的)可以生成我们开发过程所需的迁移脚本。与几乎所有其他开发项目一样,我们需要将生产模式与最新的开发模式保持同步,而且不会丢失生产数据。
到目前为止,我们的方法是放弃并重新创建任何非表对象(务必更新序列nextvals的适当值),然后通过删除不再存在的列,添加已创建的列,重命名类型或长度发生变化的列,添加新列定义,然后使用适当的类型转换填充更改的列来处理表差异。
当前方法完全自动化,但它不能考虑仅仅被重命名的列。对比表定义(DBMS_METADATA_DIFF)并不能提供机器可读的线索,表明一个列删除后紧接着又是一个列添加,事实上这个添加操作其实是一个列重命名。对人类来说,如果改名只是语法修正或选择了更合适的名称,那么列重命名可能是显而易见的。
我正在尝试通过编写自己的数据库差异脚本生成器并添加逻辑来识别列重命名(支持人工干预、确认等)来解决这个问题。现在,我相当确定我必须重新发明另一个轮子。
有没有好的开源库值得我一看?我更喜欢C#,但由于我正在使用Oracle,可能有一些很好的Java实现。谢谢提供任何指导。
到目前为止,我们的方法是放弃并重新创建任何非表对象(务必更新序列nextvals的适当值),然后通过删除不再存在的列,添加已创建的列,重命名类型或长度发生变化的列,添加新列定义,然后使用适当的类型转换填充更改的列来处理表差异。
当前方法完全自动化,但它不能考虑仅仅被重命名的列。对比表定义(DBMS_METADATA_DIFF)并不能提供机器可读的线索,表明一个列删除后紧接着又是一个列添加,事实上这个添加操作其实是一个列重命名。对人类来说,如果改名只是语法修正或选择了更合适的名称,那么列重命名可能是显而易见的。
我正在尝试通过编写自己的数据库差异脚本生成器并添加逻辑来识别列重命名(支持人工干预、确认等)来解决这个问题。现在,我相当确定我必须重新发明另一个轮子。
有没有好的开源库值得我一看?我更喜欢C#,但由于我正在使用Oracle,可能有一些很好的Java实现。谢谢提供任何指导。