C#数据库差异比较库

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

1
个人而言,我会手动编写所有更新脚本,并使用存储过程和脚本模板进行数据库版本控制,以便随时确定已由谁何时执行了哪些脚本。我不喜欢审核自动生成的数据库模式更新脚本,例如 SQL Compare 或其他工具。我喜欢让团队中的开发人员简单地手写他们在脚本中所做的事情,例如 alter table add column 等等……这样易于审核和维护。 - Davide Piras
1个回答

1
我们在安装时使用RedGate SQL Compare和SQL Data Compare API生成引导数据库和目标(客户端)数据库之间的差异模式和数据更新脚本。它非常有效。RedGate还提供了一个类似的Oracle产品(我没有使用过,所以效果可能有所不同)。
请参考http://www.red-gate.com/products/oracle-development/schema-compare-for-oracle/
顺便说一句,我知道它不是开源的,但我认为你很难找到一个像这样易于使用的库。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接