Отменить разбиение таблицы - PullRequest
11 голосов
/ 03 июня 2010

У меня есть таблица 'X', и я выполнил следующее

  1. СОЗДАТЬ ФУНКЦИЮ РАЗДЕЛА PF1 (INT) КАК ДИАПАЗОН ЛЕВЫХ ДЛЯ ЗНАЧЕНИЙ (1, 2, 3, 4)
  2. CREATE PARTITION SCHEME PS1 КАК РАЗДЕЛ PF1 ВСЕ ДЛЯ ([ПЕРВИЧНЫЙ])
  3. СОЗДАНИЕ КЛАСТЕРНОГО ИНДЕКСА CIDX_X ON X (col1) ON PS1 (col1)

это 3 шага создали 4 логических разделаданных, которые у меня были.

Мой вопрос: как мне вернуть это разбиение в исходное состояние?

Ответы [ 2 ]

23 голосов
/ 08 июня 2010

После 2 дней непрерывного поиска

Шаги:

  1. DROP INDEX CIDX_X on X / * отбросить кластеризованный * /
  2. CREATE CLUSTERED INDEX CIDX_X1 ON X(col1) ON [PRIMARY] / * Создать еще один кластеризованный индекс в таблице, чтобы освободить его от схемы секционирования; Здесь часть " ON [primary] " является ключом к удалению схемы разбиения из таблицы! * /
  3. DROP PARTITION SCHEME PS1
  4. DROP PARTITION FUNCTION PF1
  5. DROP INDEX CIDX_X1 ON X / * удалить созданный вами фиктивный кластеризованный индекс, поскольку он был создан только для освобождения таблицы от схемы секционирования * /
0 голосов
/ 20 октября 2015

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

Примечание. Я использую SQL 2012
Первичный ключ обычно является наиболее часто используемым кластерным ограничением, поэтому, где бы я ни использовал первичный ключ, учтите, что эти шаги также применимы и к кластерным ограничениям. Кроме того, PS = Схема разделения, PF = Функция разделения.

Некоторые подготовительные шаги:

  1. Создать скрипт публикации капли
  2. Создание сценария создания публикации
  3. Определите все таблицы, у которых есть зависимости со Схемой разбиения, а также запишите их первичный ключ / кластерный индекс. Также запишите все поля, которые использует столбец первичного ключа (лучше создать сценарий для первичного ключа или кластерного индекса). )
  4. Создайте скрипт для таблиц, на которые влияют.
  5. Сделайте скрипт для PF и PS, которые находятся под вопросом.

    Все вышеперечисленное с использованием SQL Management Studio «генерировать скрипты» при щелчке правой кнопкой мыши. И выберите падение и создайте.

Теперь, когда все готово.
1. Удалите публикацию (используйте созданный вами скрипт)
2. Удалите ограничение Первичный ключ тех таблиц, которые связаны с PS. alter table [tablename] drop constraint [pk_name]
3. Установите фиктивное ограничение, но используйте те же поля, которые вы использовали в этом удаленном первичном ключе. CREATE CLUSTERED INDEX CIDX_X1 ON tablename(field1,field2,field3,field4) ON [PRIMARY]
4. сбросьте схему и функцию разбиения.

DROP PARTITION SCHEME [PartitionSchemeName_PS]
GO

DROP PARTITION FUNCTION [PartitionfunctionName_PF]
GO
  1. Бросить указатель пустышки DROP INDEX CIDX_X1 ON tablename
  2. Добавьте обратно ограничение Кластерный индекс / первичный ключ (используя созданные сценарии, как упоминалось ранее.
  3. Создание функции Разделения и Схемы Разделения (убедитесь, что количество элементов PS> PF., Где PS = PF + 2 элемента)
  4. Добавить обратно издателя (использовать сгенерированные скрипты)
...