Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к:SQL Server
Azure SQL База данных
Azure SQL Управляемый экземпляр
SQL База данных в Microsoft Fabric
Вы можете изменить способ секционирования таблицы или индекса в SQL Server, Azure SQL Database и Azure SQL Managed Instance, добавляя или вычитая число секций в функции секционирования таблицы или индекса с помощью Transact-SQL, с шагом 1. Добавление секции осуществляется путем разбиения существующей секции на две и переопределением границ новых секций. При удалении раздела границы двух разделов объединяются в одну. Это действие повторно заполняет одну секцию и оставляет другую незаполненной. Ознакомьтесь с рекомендациями перед изменением функции секционирования.
Внимание
Несколько таблиц или индексов могут использовать одинаковую функцию секционирования. При изменении функции секционирования, все они затрагиваются в рамках одной транзакции. Перед изменением функции распределения проверьте ее зависимости.
Секционирование таблиц также доступно в выделенных пулах SQL в Azure Synapse Analytics с некоторыми различиями синтаксиса. Дополнительные сведения о секционированиях таблиц в выделенном пуле SQL.
Ограничения
Инструкция ALTER PARTITION FUNCTION может использоваться только для разделения одной секции на две или для слияния двух секций в одну. Чтобы изменить способ секционирование таблиц или индексов (например, с 10 секций до 5), вы можете использовать один из следующих вариантов.
Создайте новую секционированную таблицу с нужной функцией секционирования, а затем вставьте данные из старой таблицы в новую с помощью оператора INSERT INTO ... SELECT FROM Transact-SQL или Manage Partition Wizard в 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, которая разбивает таблицу на четыре раздела. - Разделяет раздел между границами значений 100 и 1000 на раздел между границами значений 100 и 500, а также на раздел между границами значений 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
В обозреватель объектов подключитесь к целевой базе данных.
Разверните базу данных, где вы хотите удалить функцию секционирования, а затем разверните папку Хранение.
Разверните папку Функции секционирования .
Щелкните правой кнопкой мыши функцию секционирования, которую нужно удалить, и выберите пункт Удалить.
В диалоговом окне "Удалить объект" убедитесь, что выбрана правильная функция секции, а затем нажмите кнопку "ОК".
Следующие шаги
Дополнительные сведения о связанных понятиях см. в следующих статьях: