【问题标题】:Strategy for rolling back an altered table using liquibase使用 liquibase 回滚更改表的策略
【发布时间】:2014-04-24 04:30:24
【问题描述】:

我想将我的数据库从 v1.0 迁移到 v1.1,其中一项更改是更新了 Table1 中的一些值。我知道对于 INSERT,我可以很容易地包含一个删除我刚刚添加的值的回滚命令,但是表更改呢?有没有办法存储当前值并将此信息用于回滚过程(将来)?

谢谢。

【问题讨论】:

    标签: sql-server rollback liquibase


    【解决方案1】:

    您可以在变更集中指定<rollback> 块 (docs) 来描述如何回滚更改。在您的回滚标记中,您可以使用原始 SQL 或 <createTable> 标记重新描述表在更改之前的样子。

    您还可以在回滚标记中指定 changeSetId 和 changeSetAuthor 以指向将重新创建表的现有 changeSet。如果自创建对象以来没有其他更改,则此方法可能更容易,但如果自首次创建以来已修改对象的多个 changeSet 则无法正常工作。

    【讨论】:

    • 当数据丢失时,只有保留副本才能恢复。为此,可以制作表的副本(更改前的快照),并在回滚部分使用它来恢复丢失的数据。转储但有效。还将提供某些应用程序所需的审计功能。
    • 是的,您甚至可以在执行任何潜在危险操作之前通过 Liquibase execute 命令管理数据库转储。
    • 您还可以在升级之前运行 updateSQL 和 futureRollbackSQL 命令,以了解在实际执行更新之前可能难以恢复的内容。
    【解决方案2】:

    SQL Server 中的任何DDL 操作(ALTER TABLE 是其中之一)都是事务性的。

    这意味着您可以打开一个事务,对数据库对象进行更改,并回滚该事务,就好像它从未发生过一样。

    有一些例外,主要是涉及文件系统操作的操作(将文件添加到数据库等)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-13
      • 2016-05-29
      相关资源
      最近更新 更多