【问题标题】:How to keep track of database changes如何跟踪数据库更改
【发布时间】:2021-05-16 01:15:56
【问题描述】:

我正在使用 Progress 11.6 appBuilder 和过程编辑器(和数据字典)。

我们经常对客户的数据库做修改,有两种修改:

  • 结构修改:使用数据字典的交互式 GUI 完成。
  • 数据的修改:使用过程编辑器完成这些

程序中的数据修改示例通常如下所示:

FOR EACH Table1 WHERE Table1.Field1 = <value>:
  CREATE Table2. 
  Table2.Field1 = <value>.
  Table2.Field2 = <some-other-value>.
END.

这完全违背了软件交付量的基础之一,可重复性:没有办法回到以前的状态!

因此,我正在寻找以(可自动化)可重复的方式执行此操作的方法,因此我的问题是:

  • 我们可以使用什么来代替数据字典的交互式 GUI(没有撤消功能)来执行/撤消数据库结构修改?
  • 我们可以做些什么来撤消数据库数据修改? (是否有类似Oracle redo logOracle archive log 正在进行中?)

如果您说“您在说什么?您可以在数据字典中执行“撤消事务”。”,我的意思是:
我使用数据字典执行交易,我离开数据字典,第二天客户抱怨。当我当时打开数据字典时,“撤消事务”功能被禁用。

【问题讨论】:

    标签: qa openedge progress-4gl


    【解决方案1】:

    在较高级别上,您应该创建“df 文件”(DDL 脚本)并将其应用到客户数据库,而不是手动进行更改。有很多方法可以创建这些文件,您可以使用适当的工具来自动化整个过程。

    创建 df 文件的最常用方法之一是在开发数据库中创建所需的任何新模式,然后使用数据字典工具中的“创建增量 df”工具。该工具将开发数据库模式与目标模式进行比较,并构建差异的“df 文件”(DDL 脚本)。您可以直接连接到此过程的目标数据库,也可以有一个用于此过程的空骨架数据库。

    How to create an incremental df file

    (如果您随后反转比较,您还可以创建一个反转 df 文件来撤消更改。)

    大多数 df 文件都包含附加内容 - 新表、新字段、新索引。这些都可以在线添加,并且都可以完全编写脚本。当然,单个 df 文件和所有支持脚本可以(并且应该)存储在存储库中(如 git 或其他)。

    至于数据更改脚本...没有理由不能将这些程序编写为实际程序并保存在存储库中。您可以将整个更新包含在事务中,并在合适的情况下撤消它。对于它的价值,我个人认为这不是一个好主意。尤其是当涉及大量数据时,您真的不希望创建巨大的数 GB 撤消日志。您最好使用第二个“逆向事务”脚本,它将逐步回滚。附带的好处是,如果您决定在一三天后取消更改,您仍然可以使用它。

    真正血腥的细节将取决于您的开发流程和客户变更管理流程以及可用的工具。听起来这种关系的两端都没有太多的流程或工具,所以你可能有很多冒险等待着你!

    【讨论】:

      猜你喜欢
      • 2011-08-09
      • 1970-01-01
      • 1970-01-01
      • 2016-05-10
      • 2011-08-15
      • 1970-01-01
      • 2023-03-18
      • 2018-07-07
      • 1970-01-01
      相关资源
      最近更新 更多