Сама ALTER TABLE ... DROP
является операцией только с метаданными, она будет выполняться почти мгновенно , пока она может получить эксклюзивную блокировку для таблицы , что означает, что все запросы, использующие таблицу, должны быть обработаны (завершено)).Но удаление столбца физически не удаляет их, см. столбцы таблицы SQL Server под капотом .
Следующим шагом является удаление физических столбцов, если это необходимо.Я призываю , если необходимо ', потому что, в зависимости от типа столбца, это может не стоить усилий.Для столбцов переменной длины вы можете восстановить пространство, выполнив DBCC CLEANTABLE
.Но если вы отбросили столбцы фиксированного размера в несжатой таблице (без сжатия страницы или строки), то единственный способ освободить пространство - это перестроить таблицу (куча или кластерный индекс).Если таблица секционирована, вы можете попробовать перестроить автономно один раздел за раз (ALTER TABLE ... REBUILD PARTITION = N
).Если нет, лучше всего перестраивать онлайн, если у вас нет столбцов типа MAX (это ограничение снято в SQL Server 2012 ).Оперативная перестройка генерирует большое количество журналов (по крайней мере в 1,5 раза больше данных), но оно фиксируется внутренне, поэтому обслуживание резервного копирования журнала может освободить пространство, и вы не получите 600 ГБ прироста журнала.Если перестроение в режиме онлайн невозможно и таблица не разбита на разделы, я сначала вернусь к решению очистить столбцы удаления.
Если очистка столбца является абсолютной необходимостью , и у вас нет альтернативы в Интернете, то у вас действительно впереди мир боли.Выполнение такой большой операции требует дней подготовки, тестирования и совсем не тривиально.Вам нужно будет создать новую таблицу с нужной структурой, начать переносить в нее данные партиями и настроить механизм отслеживания изменений, внесенных в уже скопированные данные, которые затем будут применены к копии.Когда все данные скопированы, и изменения, которые произошли с момента начала копирования, применяются, вы можете переключить старую и новую таблицу, используя sp_rename
.В общем, вам будет намного лучше, если вы сможете использовать онлайн-опцию в продаже.