powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Партицирование существующей таблицы
18 сообщений из 18, страница 1 из 1
Партицирование существующей таблицы
    #40062722
balanov.s.v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!

Есть необходимость партицировать уже существующую таблицу. Во всех источниках указывается как создать(CREATE TABLE) партицированную таблицу, но к сожалению ничего нет про партицирование существующей. Может кто сталкивался?
...
Рейтинг: 0 / 0
Партицирование существующей таблицы
    #40062728
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
balanov.s.v,

Добрый день.

Это действительно делается пересозданием таблицы и перезагрузкой ее данными старой.
Автоматизировать процесс, в т.ч. сделать это в онлайне, можно с помощью встроенной хранимой процедуры.
Moving tables online by using the ADMIN_MOVE_TABLE procedure
...
Рейтинг: 0 / 0
Партицирование существующей таблицы
    #40062939
balanov.s.v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein,

Т.е. я правильно понимаю что нужно создать сначала таблицу (CREATE TABLE) аналогичную исходной только с партицированием и потом уже воспользоваться процедурой CALL_ADMIN_MOVE, переместив данные?
...
Рейтинг: 0 / 0
Партицирование существующей таблицы
    #40062946
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
balanov.s.v,

Нет, не правильно. В примерах этого нигде не делается.

Вызовом хранимой процедуры вы определяете новую структуру своей существующей таблицы.
Процедура сама создаёт таблицу с этой новой структурой и другим именем, все другие необходимые для операции служебные объекты, копирует данные из старой таблицы в новую, удаляет старую и переименовывает новую.
...
Рейтинг: 0 / 0
Партицирование существующей таблицы
    #40063386
balanov.s.v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein,

В продолжении темы: в базе созданы 2 дополнительных табличных пространства TS1 и TS2. Есть таблица с именем PAYSUM.NON_PAY с целочисленным столбцом TYPE_NONPAY. Пытаюсь переместить таблицу в TS1 и сделать партицирование таблицы по столбцу TYPE_NONPAY. Команда:
call admin_move_table('PAYSUM','NON_PAY','TS1','TS1','TS1','','','(TYPE_NONPAY)(STARTING FROM (31) ENDING AT (33) in TS2)','','','MOVE');

В ответ получаю ошибку:
SQL0327N Строку нельзя вставить в таблицу "PAYSUM.NON_PAYADREQ5t", поскольку
она выходит за пределы заданного диапазона разделения данных. SQLSTATE=22525

SQL0327N Строку нельзя вставить в таблицу "PAYSUM.NON_PAYADREQ5t ", поскольку она выходит за пределы заданного диапазона разделения данных.
...
Рейтинг: 0 / 0
Партицирование существующей таблицы
    #40063426
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
balanov.s.v,

Сообщение говорит о том, что значение поля TYPE_NONPAY в некоторой записи таблицы выходит за заданный единственный диапазон значений [31, 33].
Это не так?
...
Рейтинг: 0 / 0
Партицирование существующей таблицы
    #40063513
balanov.s.v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein,

Так и есть, но я пытаюсь вынести в табличное пространство TS2 именно строки со значениями с 31 по 33 в столбце TYPE_NONPAY
...
Рейтинг: 0 / 0
Партицирование существующей таблицы
    #40063524
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
balanov.s.v,

Вы обязаны сделать так, чтобы для каждой записи в секционированной таблице существовала соответствующая секция, в диапазон значений которой попадает значение поля этой записи.
Нарушающие это правило изменения таблицы будут вызывать ошибку, которую вы получили.
...
Рейтинг: 0 / 0
Партицирование существующей таблицы
    #40063601
balanov.s.v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein,
К сожалению, не совсем понимаю что я делаю не так... Я правильно понимаю что мне также нужно указать столбец TYPE_NONPAY как MDC в параметрах процедуры, чтобы по нему прошло упорядочивание таблицы? можете привести пример правильного синтаксиса?
...
Рейтинг: 0 / 0
Партицирование существующей таблицы
    #40063605
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
balanov.s.v,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
CREATE TABLE PAYSUM.NON_PAY (TYPE_NONPAY INT) IN USERSPACE1;
INSERT INTO PAYSUM.NON_PAY VALUES 1, 2, 31, 33;

call admin_move_table
(
  'PAYSUM'
, 'NON_PAY'
, 'USERSPACE1'
, 'USERSPACE1'
, 'USERSPACE1'
, '', ''
,'(TYPE_NONPAY)
  (
    STARTING FROM ( 1) ENDING AT ( 5) in USERSPACE1
  , STARTING FROM (31) ENDING AT (33) in USERSPACE1
  )'
, '', ''
, 'MOVE'
);

SELECT T.*, DATAPARTITIONNUM(TYPE_NONPAY) DPNUM_ FROM PAYSUM.NON_PAY T;

|TYPE_NONPAY|DPNUM_|
|-----------|------|
|1          |0     |
|2          |0     |
|31         |1     |
|33         |1     |


В несекционированной таблице - 4 записи. При ее секционировании я должен сделать так, чтобы каждое значения в поле секционирования обязательно попадало в один из диапазонов определяемых секций. Если бы в моей таблице была запись со значением 10, то вызов процедуры завершился с такой же как у вас ошибкой - среди определяемых секций нет такой, в диапазон значений которой попадало бы это значение.
...
Рейтинг: 0 / 0
Партицирование существующей таблицы
    #40064213
balanov.s.v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein,

Получилось, спасибо
...
Рейтинг: 0 / 0
Партицирование существующей таблицы
    #40067113
balanov.s.v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein,

Добрый день!

Попробовал сделать партицирование уже существующей таблицы ещё одним способом(без admin_move_table):
Создаю пустую таблицу: "Create table like исходная таблица newtabname с условиями партицирования".
Получаю пустую таблицу-близнец исходной таблицы, но с партицированием. Из исходной делаю экспорт в файл, в новой таблице делаю импорт данных из файла. Затем удаляется исходная таблица и переименовывается вновь созданная уже партицированная.

Вопрос только есть в размерах таблицы: у меня новая таблица по размеру получается примерно в пять раз меньше старой. Хотя все строки на месте... Размер таблицы оцениваю следующим скриптом:

select tabschema || '.' || tabname "table",
decimal((data_object_p_size + index_object_p_size +
long_object_p_size + lob_object_p_size +
xml_object_p_size)/1024,10,2) "physical_space_mb",
decimal((data_object_l_size + index_object_l_size +
long_object_l_size + lob_object_l_size +
xml_object_l_size)/1024,10,2) "logical_space_mb"
from sysibmadm.admintabinfo
where tabschema not like 'SYS%'
order by 2 desc;

Нормальна ли такая ситуация или я неправильно оцениваю размер таблицы?
...
Рейтинг: 0 / 0
Партицирование существующей таблицы
    #40067118
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
balanov.s.v,

Добрый день.

Я надеюсь, что вы не сравниваете сжатую и несжатую таблицы.
Старая таблица может быть не реорганизована после массивных удалений / изменений.
Запустите на старую REORGCHK и посмотрите, что выведет.
...
Рейтинг: 0 / 0
Партицирование существующей таблицы
    #40067132
balanov.s.v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein,
...
Рейтинг: 0 / 0
Партицирование существующей таблицы
    #40067133
balanov.s.v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
balanov.s.v,
...
Рейтинг: 0 / 0
Партицирование существующей таблицы
    #40067170
balanov.s.v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
balanov.s.v,

Статистика таблиц:

F1: 100 * OVERFLOW / CARD < 5
F2: 100 * (Эффективное использование пространства страниц данных) > 70
F3: 100 * (Требуемые страницы / Общее число страниц) > 80

SCHEMA.NAME CARD OV NP FP ACTBLK TSIZE F1 F2 F3 REORG
----------------------------------------------------------------------------------------
Таблица: PAYSUM.RECIPIENT_FILE
6457112 0 49557 49557 - 1,61e+09 0 99 100 ---
----------------------------------------------------------------------------------------

Статистика индексов:

F4: CLUSTERRATIO или нормализованный CLUSTERFACTOR > 80
F5: 100 * (пространство, использованное конечными страницами / пространство, доступное для непустых конечных страниц) > MIN(50, (100 - PCTFREE))
F6: (100 - PCTFREE) * (пространство, доступное в индексе на единицу меньшего уровня / пространство, необходимое для всех ключей) < 100
F7: 100 * (число псевдоудаленных RID / общее число RID) < 20
F8: 100 * (число псевдоудаленных конечных страниц / общее число конечных страниц) < 20
...
Рейтинг: 0 / 0
Партицирование существующей таблицы
    #40067171
balanov.s.v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
balanov.s.v,

Статистика таблиц:

F1: 100 * OVERFLOW / CARD < 5
F2: 100 * (Эффективное использование пространства страниц данных) > 70
F3: 100 * (Требуемые страницы / Общее число страниц) > 80
...
Рейтинг: 0 / 0
Партицирование существующей таблицы
    #40067200
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы в файлах своих только статистику по индексам привели, из которой видно, что у вас гораздо больше индексов на старой таблице.
Те цифры по таблице (с F1, F2, F3), что вы дописали после - они одинаковые?
Функция ADMIN_GET_TAB_INFO (лучше ее использовать вместо sysibmadm.admintabinfo, т.к. с ней на конкретную таблицу получать, а не на всю базу) на данные и индексы отдельно по обоим таблицам что выдает?
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Партицирование существующей таблицы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]