【问题标题】:Flyway Oracle DeploymentFlyway Oracle 部署
【发布时间】:2017-12-11 03:26:40
【问题描述】:

我刚开始做一个新项目。我们正在从头开始构建一个新的应用程序。团队从一个全新的架构开始。我想自动化数据库构建过程,所以我开始寻找选项。 Flyway似乎是一个不错的选择。我一直在玩,发现该工具有一些限制。也许,有人可以提供帮助。

SQL 文件的目录结构如下: SQL -- DDL -- DML -- 包

我们正在进行敏捷开发,因此文件名基于 sprint 编号。我们使用的文件命名约定是: Sprint#_script#_userstory#_description

例如: S1_01_US123_CreateNewTable.sql S1_02_US123_AddConstraint.sql

下一个冲刺: S2_01_US456_AddColumn.sql

等等……

我设置了 JDBC 参数并且能够连接。我用几个测试脚本测试了一些基本的东西,比如:清理、修复、信息和迁移,这就像一个魅力。当我尝试部署所有脚本时,我开始遇到问题。像这样的问题: - 它不喜欢单下划线。 - 不喜欢以S1_01_*开头的文件名,其余文件名不同,在不同的文件夹中。

我有以下问题:

  • 我可以使用 Flyway 构建而无需重命名文件吗?

  • 我怎样才能让它按这个顺序部署:

    • DDL
    • DML
    • 包(每次我部署)。而且我们有一个单独的头文件和正文文件,所以也要先部署头文件。
  • 可以改变schema_version表的结构吗?

  • 我可以进行选择性清洁吗?喜欢标记一些对象不要被丢弃?

我主要关心的是运行 DDL。如果我能做到这一点,那么我就可以开始使用 Flyway 并边做边学。

提前致谢。

预兆

【问题讨论】:

    标签: deployment oracle11g version-control automation flyway


    【解决方案1】:

    我可以使用 Flyway 构建而无需重命名文件吗?

    也许吧。试验flyway.sqlMigrationSeparator 属性。尝试“_US”,它将在脚本编号之后中断。您还需要设置flyway.sqlMigrationPrefix=S

    我怎样才能让它按以下顺序部署:DDL、DML、包(每次我部署)。而且我们有一个单独的头文件和正文文件,所以也要先部署头文件。

    指定多个位置(用逗号分隔)并确保版本编号顺序有意义,就好像这些文件都在同一个目录中一样。如果从命令行运行,请使用 -X 打开调试以查看 flyway 如何收集迁移。

    此外,如果可能,您应该考虑将您的包重命名为可重复迁移(默认值:R),这样您只需要更改文件的内容以供 flyway 获取它。

    我可以更改 schema_version 表的结构吗?

    没有。这是由flyway管理的。

    我可以进行选择性清洁吗?喜欢标记一些不要被丢弃的对象?

    没有。在这种情况下,最好设置 flyway.cleanDisabled=true 以阻止意外错误。如果您希望进行额外的清理,清理前后会有回调,但我认为您可以在不深入研究代码的情况下限制清理本身。

    祝你好运!

    【讨论】:

    • 非常感谢!我一直在按照你的建议做。
    • FailiedMigration后有没有回调sql什么的?
    • @HSingh85 没有 callback 仅用于失败的迁移。您需要在afterMigrateafterEachMigrate 中管理它。另外,如果有帮助,请采纳答案。
    • 但是 afterMigrate 或 afterEachMigrate 在失败的情况下不会被调用。
    • @HSingh85;感谢您的澄清。看起来此功能已被请求 13921709
    猜你喜欢
    • 2020-12-17
    • 2013-05-24
    • 2018-09-01
    • 2020-09-09
    • 1970-01-01
    • 2020-11-04
    • 2022-06-16
    • 2018-01-03
    • 2012-11-29
    相关资源
    最近更新 更多