Изменение функции секционирования
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure
Вы можете изменить способ секционирования таблицы или индекса в SQL Server, База данных SQL Azure и Управляемый экземпляр SQL Azure путем добавления или вычитания числа секций, указанных на шаге 1, в функции секционирования секционированного таблицы или индекса с помощью Transact-SQL. Добавление секции осуществляется путем разбиения существующей секции на две и переопределением границ новых секций. Удаление секции происходит путем слияния двух секций в одну на границе. Это действие повторно заполняет одну секцию и оставляет другую незаполненной. Ознакомьтесь с рекомендациями перед изменением функции секционирования.
Внимание
Несколько таблиц или индексов могут использовать одинаковую функцию секционирования. При изменении функции секционирования затрагиваются все таблицы и индексы в одной транзакции. Перед изменением функции секции проверьте зависимости функции секции.
Секционирование таблиц также доступно в выделенных пулах SQL в Azure Synapse Analytics с некоторыми различиями синтаксиса. Дополнительные сведения о секционированиях таблиц в выделенном пуле SQL.
Ограничения
Инструкция ALTER PARTITION FUNCTION может использоваться только для разделения одной секции на две или для слияния двух секций в одну. Чтобы изменить способ секционирование таблиц или индексов (например, с 10 секций до 5), вы можете использовать один из следующих вариантов.
Создайте секционированную таблицу с требуемой функцией секционирования, а затем вставьте данные из старой таблицы в новую таблицу с помощью инструкции INSERT INTO ... Инструкция SELECT FROM Transact-SQL или мастер управления секциями в SQL Server Management Studio (SSMS).
Создайте секционированные кластеризованные индексы в куче.
Примечание.
Удаление результатов секционированного кластеризованного индекса в секционированной куче.
Удалите и перестроите существующий секционированные индексы с помощью инструкции Transact-SQL CREATE INDEX с предложением DROP EXISTING = ON .
Выполните последовательность инструкций ALTER PARTITION FUNCTION.
Ядро СУБД не поддерживает репликацию для изменения функции секции. Если нужно внести изменения в функцию секционирования в базе данных публикации, необходимо сделать это вручную и в базе данных подписки.
Все файловые группы, обрабатываемые ALTER PARTITION FUNCTION, должны находиться в режиме в сети.
Разрешения
Для выполнения инструкции ALTER PARTITION FUNCTION может использоваться одно из перечисленных ниже разрешений.
Разрешение ALTER ANY DATASPACE. Это разрешение назначено по умолчанию членам предопределенной роли сервера sysadmin и предопределенных ролей базы данных db_owner и db_ddladmin .
Разрешение CONTROL или ALTER в базе данных, в которой была создана функция секционирования.
Разрешение CONTROL SERVER или ALTER ANY DATABASE на сервере базы данных, в которой была создана функция секционирования.
Запрос секционированных объектов в базе данных
В следующем запросе перечислены все секционированные объекты в базе данных. Это можно использовать для проверки зависимостей для функции секционирования перед изменением.
SELECT
PF.name AS PartitionFunction,
ds.name AS PartitionScheme,
OBJECT_SCHEMA_NAME(si.object_id) as SchemaName,
OBJECT_NAME(si.object_id) AS PartitionedTable,
si.name as IndexName
FROM sys.indexes AS si
JOIN sys.data_spaces AS ds
ON ds.data_space_id = si.data_space_id
JOIN sys.partition_schemes AS PS
ON PS.data_space_id = si.data_space_id
JOIN sys.partition_functions AS PF
ON PF.function_id = PS.function_id
WHERE ds.type = 'PS'
AND OBJECTPROPERTYEX(si.object_id, 'BaseType') = 'U'
ORDER BY PartitionFunction, PartitionScheme, SchemaName, PartitionedTable;
Разделение секции с помощью Transact-SQL
В обозреватель объектов подключитесь к целевой базе данных.
На стандартной панели выберите пункт Создать запрос.
Скопируйте приведенный ниже пример в окно запроса и нажмите кнопку Выполнить.
В этом примере:
- Проверяет предыдущую версию функции
myRangePF1
секции и удаляет ее, если она найдена. - Создает функцию секционирования, которая
myRangePF1
называется секционированием таблицы на четыре секции. - Разделяет раздел между boundary_values 100 и 1000, чтобы создать секцию между boundary_values 100 и 500 и секцией между boundary_values 500 и 1000.
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 ALTER PARTITION FUNCTION myRangePF1 () SPLIT RANGE (500);
- Проверяет предыдущую версию функции
Объединение двух разделов с помощью Transact-SQL
В обозреватель объектов подключитесь к целевой базе данных.
На стандартной панели выберите пункт Создать запрос.
Скопируйте приведенный ниже пример в окно запроса и нажмите кнопку Выполнить.
В этом примере:
- Проверяет, существует ли предыдущая версия функции
myRangePF1
секционирования и удаляет ее, если она найдена. - Создает функцию секции, вызванную
myRangePF1
тремя значениями границ, что приведет к четырем секциям. - Объединяет секцию между boundary_values 1 и 100 с секцией между boundary_values 100 и 1000.
- Это приводит к тому, что функция
myRangePF1
секционирования имеет две точки границы, 1 и 1000.
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 ALTER PARTITION FUNCTION myRangePF1 () MERGE RANGE (100);
- Проверяет, существует ли предыдущая версия функции
Удаление функции секционирования с помощью SSMS
В обозреватель объектов подключитесь к целевой базе данных.
Разверните базу данных, на которой требуется удалить функцию секционирования, а затем разверните папку Хранение .
Разверните папку Функции секционирования .
Щелкните правой кнопкой мыши функцию секционирования, которую нужно удалить, и выберите пункт Удалить.
В диалоговом окне "Удалить объект" убедитесь, что выбрана правильная функция секции, а затем нажмите кнопку "ОК".
Следующие шаги
Дополнительные сведения о связанных понятиях см. в следующих статьях: