Добавить табличное пространство для существующей таблицы в DB2 - PullRequest
0 голосов
/ 25 июня 2019

Я использую 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 Ответ

2 голосов
/ 25 июня 2019

Документация для SQL0614N четко объясняет это: табличное пространство размером 4 КБ допускает максимальную длину ключа 1 КБ, табличное пространство размером 8 КБ допускает максимальную длину ключа 2 КБ, размер страницы 16 КБ допускает максимальную длину ключа 4 КБ, размер страницы 32 КБ допускается максимальная длина ключа 8 КБ.

Вы можете воссоздать свою таблицу на следующем более высоком размере страницы, чтобы избежать этой проблемы.

Я предполагаю, что вы используете табличное пространство размером 4 КБ (по умолчанию), поэтому следующий более высокий размер страницы составляет 8 КБ.

Создание (или повторное использование подходящего существующего) буферного пула размером 8 КБ ( CREATE BUFFERPOOL ) Создайте (или повторно используйте подходящее существующее) табличное пространство размером 8 КБ ( CREATE TABLESPACE ), чтобы использовать новый пул буферов соответствующего размера страницы.

Если таблица уже содержит данные, которые вы не хотите перезагружать, используйте хранимую процедуру ADMIN_MOVE_TABLE , чтобы переместить существующие данные в новое табличное пространство (я).

Если таблица не содержит строк (или может быть быстро перезагружена), удалите таблицу и заново создайте с измененным DDL, добавив IN $your_8kb_tablespace.

Если таблица будет содержать много миллионов строк, целесообразно разделить ее на три табличных пространства (одно для данных, одно для индексов, одно для длинных данных) - вы также можете сделать это с помощью оператора create table, см. к документации для деталей.

Для очень больших таблиц рассмотрите возможность использования секционирования по диапазонам и хеш-секционирования, если это разрешено лицензированием и оборудованием.

...