使用 CL As400 命令抑制文件 IO

Suppressing File IO using CL As400 command

我最近接到了我的组织的任务,要在我们的 AS400 系统上修改一个大型程序。因为我之前没有使用过系统的这一部分,所以我想通过调试器 运行 它来了解它是如何工作的 - 然而我被告知 运行 宁这个程序可以即使在开发环境中也会导致不必要的数据库更改。

因此,我希望使用 CL 命令来抑制我在培训中遇到的文件 IO。不幸的是,我忘记了它的名字,无法再访问我的培训资源,也无法在网上找到任何东西。我的描述是否对应于任何已知命令(或者是否有其他我认为在这种情况下有用的命令)?

如果您的所有物理文件都使用 IMAGES(*BOTH) 进行记录,那么数据库中所做的每个更改都会被记录下来,并且可以使用 RMVJRNCHG 返回到程序启动之前的状态。

所以你必须 运行 STRJRNPF ... IMAGES(*BOTH) 一次

在您调用程序 CHGJRN ... JRNRCV(*GEN) 之前,它将在新接收器中记录更改

当你想return到之前的状态时你运行RMVJRNCHG

但记住

  • 如果您的应用执行 RGZPFM 或 CLRPFM,则您无法返回
  • 只对数据库文件有效,对数据区无效,对其他对象无效,对ifs文件无效
  • 你最好确保你有一个备份can/know如何实际恢复
  • 您最好是唯一的应用活跃用户
  • 你最好先玩玩 RMVJRNCHG,了解它是如何工作的,以及它发送的消息

顾名思义,OVRDBF 命令的 INHWRT 参数用于禁止对文件实际应用写入、更新和删除。请注意,如果试图阻止更新整个应用程序,您必须将覆盖应用于每个文件。如果应用程序写入 table,然后运行依赖于 table 中的数据的代码,那么这也将不起作用。

实际上,我从未见过 INHWRT 用于单一用途程序。

我认为处理此问题的常用方法是调整库列表,这样您就可以更新不同库中的副本,而不是更新生产文件。如果文件组织得如此糟糕以至于无法完成,您可以列出所有可能受影响的文件并在程序启动之前将它们覆盖到 QTEMP 副本。如果程序显式调用文件或 table 包括库名称,这将允许您通过文件覆盖机制而不是库来控制它。

阅读您收到的警告的字里行间,我怀疑开发人员不信任文件位置或编码风格的一致性来使用这些技术。您真的应该通读代码,看看这些技术是否可行,或者可能进行更改以允许它们工作,以便以适当隔离的方式测试更改。