qa - 如何跟踪数据库更改
问题描述
我正在使用 Progress 11.6 appBuilder 和过程编辑器(和数据字典)。
我们经常对客户的数据库进行修改,有两种类型的修改:
- 结构的修改:使用数据字典的交互式 GUI 完成。
- 数据修改:使用程序编辑器完成
过程中的数据修改示例通常如下所示:
FOR EACH Table1 WHERE Table1.Field1 = <value>:
CREATE Table2.
Table2.Field1 = <value>.
Table2.Field2 = <some-other-value>.
END.
这与软件交付量的基础之一,可重复性完全矛盾:没有办法回到以前的情况!
因此,我正在寻找以(可自动化)可重复的方式做到这一点的方法,因此我的问题是:
- 我们可以使用什么来代替数据字典的交互式 GUI(没有撤消功能)来执行/撤消数据库结构修改?
- 我们可以做些什么来撤消数据库数据修改?(是否有类似 an
Oracle redo log
或Oracle archive log
in Progress 的东西?)
如果您说“您在说什么?您可以在数据字典中执行“撤消交易”。 ”,我的意思是:
我使用数据字典执行交易,我离开数据字典,第二天客户抱怨。当我当时打开数据字典时,“撤消事务”功能被禁用。
解决方案
在高层次上,您应该创建“df 文件”(DDL 脚本)并将其应用到客户数据库,而不是手动进行更改。有很多方法可以创建这些文件,您可以使用适当的工具自动化整个过程。
创建 df 文件的最常见方法之一是在开发数据库中创建所需的任何新模式,然后使用数据字典工具中的“创建增量 df”工具。此工具将开发数据库模式与目标模式进行比较,并构建差异的“df 文件”(DDL 脚本)。您可以直接连接到此过程的目标数据库,或者您可以拥有一个用于此过程的空骨架数据库。
(如果您随后反转比较,您还可以创建一个反转 df 文件来撤消更改。)
大多数 df 文件都包含附加内容 - 新表、新字段、新索引。这些都可以在线添加,并且都可以完全编写脚本。当然,单个 df 文件和所有支持脚本可以(并且应该)存储在存储库中(如 git 或其他)。
至于数据更改脚本……没有理由不能将这些程序编写为实际程序并保存在存储库中。您可以将整个更新包含在事务中,并在合适的情况下撤消它。对于它的价值,我个人认为这不是一个好主意。尤其是当涉及大量数据时,您真的不希望创建巨大的数 GB 撤消日志。您最好使用第二个“逆向事务”脚本,它将逐步回滚。一个附带的好处是,如果您决定在一三天后取消更改,您仍然可以使用它。
真正血腥的细节将取决于您的开发过程和客户变更管理过程以及可用的工具。听起来这种关系的两端都没有太多的过程或工具,所以你可能有很多冒险等待着你!
推荐阅读
- javascript - 如何修复“node.decodeJpeg 不是函数”(tensorflow.js)?
- java - 如何模拟您使用 powermockito 监视的班级中的成员
- c - 了解 C 中的后增量概念
- python - PySide2 Qthread 崩溃
- c# - C# 输入字符串的格式不正确。使用 c# .net
- sql - 如何获取标签值并替换存储在表中的html代码中的标签
- angular - 如何使用 angular 和 typescript 从 .graphql 文件加载查询
- android - 无法登录在 android webview 中加载的 HTML 页面
- c++ - 处理 tsan lock-order-inversion 误报
- php - DOMPDF 图像未显示在服务器上