创建分区表后,可以使用 ALTER TABLE 语句来修改该表。确切地说,可以使用 ADD PARTITION 子句来对现有分区表添加新数据分区。在下列情况下,对分区表添加数据分区要比连接数据分区更为合适:数据是随着时间的推移而添加到数据分区中的;数据是缓慢移动的而不是从外部源转入的;您直接将数据插入或装入到分区表中。特定的示例包括每天将数据装入到一月份数据的数据分区中或者持续不断地插入各行。
为了将新数据分区添加至特定表空间位置,会将 IN 子句作为 ALTER TABLE ADD PARTITION 语句中的选项来添加。
为了将新数据分区的分区索引添加至特定表空间位置(不同于该数据分区的表空间位置),会将分区级别 INDEX IN 子句作为 ALTER TABLE ADD PARTITION 语句中的选项来添加。如果没有指定任何 INDEX IN 选项,那么缺省情况下,新数据分区上的任何分区索引都将与该数据分区位于同一表空间中。如果分区表上存在任何分区索引,那么 ADD PARTITION 会为新分区创建对应的空索引分区。会将新索引分区条目插入到每个分区索引的系统目录表 SYSIBM.SYSINDEXPARTITIONS 中。
为了将新数据分区的长整型数据、LOB 或 XML 数据添加至特定表空间位置(不同于该数据分区的表空间位置),会将分区级别 LONG IN 子句作为 ALTER TABLE ADD PARTITION 语句中的选项来添加。
限制和用法准则
CREATE TABLE hole (c1 int) PARTITION BY RANGE (c1)
(STARTING FROM 1 ENDING AT 10, STARTING FROM 20 ENDING AT 30);
DB20000I 已成功完成 SQL 命令。
ALTER TABLE hole ADD PARTITION STARTING 15;
DB20000I 已成功完成 SQL 命令。
SELECT SUBSTR(tabname, 1,12) tabname,
SUBSTR(datapartitionname, 1, 12) datapartitionname,
seqno, SUBSTR(lowvalue, 1, 4) lowvalue, SUBSTR(highvalue, 1, 4) highvalue
FROM SYSCAT.DATAPARTITIONS WHERE TABNAME='HOLE' ORDER BY seqno;
TABNAME DATAPARTITIONNAME SEQNO LOWVALUE HIGHVALUE
------------ ----------------- ----------- -------- ---------
HOLE PART0 0 1 10
HOLE PART2 1 15 20
HOLE PART1 2 20 30
选择了 3 个记录。
ALTER TABLE sales ADD PARTITION dp10
ENDING AT 1000 INCLUSIVE
为了将新数据分区的分区索引添加至特定表空间位置(不同于该数据分区的表空间位置),会将分区级别 INDEX IN 子句作为 ALTER TABLE ADD PARTITION 语句中的选项来添加。如果没有指定任何 INDEX IN 选项,那么缺省情况下,新数据分区上的任何分区索引都将与该数据分区位于同一表空间中。如果分区表上存在任何分区索引,那么 ADD PARTITION 会为新分区创建对应的空索引分区。会将新索引分区条目插入到每个分区索引的系统目录表 SYSIBM.SYSINDEXPARTITIONS 中。
ALTER TABLE newbusiness ADD PARTITION IN tsnewdata
INDEX IN tsnewindex LONG IN tsnewlong