Изменение секционированных таблиц и индексов

Можно изменить секционированные таблицы и индексы следующими способами:

  • Изменить функцию секционирования, чтобы повторно секционировать таблицы или индексы, которые участвуют в ней.

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

  • Преобразовать несекционированную таблицу в секционированную.

  • Преобразовать секционированную таблицу в несекционированную.

  • Передать данные путем добавления, перемещения или удаления секций.

Изменение функции секционирования

Можно изменить способ секционирования таблицы или индекса путем увеличения или уменьшения указанного числа секций на 1 в функции секционирования таблицы или индекса.

Добавление секции осуществляется путем разбиения существующей секции на две и переопределением границ новых секций. Удаление секции происходит путем слияния двух секций в одну на границе. Это действие повторно заполняет одну секцию и оставляет другую незаполненной.

Важное примечаниеВажно!

При добавлении секции должна существовать файловая группа, помеченная свойством NEXT USED, чтобы содержать новую секцию. Дополнительные сведения о задании файловой группы NEXT USED в схеме секционирования см. в статье Изменение схемы секционирования далее в этом разделе.

Инструкция ALTER PARTITION FUNCTION может использоваться только для разделения одной секции на две или для слияния двух секций в одну. Чтобы изменить секционирование таблиц или индексов (например с 10 секций до 5), можно использовать один из следующих вариантов. В зависимости от конфигурации системы объем ресурсов, требуемых на реализацию этих вариантов, может отличаться.

  • Создайте секционированную таблицу с необходимой функцией секционирования и после этого вставьте данные из старой таблицы в новую инструкцией INSERT INTO...SELECT FROM.

  • Создайте секционированный кластеризованный индекс на куче.

    ПримечаниеПримечание

    Удаленные секционированные индексы приводят к созданию секционированных куч.

  • Удалите и перестройте существующий секционированный индекс командой языка Transact-SQL CREATE INDEX с предложением DROP EXISTING = ON.

  • Выполните последовательность инструкций ALTER PARTITION FUNCTION.

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

Изменение функции секционирования

Изменение схемы секционирования

Можно изменить схему секционирования, определив файловую группу для хранения следующей секции, которая будет добавлена к секционированной таблице. Это делается путем присваивания файловой группе свойства NEXT USED. Можно присвоить свойство NEXT USED пустой файловой группе или группе, уже хранящей секцию. Другими словами, файловая группа может содержать несколько секций.

Изменение схемы секционирования

Преобразование несекционированной таблицы в секционированную

Можно преобразовать существующую несекционированную таблицу в секционированную одним из двух способов.

Первый способ — создать секционированный кластеризованный индекс для таблицы инструкцией CREATE INDEX. Эта операция схожа с созданием кластеризованного индекса для любой таблицы, так как, по существу, SQL Server удаляет таблицу и повторно создает ее в формате кластеризованного индекса. Если у таблицы уже есть секционированный кластеризованный индекс, можно удалить индекс и перестроить его на схеме секционирования, используя инструкцию CREATE INDEX с предложением DROP EXISTING = ON.

Сведения о кластеризованных индексах см. в разделе Правила проектирования кластеризованного индекса.

Другим способом является использование инструкции языка Transact-SQL ALTER TABLE SWITCH для переключения данных таблицы в таблицу, секционированную по диапазонам, с одной секцией. Эта секционированная таблица должна существовать до того, как произойдет преобразование, и ее единственная секция должна быть пустой. Дополнительные сведения о переключении секций см. в разделе Эффективная передача данных с использованием переключения секций. После изменения таблицы как секционированной можно изменить ее функцию секционирования для добавления секций, как описано ранее в подразделе Изменение функции секционирования.

Преобразование существующей таблицы в секционированную таблицу

Преобразование секционированной таблицы в несекционированную

Преобразование секционированной таблицы в несекционированную представляет собой простое изменение функции секционирования таблицы так, чтобы таблица была составлена только из одной секции. Хотя технически это все еще секционированная таблица, это состояние не имеет значения для последующих операций над таблицей.

Если у таблицы есть секционированный кластеризованный индекс, можно получить тот же результат, удалив индекс и перестроив его как несекционированный. Сделать это можно командой языка Transact-SQL CREATE INDEX с предложением DROP EXISTING = ON.

Преобразование секционированной таблицы в обычную таблицу без секций

Передача данных переключением секций

Инструкция языка Transact-SQL ALTER TABLE...SWITCH позволяет передавать блоки данных между секционированными таблицами быстро и эффективно. Дополнительные сведения см. в разделе Эффективная передача данных с использованием переключения секций.