ALTER PARTITION FUNCTION (Transact-SQL)

Эта инструкция изменяет функцию секционирования путем разбиения или слияния ее пограничных значений. При выполнении инструкции ALTER PARTITION FUNCTION одна секция какой-либо таблицы или индекса, которые используют функцию секционирования, может быть разбита на две секции или две секции могут быть объединены в одну.

Предупреждение

Несколько таблиц или индексов могут использовать одинаковую функцию секционирования.Инструкция ALTER PARTITION FUNCTION применяется ко всем таблицам и индексам в рамках одной транзакции.

Применимо для следующих объектов: SQL Server (начиная с SQL Server 2008 до текущей версии).

Значок ссылки на раздел Cинтаксические обозначения в Transact-SQL

Синтаксис

ALTER PARTITION FUNCTION partition_function_name()
{ 
    SPLIT RANGE ( boundary_value )
  | MERGE RANGE ( boundary_value ) 
} [ ; ]

Аргументы

  • partition_function_name
    Это имя функции секционирования, которую необходимо изменить.

  • SPLIT RANGE ( boundary_value )
    Добавляет одну секцию к функции секционирования. Аргумент boundary_value определяет диапазон новой секции, который должен отличаться от существующих пограничных значений функции секционирования. На основе аргумента boundary_value компонент Компонент Database Engine разбивает один существующий диапазон на два. Один из них,содержащий новый аргумент boundary_value, является новой секцией.

    Файловая группа должна существовать в режиме в сети и быть помеченной схемой секционирования, использующей функцию секционирования, как NEXT USED для сохранения новой секции. В инструкции CREATE PARTITION SCHEME для файловых групп выделяются секции. Если инструкция CREATE PARTITION SCHEME размещает больше файловых групп, чем необходимо (в этой инструкции создано меньше секций, чем файловых групп для их хранения), то появляются неназначенные файловые группы, и одна из них отмечается схемой секционирования как NEXT USED. Данная файловая группа будет содержать новую секцию. Если нет ни одной файловой группы, отмеченной схемой секционирования как NEXT USED, то для хранения новой секции необходимо добавить файловую группу или назначить уже существующую при помощи инструкции ALTER PARTITION SCHEME. Файловая группа, которая уже содержит секции, может быть назначена для содержания дополнительных секций. Так как функция секционирования может использоваться в нескольких схемах секционирования, то все схемы с такой функцией, к которым добавляются секции, должны иметь файловую группу NEXT USED. Иначе ALTER PARTITION FUNCTION дает сбой, и выдает ошибку, в которой показаны схема или схемы секционирования с отсутствующей файловой группой NEXT USED.

    Если все секции создаются в одной файловой группе, то данная группа первоначально автоматически назначается как NEXT USED. Однако после выполнения операции разбиения назначенная файловая группа NEXT USED будет отсутствовать. Необходимо явным образом назначить файловую группу NEXT USED с помощью ALTER PARITION SCHEME, в противном случае следующая операция разбиения завершится ошибкой.

  • MERGE [ RANGE ( boundary_value) ]
    Удаляет секцию и объединяет все значения, существующие в секции, в одну из оставшихся. Аргумент RANGE (boundary_value) должен быть существующим пограничным значением, в которое объединяются значения из удаленной секции. Файловая группа, изначально содержащая аргумент boundary_value, удаляется из схемы секционирования, если она не используется оставшейся секцией или не обозначена как NEXT USED. Объединенная секция находится в файловой группе, которая изначально не содержит boundary_value. boundary_value является константным выражением, которое может ссылаться на переменные (включая переменные определяемых пользователем типов) или функции (включая определяемые пользователем). Не может ссылаться на выражение Transact-SQL. Тип boundary_value должен либо совпадать, либо допускать неявное преобразование к типу данных соответствующего столбца секционирования; в процессе неявного преобразования он не должен усекаться таким образом, чтобы размер и диапазон его значения не совпадали с соответствующим ему аргументом input_parameter_type.

Рекомендации

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

Ограничения

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

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

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

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

    Примечание

    Удаление результатов секционированного кластеризованного индекса в секционированной куче.

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

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

Все файловые группы, обрабатываемые ALTER PARITITION FUNCTION, должны находиться в режиме в сети.

ALTER PARTITION FUNCTION завершается неудачно, если в какой-либо таблице, использующей функцию секционирования, находится отключенный кластеризованный индекс.

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

Разрешения

Для выполнения инструкции ALTER PARTITION FUNCTION может использоваться одно из перечисленных ниже разрешений.

  • Разрешение ALTER ANY DATASPACE. Данное разрешение по умолчанию назначено членам предопределенной роли сервера sysadmin и предопределенных ролей базы данных db_owner и db_ddladmin.

  • Разрешение CONTROL или ALTER в базе данных, в которой была создана функция секционирования.

  • Разрешение CONTROL SERVER или ALTER ANY DATABASE на сервере базы данных, в котором была создана функция секционирования.

Примеры

А.Разбиение секции секционированной таблицы или индекса на две части

В следующем примере создается функция секционирования для разделения таблицы или индекса на четыре секции. ALTER PARTITION FUNCTION разбивает одну из секций на две, в результате получается пять секций.

IF EXISTS (SELECT * FROM sys.partition_functions
    WHERE name = 'myRangePF1')
DROP PARTITION FUNCTION myRangePF1;
GO
CREATE PARTITION FUNCTION myRangePF1 (int)
AS RANGE LEFT FOR VALUES ( 1, 100, 1000 );
GO
--Split the partition between boundary_values 100 and 1000
--to create two partitions between boundary_values 100 and 500
--and between boundary_values 500 and 1000.
ALTER PARTITION FUNCTION myRangePF1 ()
SPLIT RANGE (500);

Б.Объединение двух секций секционированной таблицы в одну секцию

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

IF EXISTS (SELECT * FROM sys.partition_functions
    WHERE name = 'myRangePF1')
DROP PARTITION FUNCTION myRangePF1;
GO
CREATE PARTITION FUNCTION myRangePF1 (int)
AS RANGE LEFT FOR VALUES ( 1, 100, 1000 );
GO
--Merge the partitions between boundary_values 1 and 100
--and between boundary_values 100 and 1000 to create one partition
--between boundary_values 1 and 1000.
ALTER PARTITION FUNCTION myRangePF1 ()
MERGE RANGE (100);

См. также

Справочник

CREATE PARTITION FUNCTION (Transact-SQL)

DROP PARTITION FUNCTION (Transact-SQL)

CREATE PARTITION SCHEME (Transact-SQL)

ALTER PARTITION SCHEME (Transact-SQL)

DROP PARTITION SCHEME (Transact-SQL)

CREATE INDEX (Transact-SQL)

ALTER INDEX (Transact-SQL)

CREATE TABLE (SQL Server)

sys.partition_functions (Transact-SQL)

sys.partition_parameters (Transact-SQL)

sys.partition_range_values (Transact-SQL)

sys.partitions (Transact-SQL)

sys.tables (Transact-SQL)

sys.indexes (Transact-SQL)

sys.index_columns (Transact-SQL)

Основные понятия

Секционированные таблицы и индексы