【问题标题】:How to generate DDL for deltas only between two different versions of a schema?如何仅在模式的两个不同版本之间为增量生成 DDL?
【发布时间】:2015-10-15 07:22:43
【问题描述】:

我已阅读 TOAD 和 Liquibase 都可以执行此操作,但我没有许可证。我们可以访问 OEM,并且正在使用 JDeveloper/SQLDeveloper,但似乎都没有工具可以仅在两个模式之间为 deltas 生成 DDL。

这是为了解决模式版本控制问题,我们在测试环境中有一个模式的 vx.x,在开发中有 vx.y,并且希望在 (xx-xy) 之间生成 DDL 增量以便生成和签入部署脚本。

目前,我通过从开发人员那里获取脚本并手动构建一个更新脚本来手动管理所有这些。

【问题讨论】:

  • 您表明您正在使用SQL Developer。您是否查看过它的数据库差异功能(工具--> 数据库差异)?如果您正在寻找比较特定对象,您可以使用它的购物车工具创建两个包含要比较的对象的购物车,然后在它们之间进行比较。
  • 类似于stackoverflow.com/q/19574971/409172 的复制品,尽管我个人更喜欢手动操作。通过为开发人员提供的一步部署和本地实例,生成这些脚本会相对容易。

标签: oracle version-control oracle11g schema ddl


【解决方案1】:

尝试使用包 dbms_metadata_diff。 示例

   select DBMS_METADATA_DIFF.COMPARE_ALTER('TABLE','COUNTRIES','COUNTRIES2') from dual

【讨论】:

  • 我认为这不是 Alexx 想要的。她想要两个模式之间的差异,而不是同一模式中的两个表。一个更好的例子是:DBMS_METADATA_DIFF.COMPARE_ALTER('TABLE','COUNTRIES','COUNTRIES','SCHEMA1','SCHEMA2'),但这仅适用于两种模式中都存在的对象。 OP 仍然需要分别识别需要在目标模式中创建或删除的对象。
  • 这很有帮助,因为我可以通过比较我感兴趣的所有对象来围绕这个语句编写脚本。我仍然需要确保所有内容都以正确的顺序生成(例如,添加了一列然后对该列的新约束)。谢谢!
【解决方案2】:

我确实在 SQLDeveloper 中找到了很棒的 diff 实用程序,它非常有用(在 OEM 中没有那么多?)。

我最终是在寻找一种方便的方法来生成增量 DDL。例如,SCHEMA_2.TABLE_A 是 (foo number(22), bar varchar2(100)),而 SCHEMA_1.TABLE_A 是 (foo number(22), bar varchar(100), baz CLOB)。寻找一个实用程序来生成

ALTER TABLE SCHEMA_1.TABLE_A 添加列 (baz CLOB)

我猜想在我拥有的工具中“免费”获得它是一个白日梦。 :)

我们正在为我们的开发人员使用 Flyway,我想我现在只需要手动管理迁移。

感谢大家的好建议!

干杯, 亚历克斯

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 2018-07-31
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多