官方文档-Update Techniques
机译官方文档存储技术基础逻辑

在单个数据库 LUW 中捆绑数据库更改的主要更新技术是使用 CALL FUNCTION …在”更新任务”中。本节介绍更新数据库的各种方法。

程序可以使用 COMMIT WORK 发送更新请求

  • 到更新工作进程,其中它是异步处理的。程序不会等待工作进程完成更新(异步更新)。
  • 分两步进行异步处理(步骤中的异步更新
  • 到更新工作进程,其中同步处理它。程序等待工作进程完成更新(同步更新)。
  • 到本地自己的工作流程。当然,在这种情况下,程序必须等到更新完成(本地更新

    异步更新

    典型的 SAP 系统安装包含对话框工作流和至少一个更新过程。更新工作流负责更新数据库。如果在对话工作流程中,通过 CALL FUNCTION … IN UPDATE TASK 存储在临时存储中的函数模块通过 ABAP 语句 COMMIT WORK 发布进行处理,则对话工作流程将不会等待更新过程完成。这种更新称为异步更新。

更新技术 - 图1

下图显示了典型的异步更新:

更新技术 - 图2

例如,假设用户希望更改数据库表中的条目,或添加新条目。他或她输入必要的数据,然后通过选择“保存”开始更新过程。这将在 ABAP 程序中启动以下过程:

  1. 首先,程序针对其他用户锁定数据库条目。为此,对排队工作流进程进行了寻址(在分布式系统中,这通过消息服务器进行)。这将在锁定表中生成相应的条目。系统会通知用户更新是否成功,或者是否由于其他用户而无法设置锁定。
  2. 如果设置了锁,程序将读取要更改的条目并对其进行修改。如果用户已创建新条目,程序将检查是否已存在具有相同键值的记录。
  3. 在当前的对话框工作流程中,程序使用 CALL FUNCTION … IN UPDATE TASK 调用函数模块,这会将更改详细信息作为表 VBLOG 中的条目写入。
  4. 程序完成后(可能在进一步的对话步骤之后),COMMIT WORK 语句将启动 SAP LUW 的最后一部分。正在处理当前对话步骤的工作流将启动更新工作进程。
  5. 根据从对话框工作进程传递给它的信息,更新工作进程从表 VBLOG 中读取属于 SAP LUW 的日志条目。
  6. 更新工作进程将此数据传递到数据库进行更新,并分析来自数据库的返回消息。如果更新成功,则更新过程将在上次数据库更改后触发数据库提交,并从表 VBLOG 中删除日志条目。如果发生错误,更新过程将触发数据库回滚,将日志条目保留在表 VBLOG 中,将其标记为包含错误,并向用户发送 SAPmail,然后用户应通知系统管理员。
  7. 锁定表中的相应条目由更新工作进程重置。

当事务的响应时间至关重要时,异步更新非常有用,并且数据库更新本身非常复杂,以至于它们证明了在 VBLOG 中记录它们的额外系统负载是合理的。如果在后台工作进程中运行事务,则异步更新没有任何优势。