AS400 / DB2表编译中的Number或* NOMAX值

时间:2017-03-02 22:45:39

标签: ibm-midrange db2-400

在AS400中,表(QDDSSRC)编译(选项14)中有一些默认值。 在属性成员大小,Aditional参数:

这是放置数字或* NOMAX值的含义,如果这个数字是记录的限制或只是物理尺寸增量。

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

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

2 个答案:

答案 0 :(得分:2)

迈克给出了这个问题的简短回答,所以这是一个很长的答案。

此配置是有限磁盘空间的旧时代。有些人仍然喜欢使用它来防止失控的作业填满他们的磁盘。如果磁盘太满,系统将关闭。有几个相关的配置参数ALLOCATEREUSEDLT

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

注意,这意味着文件成员可以保存超过记录容量的记录数,但系统操作员需要手动干预才能实现此目的。

DDS表默认为10,000条初始记录和1,000条记录的3个增量。 SQL表(使用DDL定义的表)默认为maximum number of increments*NOMAX表示表中的最大记录数由系统确定。这可能受磁盘空间或数据库强加的绝对最大值的限制。

数据库限制自v7.3起

*NOMAX

SQL使用Maximum rows in a member 4,294,967,288 Maximum size of a member 1.7 terabytes 可以逃脱的一个原因是它默认重用已删除记录占用的空间。 DDS定义的文件不会这样做(unles用户更改默认值)。因此,对于DDS表,每次写入都会导致另一条记录用完。这可能导致文件填满已删除的记录,强制手动干预以回收该空间。目前的智慧是使用*NOMAXSIZE(*NOMAX)ALLOCATE(*NO)。这一劳永逸地让系统决定如何分配磁盘空间。您可以通过更改REUSEDLT(*YES)的命令默认值来获取DDS定义文件的此行为。

答案 1 :(得分:0)

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