将现有索引转换为分区索引
可能需要将系统创建的索引和用户创建的索引从非分区索引迁移到分区索引。对于大部分此类迁移,在对表和索引维护可用性期间可以转换用户创建的索引。在进行转换期间,系统创建的索引(用于强制执行主键约束或唯一键约束)将不能维护这些约束。
开始之前
在产品的较低发行版中创建的索引可能为非分区索引。这可包括您创建的索引,也可包括由数据库管理器创建的系统创建索引。系统创建索引的示例有用于强制执行唯一约束和主约束的索引以及 MDC 表的块索引。
关于此任务
结果
示例
以下是将您创建的非分区索引转换为分区索引的示例:
UPDATE COMMAND OPTIONS USING C OFF;
CREATE INDEX data_part ON sales(sale_date) PARTITIONED;
DROP INDEX dateidx;
RENAME INDEX data_part TO dateidx;
COMMIT;
以下是将数据库管理器创建的非分区索引转换为分区索引的示例。此情况下,在删除原始约束与创建新约束之间将存在时间段。
ALTER TABLE employees DROP CONSTRAINT emp_uniq;
ALTER TABLE employees ADD CONSTRAINT emp_uniq UNIQUE (employee_id);
使用 DB2® V9.7 及更低发行版创建的 MDC 表具有非分区块索引。要利用分区表数据的可用性功能,例如,数据的转入和转出以及表数据和索引的分区级别重组,必须将使用 DB2 V9.7 及更低发行版创建的多维集群 (MDC) 表中的数据移到具有使用 DB2 V9.7 FP1 或更高发行版创建的分区块索引的分区 MDC 表。
联机移动分区 MDC 表以使用分区块索引
可通过联机表移动将数据从具有非分区块索引的 MDC 表移到具有分区块索引的 MDC 表。
在以下示例中,company1.parts 表中 region 和 color 为 MDC 键列;相应的块索引为非分区块索引。
CALL SYSPROC.ADMIN_MOVE_TABLE(
'COMPANY1', --Table schema
'PARTS', --Table name
' ', --null; No change to columns definition
' ', --null; No additional options
'MOVE'); --Move the table in one step
脱机移动分区 MDC 表以使用分区块索引
为了最小化数据移动,可以在表脱机时将数据从具有非分区块索引的 MDC 表移到具有分区块索引的 MDC 表。此过程使用下列步骤:
- 创建一个与要转换的表具有相同定义的新单分区 MDC 表。为分区指定范围时,请使用在要转换的 MDC 表的范围之外的范围。
新单分区 MDC 表的块索引已分区。在稍后步骤中将拆离指定范围时所创建的分区。
- 拆离 MDC 表的每个分区。每个分区将成为独立的 MDC 表。当拆离分区时,分区数据将连接至新目标表,不需要移动分区中的数据。注: 不能拆离 MDC 表的最后一个分区。它是具有非分区块索引的单分区 MDC 表。
- 对于由拆离 MDC 表分区创建的每个独立表,以及具有非分区块索引的单分区 MDC 表,将表连接至在步骤 1 中创建的新分区 MDC 表。
在连接表时,表数据将连接至新分区 MDC 表,无需移动数据,而块索引将创建为分区块索引。
- 在连接第一个独立 MDC 表之后,可以连接创建新 MDC 表时所创建的空分区。
- 对新分区 MDC 表发出 SET INTEGRITY 语句。