应用已记录的更改

如果对象已损坏或不可用,那么可以使用 Apply Journaled Changes (APYJRNCHG)Apply Journaled Changes Extend (APYJRNCHGX) 命令来恢复该对象。 如果复原使用部分事务保存的对象,那么必须先对该对象应用已记录的更改,然后该对象才可用。

AYJRNCHG 与 APYJRNCHGX 之间的差异

Apply Journaled Changes (APYJRNCHG) 命令与 Apply Journaled Changes Extend (APYJRNCHGX) 命令之间存在细微差异。 APYJRNCHGX 命令仅应用数据库文件的条目,并要求对库中的所有文件应用条目。 APYJRNCHG 命令还对非数据库对象应用项。

将已记录的更改应用于所有对象

通过在 APYJRNCHG 命令上指定 OBJ (*ALLJRNOBJ) ,可以将已记入日志的更改应用于所有已记入日志的对象。

应用已记录的更改和落实控制

通过使用落实边界 (CMTBDY) 参数,可以确保在应用日志记录的更改操作期间遵守落实事务边界。 CMTBDY 参数的缺省值为 *YES。 如果系统迂到导致应用或移除过程停止对象的日志项,那么可能不会采用落实边界。

注: 无论 CMTBDY 参数值如何,最初在落实控制下执行的任何数据库文件对象级别操作在应用期间也会在落实控制下执行。 如果最初落实了落实控制事务,那么将在应用相应落实条目时落实对象级别操作。 如果最初回滚了落实控制事务,那么应用相应回滚条目时将回滚对象级别操作。 如果落实控制操作在正在应用的日志项的范围内未结束,那么会回滚更改。

错误处理

当系统迂到无法处理的日志项时,它将结束对该特定对象或整个应用操作的应用处理。 您可以使用 APYJRNCHGAPYJRNCHGX 命令上的 "对象错误选项" (OBJERROPT) 参数来指定系统迂到无法处理的日志项时的行为方式。 如果指定 OBJERROPT (*CONTINUE) ,那么系统结束对有错误的特定对象的应用处理,但继续对应用操作中的其他对象应用处理。 如果指定 OBJERROPT (*END) ,那么系统结束整个应用操作的处理。 OBJERROPT 参数也可用于 Remove Journaled Changes (RMVJRNCHG) 命令。 按日志码应用或除去已记入日志的更改的操作将显示哪些条目类型导致对象的处理结束。

在开始应用更改之前

必须首先将对象重新建立到您知道未损坏的条件。

  • 要重新建立对象,请复原上次保存的对象副本。 在记录对象时,必须已保存该对象。
  • 如果使用 Copy File (CPYF) 命令保存了数据库物理文件,请使用 CPYF 命令通过使用旧值覆盖现有对象的内容来复原成员。
  • 如果数据库物理文件的成员刚刚初始化,请使用 Initialize Physical File Member (INZPFM) 命令或用户创建的应用程序再次初始化该成员。
  • 如果数据库物理文件的成员刚刚重组,请使用 Reorganize Physical File Member (RGZPFM) 命令再次重组该成员。

如果下列任何一项为真,那么必须恢复所需的日志接收器:

  • 如果自上次保存对象 (或某个其他点) 以来删除了日志接收器。
  • 如果日志接收器是在其存储器已释放的情况下保存的。

将已记录的更改应用于对象时,其他任何人都不能使用该对象。

用于应用已记入日志的更改的起始点和停止点

当已建立对象的条件时,使用 APYJRNCHG 或 APYJRNCHGX 命令将记录在日志中的更改应用于对象。

系统将以最初所作的顺序将更改应用于对象。 您必须规划要开始和停止应用更改的位置。 使用 Display Journal (DSPJRN) 命令可识别期望的起始点和结束点。 如果对恢复过程使用控制语言 (CL) 程序,请使用以下命令:

  • Receive Journal Entry (RCVJRNE) 命令,用于在将日志项写入日志接收器时接收这些日志项。
  • Retrieve Journal Entry (RTVJRNE) 命令,用于检索日志项并将其放在程序变量中。

您还可以使用 QjoRetrieveJournalEntries API 将信息检索到高级语言 (HLL) 程序中。

正在开始应用日志项

在 APYJRNCHG 或 APYJRNCHGX 命令上,指定要应用于对象的第一个日志项。 可以从以下任一点中选择此条目:

  • 在上次保存对象之后
  • 从第一个日志项
  • 从对应于日期和时间戳记的标识序号
  • 从与特定作业对对象的使用的开始或结束相对应的标识序号,前提是未指定下列其中一项:
    • 当启动日志记录或更改对象的日志记录属性时, OMTJRNE (*OPNCLO)。
    • 当启动日志记录或更改目录或流文件的日志记录属性时, OMTJRNE (*OPNCLOSYN)。
    • 在记录对象时,日志的 RCVSIZOPT (*MINFIXLEN) 随时存在。
    • 省略作业名的 FIXLENDTA 选项。
  • 特定序号
    注: 如果使用部分事务恢复对象,那么必须指定 FROMENT (*LASTSAVE) 或 FROMENTLRG (*LASTSAVE)。

停止应用日志项

您可以在以下位置停止应用日志项:

  • 接收器范围内最后一个日志接收器中的数据结束
  • 日志中的特定条目
  • 日期和时间戳记
  • 落实边界
  • 特定作业在对象中使用数据的开始或结束,前提是您未指定以下内容:
    • 当启动日志记录或更改对象的日志记录属性时, OMTJRNE (*OPNCLO)。
    • 当启动日志记录或更改目录或流文件的日志记录属性时, OMTJRNE (*OPNCLOSYN)。
    • 在记录对象时,日志的 RCVSIZOPT (*MINFIXLEN) 随时存在。
    • 省略作业名的 FIXLENDTA 选项。
  • 指示上次恢复对象的时间的日志项
  • 特定序号

应用和除去已记入日志的更改输出文件

强烈建议您在应用已记录的更改时使用应用并除去已记录的更改输出文件。 输出文件包含应用操作处理的每个对象的记录。 它包含在应用期间创建的每个对象和删除的每个对象的记录。 当应用提前结束时,此输出文件特别有用。 查询输出文件以获取每个对象的状态要简单得多,而不是搜索作业记录消息。 在输出文件不受限制的情况下,这些消息也限制为 512。

应用更改的注意事项

应用更改的注意事项如下:

  • 将已记录的更改应用于集成文件系统对象时,需要了解集成文件系统注意事项。
  • 如果需要为少于 300 个对象应用条目,并且数据库文件只有一个成员,或者您将对文件的所有成员应用更改,那么您可能希望通过 Work with Journals (WRKJRN) 命令使用 "正向恢复" 选项。