Фон
У моей группы есть 4 Базы данных SQL Server:
Я работаю в среде Dev. Когда время настает для продвижения объектов, я продолжал работать (таблицы, представления, функции, сохранили procs), я выполняю запрос своего менеджера, который продвигает Тест. После тестирования она отправляет запрос Администратору, который продвигает UAT. После успешного пользователя, тестирующего, тот же Администратор способствует Производству.
Проблема
Весь процесс является неловким по нескольким причинам.
Вопрос
Люди делали этот вид работы в течение многих десятилетий, таким образом, я предполагаю, что должен быть намного лучший способ справиться с процессом. То, что я любил бы, - то, если я мог бы выполнить разность между двумя базами данных, чтобы видеть, как структура отличалась, используйте ту разность для генерации сценария изменения, используйте тот сценарий изменения в качестве моего запроса продвижения. Действительно ли это возможно? В противном случае есть ли какие-либо другие способы организовать этот процесс?
Для записи мы - 100%-й магазин Microsoft, сейчас обновляя все к SQL Server 2008, таким образом, любые инструменты, доступные в том пакете, были бы справедливой игрой.
Я должен разъяснить, что не обязательно ищу различные инструменты. Если это - лучший способ синхронизировать наши среды затем, хорошо, но если существует лучший способ, которым я ищу это.
Примером, делающим, что я хочу действительно хорошо, являются миграции в Ruby on Rails. Очень простой синтаксис, все изменения хорошо документируются автоматически и по умолчанию, определяя то, что должны выполнить миграции, почти тривиально легко. Я любил бы, если было что-то подобное этому для SQL Server.
Мое идеальное решение легко 2) 1) легкий и 2) трудно испортить. Миграции направляющих - оба; все, что я сделал до сих пор на SQL Server, не является ни одним.
Контроль версий и ваша база данных
Корень всего зла - это внесение изменений в пользовательский интерфейс. SSMS - это инструмент DBA, а не инструмент разработчика. Разработчики должны использовать сценарии для внесения любых изменений в модель / схему базы данных. Версионирование ваших метаданных и наличие сценария обновления от каждой версии N до версии N + 1 - это единственный способ, который доказал свою надежность. Это решение, которое SQL Server развертывает для отслеживания изменений метаданных (изменения базы данных ресурсов).
Инструменты сравнения, такие как SQL Compare или файлы vsdbcmd и .dbschema из проектов VS Database, являются лишь последним прибежищем для тех магазинов, которые не в состоянии реализовать надлежащий подход с управлением версиями. Они работают в простых сценариях, но я вижу, что все они сильно терпят неудачу при серьезных развертываниях. Нельзя доверять инструменту, чтобы сделать изменение таблицы + 5 ТБ, если инструмент пытается скопировать данные ...
Вам доступно несколько инструментов. Один от Red-Gate называется SQL Compare . Замечательно и очень рекомендуется. SQL Compare позволит вам выполнять различие в схемах между двумя базами данных и даже создавать для вас сценарии изменения sql.
Обратите внимание, что они уже некоторое время работают над продуктом управления версиями SQL Server.
Другой (если вы являетесь магазином визуальной студии) - это функции сравнения схем и данных, которые являются частью Visual Studio (не знаю, какие версии).
RedGate продает SQL Compare, отличный инструмент для создания сценариев изменений.
Visual Studio также имеет редакции, поддерживающие сравнение баз данных. Раньше это называлось Database Edition.
Там, где я работаю, мы давно упразднили разделение Dev/Test/UAT/Prod в пользу очень быстрого цикла выпуска. Если мы выпускаем что-то сломанное в производство, мы быстро это исправляем. Наши клиенты, безусловно, довольны, но в корпоративных компаниях, избегающих риска, это может быть трудновыполнимой задачей.
Согласитесь, что SQL Compare - удивительный инструмент.
Однако мы не внужли никаких изменений в структуру базы данных или объекты, которые не были написаны и сохранены в системе управления версиями, как и весь другой код. Тогда вы точно знаете, что относится к версии, которую вы продвигаете, потому что у вас есть сценарии для этой конкретной версии.
В любом случае, это плохая идея вносить структурные изменения через графический интерфейс. Если у вас много данных, это намного медленнее, чем использование таблицы alter, по крайней мере, в SQL Server. Вы хотите использовать только протестированные скрипты для внесения изменений в prod.
В нашей команде мы обрабатываем изменения базы данных следующим образом:
Это работает довольно хорошо для нас, но все же требует некоторой координации, если несколько разработчиков сильно изменяют одни и те же таблицы и представления. Однако это случается не часто.
Важные моменты:
Однако, если у вас много долгосрочных ветвей разработки для ваших проектов, это может не сработать.
Это далеко не идеальное решение, и необходимо принять некоторые особые меры предосторожности. Например, если есть обновления, которые могут завершиться ошибкой в зависимости от данных, имеющихся в базе данных, обновление следует протестировать на копии производственной базы данных.
В отличие от миграции rails, мы не создаем сценарии для отмены изменений обновления. Но в любом случае это не всегда возможно, по крайней мере, в отношении данных (содержимое отброшенного столбца теряется, даже если вы воссоздаете столбец).
Я согласен с замечаниями marapet, где каждое изменение должно быть заскриптовано.
Однако проблема, с которой вы можете столкнуться, заключается в создании, тестировании и отслеживании этих скриптов.
Посмотрите на механизм исправления, используемый в DBSourceTools.
http://dbsourcetools.codeplex.com
Он был специально разработан, чтобы помочь разработчикам получить базы данных SQL server под контролем исходного кода.
Этот инструмент позволит вам установить базовую линию вашей базы данных в определенный момент и создать именованную версию (v1).
Затем создайте цель развертывания - и увеличьте именованную версию до v2.
.
Добавьте скрипты исправлений в каталог Patches для любых изменений схемы или данных.
Наконец, проверьте базу данных и все исправления в системе контроля исходного кода, чтобы распространить их среди разработчиков.
Все это дает вам повторяющийся процесс тестирования всех патчей, которые будут применяться от версии 1 к версии 2.
DBSourceTools также имеет функциональность, которая поможет вам создать эти сценарии, т.е. сравнение схем или инструменты данных сценариев.
Как только вы закончите, просто отправьте все файлы в каталоге патчей вашему DBA для обновления с v1 до v2.
Получайте удовольствие.