示例:保存具有部分事务的对象

本示例说明了“活动时保存”功能的一种典型用途,即通过不等待落实连界来消除保存中断时间。 根据特定应用程序需求的不同,功能的具体用途可能会不同。

本示例使用检查和保存帐户。 这两个库都包含已记录的对象和这些对象的日志。 可在落实控制下进行更改,也可不在落实控制下进行更改。

本示例演示了无需等待落实边界的保存操作,该操作未结束正在对这些库中对象进行更改的应用程序。 不结束应用程序会在从介质恢复对象后,引入恢复操作的附加恢复注意事项。

使用以下步骤消除保存中断时间,无需等待落实边界:


  1. 结束事务前提交以下命令:
    SAVLIB LIB(CHK SAV)  DEV(TAP01) SAVACT(*SYNCLIB) +
    	SAVACTWAIT(30 *NOCMTBDY 30) +
    	SAVACTMSGQ(QSYSOPR) +
    	ACCPTH(*YES)
    注: 根据您的特定需要,还可以使用 SAVOBJ 或 SAVCHGOBJ 命令。

    系统等待 30 秒钟(SAVACTWAIT 参数指定),以解决检查点处理期间的每个锁定冲突。 如果未在指定时间内解决锁定冲突,那么不会保存对象。

    通过指定 ACCPTH(*YES),还可以保存逻辑文件的访问路径。 大多数情况下,在从此保存介质恢复文件后,并不构建访问路径。

    从此介质中恢复对象时需要的恢复过程取决于 CHK 和 SAV 中正在用此保存操作的时间戳记更新的每个数据库成员。

  2. 检查点处理完成时,根据 SAVACTMSGQ 参数的指定,QSYSOPR 接收消息 CPI3712。 直到 QSYSOPR 消息队列接收到 CPI3712 消息, 监视活动时保存作业可能迂到的锁定冲突
  3. 等待保存作业完成。
  4. 批处理作业完成后,验证是否保存了所有需要的对象。 如果以部分状态保存任何对象,那么必须将文件前滚或回滚为一致状态才能使用它们。

  5. 保存正在用于记录库 CHK 和 SAV 中的对象的每个日志的相应接收器。 当保存检查点处理通过连接的接收器发生时,您必须从包含已打开的任何事务的落实项开始处的接收器开始,包括要保存的接收器。 保存 OUTFILE 将为每个对象指示最早接收器的名称,这些对象需要可用于在恢复过程中使用 APYJRNCHG 命令。 如果库 CHK 或 SAV 中不存在这些接收器,那么您必须发出单独的保存请求才能保存这些接收器。
    注: 强烈建议您使用以下命令保存所有连接的接收器。
    此步骤可能需要执行多个保存命令。 请注意,保存日志接收器时不必使用“活动时保存”功能。 缺省情况下,以下命令为 SAVACT(*NO)。
    SAVOBJ OBJ (attached-receiver)+
    LIB (attached-receiver-library)+
    OBJTYPE(*JRNRCV)+
    DEV(TAP01)