如何跟踪数据库更改

时间:2021-02-12 09:29:23

标签: qa openedge progress-4gl

我正在使用 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 之类的正在进行中?)

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

提前致谢

1 个答案:

答案 0 :(得分:2)

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

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

How to create an incremental df file

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

大多数 df 文件由添加项组成 - 新表、新字段、新索引。这些都可以在线添加,并且都可以完全编写脚本。而且,当然,各个 df 文件和所有支持脚本都可以(并且应该)存储在存储库中(例如 git 或其他任何东西)。

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

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

相关问题