Подготовка секции к миграции данных с помощью OpenEdge SQL
Так же, как и в Database Administration Console, после секционирования существующей таблицы с помощью OpenEdge SQL, все секции получают статус Allocated и Composite, а все имеющиеся данные находятся в исходной композитной секции.
Следующая задача – это с помощью SQL ALTER TABLE подготовить секции к миграции и выполнить перемещение данных.
Подготовка каждой секции к миграции должна выполняться непосредственно перед перемещением данных. Вы можете выполнять миграцию секций по отдельности или все сразу – здесь всё зависит от возможностей вашей системы и требований бизнеса к доступности данных.
Далее рассмотрим, как подготовить секции к миграции данных для каждого из следующих типов секционирования:
- List
- List-list
- Range
- List-range
Подготовка list секций к миграции данных
Вы можете выбрать любое количество list секций для подготовки к миграции данных.
Команда для подготовки всех секций к миграции:
ALTER TABLE table-name PREPARE FOR SPLIT PRO_INITIAL;
Здесь, PRO_INITIAL, указывает, что данные должны быть взяты из исходной композитной секции.
Команда для подготовки отдельных секций к миграции данных:
ALTER TABLE table-name PREPARE FOR SPLIT PRO_INITIAL TARGET PARTITION | PARTITIONS partition-name1 , partition-name2, ... ;
Здесь, PARTITION | PARTITIONS, взаимозаменяемые элементы.
Пример. Предположим, что мы выполнили секционирование по списку для существующей таблицы Order с помощью OpenEdge SQL.
Первый пример – команда SQL ALTER TABLE, которая помечает все секции в таблице как split-target для миграции данных:
ALTER TABLE "PUB"."Order" PREPARE FOR SPLIT PRO_INITIAL;
Второй пример – команда SQL ALTER TABLE, которая помечает как split-target две секции, Order_AUS и Order_CHN.
ALTER TABLE "PUB"."Order" PREPARE FOR SPLIT PRO_INITIAL TARGET PARTITIONS "Order_AUS", "Order_CHN" ;
Подготовка list-list секций к миграции данных
Вы можете выбрать любое количество list-list секций для подготовки миграции данных.
Команды для подготовки list-list секций к миграции данных абсолютно идентична команде для подготовки list секций.
Пример. Предположим, что мы выполнили подсекционирование по спискам для существующей таблицы Order с помощью OpenEdge SQL. Следующие два примера демонстрируют команды для миграции.
Для всех секций:
ALTER TABLE "PUB"."Order" PREPARE FOR SPLIT PRO_INITIAL;
Для нескольких секций:
ALTER TABLE "PUB"."Order" PREPARE FOR SPLIT PRO_INITIAL TARGET PARTITIONS "Order_StandardMail_USA", "Order_StandardMail_GBR", "Order_FlyByNight_Courier_JPN" ;
Подготовка миграции данных для range секций
Когда мы изначально реализовали выше секционирование в существующей таблице, то мы создали только одну range секцию. Для миграции данных нам надо определить дополнительные секции.
Для подготовки range секций к миграции необходимо:
- Подготовить и определить все range секции для миграции, за исключением последней секции с наивысшей границей диапазона.
- Подготовить к миграции последнюю секцию.
Команда для подготовки и определения всех range секций к миграции, за исключением последней:
ALTER TABLE table-name PREPARE FOR SPLIT PRO_INITIAL (PARTITION [partition-name1] VALUES <= (const) [area-spec], PARTITION [partition-name2] VALUES <= (const) [area-spec], ... );
При определении секций, убедитесь, что они расположены в порядке возрастания от нижней до верхней границ диапазона.
Команда для подготовки последней секции к миграции аналогична команде для подготовки всех list секций.
Для секционирования по диапазону проще всего подготовить все разделы как split-target и выполнить миграцию всех сразу. Тем не менее, можно пометить только некоторые секции как split-target и мигрировать их, но сделать это нужно последовательно по возрастанию от нижней границы диапазона. В противном случае вы получите сообщение об ошибке при перемещении данных.
Пример. Предположим, у нас есть секционированная по диапазону таблица Order и одна созданная секция Order_2014.
Следующий пример команды SQL ALTER TABLE добавляет две новые секции, Order_2012 и Order_2013, и помечает их как split-target для миграции. Обратите внимание, что описание секции Order_2012, которая содержит начальную границу диапазона, помещено перед секцией Order_2013:
ALTER TABLE "PUB"."Order" PREPARE FOR SPLIT PRO_INITIAL (PARTITION "Order_2012" VALUES <= ('12/31/2012'), PARTITION "Order_2013" VALUES <= ('12/31/2013') );
После того, как мы подготовили все range секции, за исключением последней, мы должны пометить последнюю секцию как split-target.
Следующий пример демонстрирует, как с помощью SQL ALTER TABLE пометить секцию Order_2014 как split-target:
ALTER TABLE "PUB"."Order" PREPARE FOR SPLIT PRO_INITIAL;
Подготовка list-range секций к миграции данных
Как уже было сказано выше, при секционировании по диапазону изначально существует только одна range секция, и вы должны определить дополнительные range секции и подготовить их к миграции. При подсекционировании по списку и диапазону, или при любом другом подсекционировании, содержащим диапазон, вы должны проделать аналогичную работу.
Для подсекционирования, включающего диапазон, самый простой путь, это выполнить миграцию всех list-range секций за один раз. Для подготовки к миграции list-range секций для одного значения из списка, вы должны выполнить две задачи:
- Подготовить и определить все list-range секции для миграции для этого значения списка, за исключением последней секции.
- Подготовить к миграции последнюю секцию.
Команда для подготовки и определения list-range секции для миграции, за исключением последней секции, аналогична команде, применяемой для range секций. Единственное отличие в том, что вам необходимо указать значения двух столбцов вместо одного.
Команда для подготовки последней list-range секции абсолютно идентична аналогичной команде для подготовки list секций.
Пример. Предположим, у нас есть подсекционированная по list-range таблица Order и одна из секций определена как Order_StandartMail_2014. Теперь нам необходимо подготовить и определить для миграции три list-range секции: Order_StandardMail_Q1_2014, Order_StandardMail_Q2_2014 и Order_StandardMail_Q3_2014.
Следующий пример демонстрирует команду SQL ALTER TABLE для добавления трех новых секций, которые сразу будут помечены как split-target:
ALTER TABLE "PUB"."Order" PREPARE FOR SPLIT PRO_INITIAL (PARTITION "Order_StandardMail_Q1_2014" VALUES <= ('Standard Mail','03/31/2014'), PARTITION "Order_StandardMail_Q2_2014" VALUES <= ('Standard Mail','06/30/2014'), PARTITION "Order_StandardMail_Q3_2014" VALUES <= ('Standard Mail','09/30/2014') );
После того, как мы подготовили все list-range секции, за исключением последней, мы должны пометить последнюю как split-target.
Следующий пример демонстрирует, как с помощью SQL ALTER TABLE пометить секцию Order_StandartMail_2014 как split-target:
ALTER TABLE "PUB"."Order" PREPARE FOR SPLIT PRO_INITIAL;