在DB2中为现有表添加表空间

时间:2019-06-25 07:49:50

标签: database db2 alter-table tablespace

我在项目中使用DB2。我有一个包含以下DDL的表:

CREATE TABLE TEST (
            ID INTEGERT NOT NULL,
            ACCESS_INFO VARCHAR (2048) NOT NULL,
            NAME VARCHAR (2048))

尝试为“ ACCESS_INFO”列创建索引时,出现以下错误:

The index or index extension "xxxx" cannot be created or altered because the combined length of the specified columns is too long..

我提到了[1],它解释了添加大表空间来为长列创建索引。但这对于新表。为现有表添加它的正确方法是什么?

[1] https://dba.stackexchange.com/questions/19894/create-index-for-long-columns

1 个答案:

答案 0 :(得分:2)

SQL0614N的documentation清楚地说明了这一点:4K页大小的表空间允许最大1K密钥长度,8KB页大小的表空间允许最大2k键长度,16KB页大小的允许最大4k键长度,32KB页大小允许最大密钥长度为8kb。

您可以在下一个更大的页面大小中重新创建表,以避免出现此问题。

我假设您正在使用4Kb页面大小的表空间(这是默认值),因此下一个更高的页面大小为8KB。

创建(或重新使用合适的现有大小)8KB页面大小的缓冲池(CREATE BUFFERPOOL) 创建(或重新使用合适的现有空间)一个8KB的表空间(CREATE TABLESPACE)以使用与页面大小匹配的新缓冲池。

如果表中已经包含您不想重新加载的数据,请使用存储过程ADMIN_MOVE_TABLE将现有数据移动到新表空间。

如果该表不包含任何行(或可以快速重新加载),则删除该表并使用修改后的DDL重新创建以添加IN $your_8kb_tablespace

如果表将包含数百万行,将其拆分为三个表空间(一个用于数据,一个用于索引,一个用于长数据)是明智的-您也可以使用create table语句,请参阅文档以了解详细信息。

对于大型表,如果许可和硬件允许,请考虑使用范围分区和哈希分区。