Отменить разделение таблиц

У меня есть таблица "X" и сделал следующее

  • CREATE PARTITION FUNCTION PF1 (INT) КАК ДИАПАЗОН ЛЕВАЯ ДЛЯ ЗНАЧЕНИЙ (1, 2, 3, 4)
  • CREATE PARTITION SCHEME PS1 AS PARTITION PF1 ALL TO ([PRIMARY])
  • CREATE CLUSTERED INDEX CIDX_X ON X (col1) ВКЛ PS1 (col1)

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

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

Ответ 1

Через 2 дня непрерывного поиска

Шаги:

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

Ответ 2

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

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

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

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

    Все вышеперечисленное, используя SQL Management Studio, "сгенерируйте скрипты" при щелчке правой кнопкой мыши. И выберите drop и create.

Теперь, когда все будет готово.
1. Отбросьте публикацию (используйте созданный script)
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. Отбросьте указатель Dummy DROP INDEX CIDX_X1 ON tablename
  2. Добавьте обратно кластерное ограничение индекса/первичного ключа (используя сгенерированные скрипты, как упоминалось ранее.
  3. Создайте функцию раздела и схему раздела (убедитесь, что количество элементов PS > PF, где PS = PF + 2 элементов)
  4. Добавьте обратно издателя (используйте сгенерированные скрипты)