Перемещение раздела в новую файловую группу - PullRequest
0 голосов
/ 31 октября 2019

У меня есть огромная таблица, которая разбита по дате. У нас есть 8 разделов, все в разных файловых группах, причем одна из этих групп файлов является ПЕРВИЧНОЙ.

Я хотел бы заменить файловую группу PRIMARY новой файловой группой с именем FG_odsvr_misc и удалить PRIMARY из раздела. схема.

Как бы я этого достиг без создания новой таблицы с новой функцией секционирования?

Границы выглядят так:

partition data

Функция разделения показана ниже -

CREATE PARTITION FUNCTION [fn_odstable1](numeric(9,0)) 
AS RANGE LEFT FOR VALUES (20151231, 20161231, 20171231, 20181231, 20191231, 20201231, 20211231)

Схема разделения показана ниже -

CREATE PARTITION SCHEME [sch_odstable1] AS PARTITION [fn_odstable1] 
TO ([FG_odsvr_pre_2016], [FG_odsvr_2016], [FG_odsvr_2017], [FG_odsvr_2018], [FG_odsvr_2019], [FG_odsvr_2020], [FG_odsvr_2021], [PRIMARY])

1 Ответ

0 голосов
/ 31 октября 2019

Хорошо. Раздел, который имеется в файловой группе PRIMARY, представляет собой так называемый «постоянный раздел»

Из рекомендаций по разбиению таблиц Дана Гузмана:

Возможно, вы не знаете, что каждая схема разбиения имеетпостоянный раздел, который никогда не может быть удален. Это первый раздел функции RANGE RIGHT и последний раздел функции RANGE LEFT. Помните об этом постоянном разделе при создании новой схемы разделов, когда задействованы несколько файловых групп, поскольку файловая группа, в которой создается этот постоянный раздел, определяется при создании схемы разделов и не может быть удалена из схемы.

. ,.

Рассмотрите возможность сопоставления разделов, содержащих данные вне ожидаемого диапазона, с фиктивной файловой группой без базовых файлов. Это гарантирует целостность данных во многом подобно проверочному ограничению, потому что данные за пределами допустимого диапазона не могут быть вставлены. Если вы должны принять ошибочные данные, а не отклонять их напрямую, вместо этого сопоставьте эти разделы с обобщенной файловой группой, такой как DEFAULT, или с группой, специально предназначенной для этой цели.

http://www.dbdelta.com/table-partitioning-best-practices/

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

ALTER PARTITION SCHEME sch_odstable1 NEXT USED [FG_odsvr_2022];  
ALTER PARTITION FUNCTION fn_odstable1() SPLIT RANGE (20221231);  

Самый правый разделвсе еще будет на ПЕРВИЧНОМ хотя. Вам просто нужно создать свои будущие разделы, прежде чем они понадобятся, чтобы сохранить этот раздел пустым. Если вы хотите, вы можете создать новую схему разделов

alter database current add filegroup no_files_cant_be_used

CREATE PARTITION SCHEME [sch_odstable2] AS PARTITION [fn_odstable1] 
TO ([FG_odsvr_pre_2016], [FG_odsvr_2016], [FG_odsvr_2017], [FG_odsvr_2018], [FG_odsvr_2019], [FG_odsvr_2020], [FG_odsvr_2021], [FG_odsvr_2022], no_files_cant_be_used)

, а затем создать соответствующую таблицу на новой схеме, ALTER TABLE SWITCH, чтобы переместить все разделы в новую таблицу, а затем переименовать таблицы.

...