Подходит ли RedGate SQL Source Control для меня?
Я только что унаследовал базу данных SQL Server. Одна из вещей, с которыми мне нужно разобраться, - это управление версиями и автоматическая сборка.
Было предложено, чтобы я серьезно подумал о рекомендации RedGate SQL Compare, но должен признать, что меня это немного беспокоит.
Мои оговорки...
- Похоже, чтобы способствовать использованию инструментов графического интерфейса для работы с БД?
- для живых приложений я предпочитаю работать со скриптами изменений, это позволяет избежать последней минуты паники при создании скриптов миграции в конце каждого цикла схватки, и это означает, что ваши скрипты обновления могут быть протестированы CI. Я не вижу, как инструмент RedGate решает эту проблему.
Мой инстинкт инстинкта подсказывает мне придерживаться проверенного и проверенного подхода файла MSBuild и стека файлов.SQL.
Мне было бы интересно узнать, есть ли у кого-нибудь опыт использования этого инструмента.
6 ответов
Мы используем Red Gate для создания сценариев для развертывания и управления версиями.
"Развертывание" и "управление версиями" являются отдельными проблемами для кода SQL.
Важно отметить: ваша производственная база данных является главной со всеми своими данными. Так что организуйте регулярные копии на тестовом сервере и используйте это как основу. База данных, генерируемая NUnit каждую ночь с базовыми данными (видела, смеялась), как правило, бесполезна. Что делать, если у вас есть миллиард строк и вам нужно протестировать запрос?
Управление версиями: Вы можете использовать инструменты Red Gate, чтобы сгенерировать схему в качестве базовой линии, а затем сравнить ее с этой копией (или вашим QA или чем-то еще). Инструменты Red Gate позволяют сравнивать с папками, которые в нашем случае находятся под контролем SVN и обновляются при каждом выпуске. Таким образом, у нас есть полная история каждого объекта
Развертывание: мы применяем наши сценарии разработки (также в SVN) к чистой "сборочной" БД и сравниваем с другой чистой БД. Это становится нашим сценарием развертывания.
Это довольно просто, конечно.
Профессиональная версия предлагает API для синхронизации и сравнения, так что вы можете интегрироваться в цепочку инструментов, если это необходимо. Графический интерфейс не требуется. Между прочим, мы используем это, чтобы обеспечить синхронизацию в один клик некоторых специальных пользовательских песочниц с клиентским кодом.
Как упомянул Ремус, они не являются надежными для некоторых операций. Если вы меняете материал в таблицах по 1,5 ТБ, я бы с любовью написал свой сценарий. Другое раздражение заключается в том, что инструмент Red gate имеет привычку помещать SCHEMABINDING в связанный вид или udf для простой проверки изменения ограничения.
Я также рекомендую прочитать "Эволюционный дизайн базы данных" Мартина Фаулера для вдохновения
Я бы также предпочел скрипты - их легко хранить в системе контроля версий (CVS, Git и т. Д.), Чтобы вы могли различать, когда будут внесены изменения.
Я не доверяю основанным на diff инструментам для развертывания. И это включает в себя файлы vsdbcmd.schema, поскольку они также основаны на различиях. В прошлый раз, когда я пытался использовать инструмент сравнения, он с радостью предложил изменить таблицу 1,5 ТБ с помощью копирования / удаления / переименования...
Мой подход заключается в том, чтобы всегда использовать сценарии обновления, которые перемещают развернутую схему из v. N
до N+1
, Таким образом, я точно знаю , как выполняется обновление, и если операция невозможна (для этого потребуется операция копирования размера данных, продолжающаяся 2 недели...), то я знаю, что не могу это сделать, и я планирую изменения своего кода для выпуска v. Далее соответственно.
SQL Compare может генерировать сценарий миграции SQL, который можно независимо просмотреть перед его применением, но также дает возможность выполнить сценарий в инструменте. Red Gate рекомендует использовать первый метод при развертывании в производственных базах данных.
Для управления версиями базы данных SQL Source Control поддерживает большинство систем контроля версий (например, SVN, TFS и т. Д., Хотя поддержка VSS устарела). В версии 3 есть опция для ссылки на рабочую папку, позволяющую при желании использовать свой собственный клиент управления версиями.
У меня есть проект набора инструментов с открытым исходным кодом (по лицензии LGPL), который пытается решить проблемы, связанные с правильной версией схемы БД для (и более) SQL Server ( 2005/2008 / Azure), bsn ModuleStore.
По сути, автономная часть набора инструментов сценариев объектов БД SQL Server схемы БД в файлы с применением стандартного форматирования, так что содержимое файла изменяется только в том случае, если объект действительно изменился (очень сильно в отличие от сценариев, выполняемых VS, который также записывает некоторую дату написания сценария и т. д., помечая все объекты как измененные, даже если они фактически идентичны).
Но набор инструментов выходит за рамки этого, если вы используете.NET: он позволяет встраивать сценарии SQL в библиотеку или приложение (как встроенные ресурсы), а затем сравнивать встроенные сценарии с текущим состоянием в базе данных. Изменения, не связанные с таблицами (те, которые не являются "разрушительными изменениями" согласно определению Мартина Фаулера), могут применяться автоматически или по запросу (например, создание и удаление объектов, таких как представления, функции, хранимые процедуры, типы, индексы), и изменение сценарии (которые нужно писать вручную, хотя) могут также применяться в том же процессе; новые таблицы также создаются, по желанию вместе с их настройками данных. После обновления схема БД снова сравнивается со сценариями, чтобы обеспечить успешное обновление БД до принятия изменений.
Обратите внимание, что весь код сценариев и сравнения работает без SMO, поэтому у вас нет болезненной зависимости SMO при использовании bsn ModuleStore в приложениях.
В зависимости от того, как вы хотите получить доступ к базе данных, набор инструментов предлагает еще больше - он реализует некоторые возможности ORM и предлагает очень хороший и полезный подход на основе интерфейса для вызова хранимых процедур, включая прозрачную поддержку XML с собственными классами.NET XML, а также для TVP (табличные параметры) как IEnumerable<PocoClass>
,
Мы используем инструмент сравнения как часть нашего процесса развертывания, чтобы выяснить, отсутствует ли что-либо, нуждающееся в сценарии, и затем обсудим его с разработчиком, если так (обычно это различие, которое не регистрируется в расположении развертывания, потому что оно не должно ' не может быть перемещен, чтобы пойти в продукт). Но мы развертываем из сценариев, которые всегда находятся под контролем исходного кода. Если вы полагаетесь на SQL Compare или любой другой инструмент сравнения, вы можете обнаружить, что движетесь вещи, которые еще не должны быть перемещены.