Добавить табличное пространство для существующей таблицы в DB2

Я использую 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/создать-индекс-для-длинных-столбцов

Что такое операционная система сервера Db2 (z/OS, i-series, Linux/Unix/Windows)?

mao 25.06.2019 09:57

@mao, ОС - Linux

Vithursa Mahendrarajah 25.06.2019 09:59
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
0
2
519
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

Создайте (или повторно используйте подходящий существующий) буферный пул размером 8 КБ (СОЗДАТЬ БУФЕРНЫЙ БАССЕЙН) Создайте (или повторно используйте подходящее существующее) табличное пространство размером 8 КБ (СОЗДАТЬ ТАБЛИЧНОЕ ПРОСТРАНСТВО), чтобы использовать новый буферный пул соответствующего размера страницы.

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

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

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

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

Другие вопросы по теме