待定的数据定义变更

待处理的数据定义更改是不会立即生效的数据定义更改,因为必须重新组织对象才能应用更改。 当您准备好对未定义的数据进行更改时,请运行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。
  • 压缩属性已更改,或者表空间或表空间中的对象有未完成的定义更改。
更改结束