2011-08-30 54 views
3

虽然为增量数据库更新整理迁移脚本,但我发现现有的数据库差异工具(我研究过的)都不会生成我们的开发所需的迁移脚本处理。用于数据库差异的C#库

与几乎所有其他开发项目一样,我们需要能够使生产模式与最新的开发模式保持同步,而不会丢失生产数据。

到目前为止,该方法是删除并重新创建不是表的任何对象(注意将序列下一个值更新为适当的值),然后通过删除不再存在的列来处理表差异,添加已创建的列,重命名其类型或长度已更改的列,添加新的列定义,然后使用适当的类型转换使用数据填充已更改的列。

当前的方法是完全自动化的,但没有考虑只是简单地重命名的列。对表格定义(DBMS_METADATA_DIFF)进行扩展并不能提供任何机器可以理解的线索,即列放置后跟列添加实际上是列重命名。对于人来说,列重命名可能是显而易见的,特别是如果重命名只是语法更正或选择更合适的名称。

我试图通过编写我自己的数据库差异脚本生成器并添加逻辑来查找列重命名(支持人为干预,确认等)来解决此问题。现在,我很确定我必须重新发明另一个轮子。

我应该看看有没有好的开源库?我更喜欢C#,但因为它是我正在使用的Oracle,所以可能会有一些很好的Java实现。任何指针赞赏。

+1

个人我所有的手动更新脚本,我有一个数据库版本控制系统与存储过程和脚本模板,所以我总是可以确定哪些脚本已经执行谁和什么时候。我不喜欢查看自动生成的数据库模式更新脚本,如SQL比较或其他工具。我喜欢让团队中的开发人员只需手工编写他们在脚本中所做的工作,如更改表格添加列等等......便于查看和维护 –

回答

1

我们使用RedGate SQL Compare和SQL Data Compare API在安装时在我们的引导数据库和我们的目标(客户端)数据库之间生成差异模式和数据更新脚本。它工作得很好。 RedGate提供了类似的Oracle产品(未使用它,因此您的里程可能会有所不同)

http://www.red-gate.com/products/oracle-development/schema-compare-for-oracle/

PS,我知道它不是开源的,但我认为你会很难找到像这样易于使用的库。