У меня большой опыт с этим. Мое приложение очень итеративное, и изменения схемы происходят часто. Я делаю производственный выпуск примерно каждые 2-3 недели, с 50-100 пунктов, очищенных из моего списка FogBugz для каждого. В каждом выпуске, который мы сделали за последние несколько лет, требовались изменения схемы для поддержки новых функций.
Ключом к этому является отработка нескольких изменений в тестовой среде перед тем, как вносить их на реальных серверах.
Я сохраняю файл контрольного списка развертывания, который копируется из шаблона и затем интенсивно редактируется для каждого выпуска с чем-то необычным.
У меня есть два сценария, которые я запускаю в базе данных, один для изменения схемы, другой для возможности программирования (процедуры, представления и т. Д.). Сценарий изменений кодируется вручную, а сценарий с процессами - через Powershell. Сценарий изменения запускается, когда все выключено (вам нужно выбрать время, которое раздражает наименьшее количество пользователей для этого), и он запускается команда за командой, вручную, на случай, если что-то пойдет не так. Наиболее распространенная проблема, с которой я столкнулся, - это добавление уникального ограничения, которое не выполняется из-за повторяющихся строк.
При подготовке к циклу тестирования интеграции я проверяю свой контрольный список на тестовом сервере, как если бы этот сервер был рабочим. Затем, в дополнение к этому, я получаю фактическую копию производственной базы данных (сейчас самое время выгрузить ваши резервные копии вне сайта) и запускаю сценарии на восстановленной локальной версии (что также хорошо, потому что это доказывает мою последнее резервное копирование звука). Я убиваю много птиц одним камнем здесь.
Итак, всего 4 базы данных:
- Dev: все изменения должны быть сделаны в скрипте изменений, но не в студии.
- Тест: здесь проводится интеграционное тестирование
- Копия производства: практика развертывания в последнюю минуту
- Производство
Вы действительно, действительно должны понять это правильно, когда вы делаете это на производстве. Сложно отменить изменения схемы.
Что касается исправлений, я буду использовать только процедуры исправлений, а не схемы, если только это не очень изолированное изменение, крайне важное для бизнеса.