добавить левую границу раздела в существующую таблицу правой разделенной области диапазона - PullRequest
0 голосов
/ 22 марта 2019

Моя функция разделения создает правильные разделы типа диапазона.После переноса данных выясняется, что в section_number one есть граничные значения, которые меньше границы, объявленной в моей функции секционирования.Так, например, если мой минимальный ключ раздела равен 5, я нашел значения 1,2,3 и 4 в разделе номер 1. Что мне нужно сделать, это изменить мою функцию раздела, добавив границы 1,2,3 и 4. Как ясобираешься сделать это?Работает ли разделенный диапазон в этом случае?Как SQL Server будет переупорядочивать мои данные в новых разделах.Будет ли он делать работу, просто изменив таблицу?Мне нужно сделать что-то дополнительное?Нужно ли мне делать резервную копию на случай, если что-то пойдет не так?

1 Ответ

0 голосов
/ 22 марта 2019

Я полагаю, что ваша ситуация следующая: у вас есть правильный диапазон диапазона с самым низким граничным значением, равным 5, и таблица, которая разделена таким образом, например:

create partition function pf (int) as range right for values (5)
create partition scheme ps as partition pf to ([PRIMARY], [PRIMARY])
create table T (part_key int constraint PK_T primary key)
on ps (part_key)

Теперь, если вывведите значения 1, 2, 3, 4 и 5 в таблицу T и проверьте распределение значений в каждом разделе, вы найдете 1, 2, 3 и 4 в разделе 1 и 5 в разделе 2:

insert T values (1), (2), (3), (4), (5)
select part_key, $partition.pf(part_key) as partition from T

Чтобы получить каждое значение в своем собственном разделе, вам необходимо сделать следующее: - для каждого нового раздела добавить новую целевую файловую группу и - разделить диапазон разделов, начиная с максимального значения

Это можетвыглядит так:

alter partition scheme ps next used [PRIMARY]
alter partition function pf() split range (4)

alter partition scheme ps next used [PRIMARY]
alter partition function pf() split range (3)

alter partition scheme ps next used [PRIMARY]
alter partition function pf() split range (2)

Теперь, если вы еще раз проверите свое распределение значений, вы увидите, что все отдельные значения оказываются в отдельном разделе:

select part_key, $partition.pf(part_key) as partition from T

Но имейте в видучто это происходит вместе с перемещением данных, то есть все строки со значениями ключей разделов 1-4 необходимо физически переместить из исходного раздела 2 в новый раздел назначения.Так что, если таких строк миллионы, это займет некоторое время и взорвет ваш журнал транзакций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...