Проект базы данных настаивает на «перестройке» таблицы при развертывании для удаляемых столбцов

#visual-studio-2010 #database-project #vsdbcmd

#visual-studio-2010 #база данных-проект #vsdbcmd

Вопрос:

Итак, у меня есть проект базы данных VS2010, который я развертываю, с несколькими изменениями схемы. В частности, у меня есть одна таблица, которую VSDBCMD настаивает на «перестройке», т.е. переименовать-> создать-> скопировать-> удалить

Единственными изменениями для этой таблицы являются удаление некоторых столбцов, которые могли бы быть обработаны просто, я не знаю, удалением столбцов. Обычно я бы не возражал, за исключением того, что эта конкретная таблица называется «Вложения» и весит около 15 гигабайт или около того. Это занимает много времени, блокирует базу данных и локально завершается сбоем, поскольку у меня нет более 15 бесплатных гигабайт, и время ожидания истекает удаленно в нашей среде тестирования.

Кто-нибудь может указать мне правила, которым следует VSDBCMD для изменения схемы при ее развертывании?

Или, возможно, вы сталкивались с подобными проблемами и у вас есть предложение?

Спасибо!

Комментарии:

1. Было бы полезно получить более подробную информацию о структуре вашей таблицы. У меня есть простой тестовый проект и (с отключенной опцией Блокировать инкрементное развертывание, если может произойти потеря данных ) удаление столбцов в любом месте таблицы просто генерирует ALTER TABLE _ DROP COLUMN _ инструкцию (без перестройки таблицы).

Ответ №1:

VSDBCMD просто «любит» слишком часто перестраивать таблицы, и у меня нет «волшебного руководства vsdbcmd» для случаев, когда он решает перестроить таблицу, к сожалению, но я все равно не доверяю выводам VSDBCMD в рабочей базе данных без предварительной проверки вручную.

В файле ‘dbname.sqldeployment’ есть параметр, который разрешает параметр ‘IgnoreColumnOrder’, который может помочь предотвратить перестройку таблицы (возможно, это запускает перестройку из-за изменения индекса столбца).

В вашем случае я бы просто запустил созданный вручную скрипт в вашей базе данных.

Черт возьми, написание «alter table Attachments drop column uselessData», вероятно, стоило бы вам 10% времени, которое вы потратили на то, чтобы задать этот вопрос в первую очередь 🙂

Комментарии:

1. Я протестировал поведение опции IgnoreColumnOrder . Похоже, что этот параметр эффективен только тогда, когда проект и целевые таблицы имеют точно такой же набор столбцов (в этом случае, если порядок отличается и опция включена, при развертывании ничего не произойдет). Если есть какие-либо новые столбцы, которые не добавляются в конец таблицы, таблица будет построена заново (независимо от опции).

2. Да, это немного чудовищно. В версии 2012 не стало намного лучше, слишком много усилий, чтобы запустить ее на сервере сборки. С тех пор перешел на FluentMigrator и не оглядывался назад. github.com/schambers/fluentmigrator