待定的数据定义变更
待处理的数据定义更改是不会立即生效的数据定义更改,因为必须重新组织对象才能应用更改。 当您准备好对未定义的数据进行更改时,请运行REORG实用程序,将未定义的更改应用到定义和数据中。 待定义变更的对象在方便应用变更之前仍可使用。
带有特定选项的ALTER语句可能会导致数据库对象定义的更改处于挂起状态。 当发出ALTER语句导致对象定义的更改挂起时,将进行语义验证和授权检查。 然而,表定义和数据更改不会应用,对象会处于待重组状态(AREOR),直到运行REORG实用程序解决待处理的更改。
大多数待定的数据定义变更仅适用于通用表空间,以下情况除外:
- 使用MAXPARTITIONS属性将单表简单或分段(非UTS)表空间转换为按增长分区表空间。
- 使用 SEGSIZE 属性将分区(非 UTS)表空间转换为按范围分区的表空间。
- 更改分区(非UTS)表空间的分区边界。
FL 508 使用带有移动表选项的ALTER TABLESPACE语句,将多表简单或多表分段(非UTS)表空间中的表移动到按增长分区表空间中。
SYSIBM.SYSPENDINGDDL 目录表中记录了待定的更改。 当应用待定的更改时,相关软件包将视需要失效, SYSIBM.SYSPENDINGDDL 目录表中的相应条目将被删除,并取消REORG-pending状态。
当待定的定义变更发生时
以下声明可能导致数据定义变更:
- ALTER TABLESPACE
- 下表列出了导致ALTER TABLESPACE语句作为待处理的定义变更处理的条款和特定条件。 ALTER TABLESPACE语句发出时,定义或数据不会反映这些更改。 相反,整个表空间被置于待重组状态(AREOR)。 随后对整个表空间进行重组,将待定的定义更改应用到表空间的定义和数据中。 表格空间的定义不能处于不完整状态。
条款或选项 如果……,则使用待定义的更改。 BUFFERPOOL 表空间的数据集已经创建,且满足以下任意条件: - 对于表空间或基础表空间中的任何对象,已经存在定义更改。
- 指定的缓冲池的页面大小与当前用于表空间的缓冲池不同。
DSSIZE 表空间的数据集已经创建,且满足以下任意条件:
表空间或表空间中的任何对象已经存在定义更改。
表空间使用相对页码,在表空间级别指定的 DSSIZE 值小于当前用于表空间中一个或多个分区的值。
表空间使用绝对页面编号,指定的 DSSIZE 值与当前用于表空间的值不同。
最大分区 如果表空间的数据集已经创建,且该表空间不是PBG表空间。
MEMBER CLUSTER
如果表空间的数据集已经创建,且满足以下任一条件:- 表空间或表空间中的任何对象已经存在定义更改。
- 成员集群属性被更改为不同的值。

FL 508 移动桌
已创建更改后的表空间的数据集。
页码
如果表空间的数据集已经创建,并且满足以下条件之一,则更改 PAGENUM 属性将导致表空间定义的更改:- 表空间或任何相关索引的现有定义变更。
- 指定的 PAGENUM 属性与当前用于表空间的值不同。

尺寸 表空间的数据集已经创建,且满足以下任意条件: - 对于表空间或表空间中任何对象的定义,已经存在待定义的更改。
- 通用表空间指定的 SEGSIZE 值与现有值不同。
- 表空间从分区(非UTS)表空间转换为按范围分区的表空间。
当为按增长分区(PBG)表空间的 BUFFERPOOL、DSSIZE、MAXPARTITIONS 或 SEGSIZE 属性指定待定义更改时,分区数量将根据应用待定义更改时现有数据的数量确定,并且可能会发生分区增长。 如果存在LOB列,则无论SQLRULES ( DB2 )或SQLRULES (STD)是否生效,也无论表空间是显式创建还是隐式创建,都会为新创建的分区隐式创建额外的LOB表空间和辅助对象。 新的LOB对象继承了现有LOB对象的缓冲池属性和授权。
- ALTER TABLE
- 下表列出了导致ALTER TABLE语句作为待处理的定义变更处理的条款和特定条件,这些条款和条件在ALTER TABLE语句发出时不会反映在定义或数据中。 相反,表格空间或特定分区被置于待重组状态(AREOR)。 随后对表空间或特定受影响分区进行重组,将待定的定义更改应用到表的定义和数据中。 包含表空间的定义不能处于不完整状态。
条款或选项 如果……,则使用待定义的更改。
ALTER COLUMN
如果表空间的数据集已经创建,且满足以下所有条件,则更改列的数据类型、长度、精度或比例的语句是对表空间定义的待定更改:- DDL_MATERIALIZATION子系统参数设置为ALWAYS_PENDING。
- 基本桌面空间为通用桌面空间。

DROP COLUMN 表空间的数据集已经创建。
ADD PARTITION
数据集已经定义,新的分区被添加到现有逻辑分区之间。
变更通常是待处理的变更,添加的分区处于待处理的重组(AREOR)状态。 除非整数指定了最后一个逻辑分区,否则下一个逻辑分区也会处于AREOR状态。 但是,如果受影响分区上没有其他待定的定义更改,有时可以立即进行更改,但可能处于受限状态。

更改分区 该语句更改以下分区表空间类型的限制键: - 按范围划分的表格空间
- 分区(非UTS)表空间,可通过表进行分区控制。
更改通常是待处理的变更,更改后的分区处于待重组(AREOR)状态。 除非整数指定了最后一个逻辑分区,否则下一个逻辑分区也会处于AREOR状态。 但是,如果受影响分区上没有其他待定的定义更改,有时可以立即进行更改,但可能处于受限状态。
如果符合以下条件,则立即生效,且不受任何限制:- 受影响的分区数据集从未包含任何数据。
- 仅根据可能的数据值范围(而非实际数据值)进行分区,数据不会被丢弃或移动。 如果语句为限制键指定了相同的现有值,或者最后一个逻辑分区的新限制键扩展了可能的数据值范围,则会出现这种情况。

- ALTER INDEX
下表列出了导致ALTER INDEX语句作为待定义更改处理的条款和特定条件,这些条款和条件在ALTER语句发出时不会反映在当前定义或数据中。 相反,该指数被置于待重组(AREOR)的咨询状态。 随后,通过适当的实用程序对整个索引进行重组,以实现更改并将待定的定义更改应用到目录和数据中。
如果表空间没有待定的定义变更,您可以运行REORG INDEX实用程序,并使用SHRLEVEL CHANGE或REFERENCE来具体实现索引定义的变更。 如果表空间定义也有待更改,则必须使用 SHRLEVEL CHANGE 或 REFERENCE 运行 REORG TABLESPACE 实用程序,以启用对索引定义(以及待定的表空间定义)的更改。
条款或选项 如果……,则使用待定义的更改。 BUFFERPOOL 指数数据集已创建,且满足以下所有条件:
索引是在基本表或相关 XML 表或辅助表上定义的,其中基本表的表空间是通用表空间(UTS),或正在通过待定 义更改转换为通用表空间。 
缓冲池更改为大小不同的缓冲池,或缓冲池更改为大小相同的缓冲池,且表空间或表空间中的对象有待定 义更改。
COMPRESS
创建了索引的数据集,且以下所有条件均为真:- 索引在基础表、关联的XML表或辅助表上定义,其中基础表的表空间是通用表空间(UTS),或通过待定的定义变更转换为UTS。
- 压缩属性已更改,或者表空间或表空间中的对象有未完成的定义更改。
