#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