【问题标题】:Add tablespace for existing table in DB2为 DB2 中的现有表添加表空间
【发布时间】:2019-11-07 00:12:53
【问题描述】:

我在我的项目中使用 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

【问题讨论】:

  • 什么是 Db2-server 操作系统(z/OS、i 系列、Linux/Unix/Windows)?
  • @mao,操作系统是Linux

标签: database db2 alter-table tablespace


【解决方案1】:

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 语句执行此操作,请参阅有关详细信息,请参阅文档。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2019-03-09
    • 1970-01-01
    • 2021-08-24
    相关资源
    最近更新 更多