AS400/DB2 table 编译中的数字或 *NOMAX 值

Number or *NOMAX value in AS400/DB2 table compilation

在 AS400 中,table (QDDSSRC) 编译 (Opt 14) 中有一些默认值。 在属性Member Size, Additional parameters:

这是放一个数字或*NOMAX 值的意思,如果这个数字是记录的限制或只是一个物理大小增量。

案例一: 会员规模 初始记录数______ 100000

案例2: 会员规模 初始记录数______ *NOMAX

*NOMAX 表示文件的每个成员可以添加的记录数没有最大值,除了由操作系统决定而不是这个参数值。当设置为 *NOMAX 增量将不会发生。

Mike 给出了这个问题的简短答案,所以这里是长答案。

此配置是从过去的有限磁盘 space 中保留下来的。有些人仍然喜欢使用它来防止失控的作业填满他们的磁盘。如果磁盘太满,系统将关闭。有几个相关的配置参数,ALLOCATEREUSEDLT.

SIZE 属性的工作原理如下。它包含三个部分:initial number of recordsincrement number of recordsmaximum number of increments。将成员添加到物理文件(或源物理文件)时,将为该文件分配 initial number of records。根据 ALLOCATE 属性,它可能是物理分配的,也可能是软分配的。无论如何,该文件现在可以保存那么多记录。对于像 QDDSSRC 这样的源文件,默认值为 10,000(即 10,000 行源代码)。如果一个程序想要写更多的记录,更多的 space 被增量添加。 increment number of records 确定要添加到文件中的记录数。这可能会发生指定的 maximum number of increments 次。源文件默认为 1,000 条记录的 499 个增量,因此完整的源文件成员默认为 509,000 条记录。即 10,000 + (499 * 1,000)。一旦文件成员已满,任何添加记录的尝试都会导致系统操作员队列中放置一条消息,请求增加文件大小的权限。

注意这意味着一个文件成员可以保存超过记录容量的记录数,但需要系统操作员的手动干预才能发生这种情况。

DDS tables 默认为 10,000 个初始记录和 3 个增量,每 1,000 个记录。 SQL tables(使用 DDL 定义的)默认为 *NOMAX*NOMAX表示table中的最大记录数由系统决定。这可能受到磁盘 space 或数据库强加的绝对最大值的限制。

从 v7.3 开始的数据库限制

Maximum rows in a member          4,294,967,288
Maximum size of a member          1.7 terabytes

SQL 可以使用 *NOMAX 的原因之一是它默认重用已删除记录占用的 space。 DDS 定义的文件不会这样做(除非用户更改默认值)。所以对于一个DDStable来说,每次写入都会导致另一条记录用完。这可能会导致文件填满已删除的记录,需要手动干预才能收回 space。目前的智慧是使用 SIZE(*NOMAX)ALLOCATE(*NO)REUSEDLT(*YES)。这样一劳永逸地让系统决定如何分配磁盘space。您可以通过更改 CRTPF.

的命令默认值来为 DDS 定义的文件获得此行为