DB2 10.5 for Linux, UNIX, and Windows

将现有索引转换为分区索引

可能需要将系统创建的索引和用户创建的索引从非分区索引迁移到分区索引。对于大部分此类迁移,在对表和索引维护可用性期间可以转换用户创建的索引。在进行转换期间,系统创建的索引(用于强制执行主键约束或唯一键约束)将不能维护这些约束。

开始之前

在产品的较低发行版中创建的索引可能为非分区索引。这可包括您创建的索引,也可包括由数据库管理器创建的系统创建索引。系统创建索引的示例有用于强制执行唯一约束和主约束的索引以及 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 表中 regioncolor 为 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 表。此过程使用下列步骤:
  1. 创建一个与要转换的表具有相同定义的新单分区 MDC 表。为分区指定范围时,请使用在要转换的 MDC 表的范围之外的范围。

    新单分区 MDC 表的块索引已分区。在稍后步骤中将拆离指定范围时所创建的分区。

  2. 拆离 MDC 表的每个分区。每个分区将成为独立的 MDC 表。
    当拆离分区时,分区数据将连接至新目标表,不需要移动分区中的数据。
    注: 不能拆离 MDC 表的最后一个分区。它是具有非分区块索引的单分区 MDC 表。
  3. 对于由拆离 MDC 表分区创建的每个独立表,以及具有非分区块索引的单分区 MDC 表,将表连接至在步骤 1 中创建的新分区 MDC 表。

    在连接表时,表数据将连接至新分区 MDC 表,无需移动数据,而块索引将创建为分区块索引。

  4. 在连接第一个独立 MDC 表之后,可以连接创建新 MDC 表时所创建的空分区。
  5. 对新分区 MDC 表发出 SET INTEGRITY 语句。

下一步做什么