Управление версиями базы данных SQL Server - PullRequest
301 голосов
/ 01 августа 2008

Я хочу, чтобы мои базы данных были под контролем версий. У кого-нибудь есть какие-либо советы или рекомендуемые статьи, чтобы начать меня?

Я всегда хочу иметь как минимум некоторые данные там (как упоминает alumb : типы пользователей и администраторы). Я также часто хочу большой сбор сгенерированных тестовых данных для измерения производительности.

Ответы [ 29 ]

6 голосов
/ 03 августа 2008

Типичное решение - при необходимости выгрузить базу данных и сделать резервную копию этих файлов.

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

Примечание. Возможно, вы захотите сделать резервную копию дампа базы данных вместо того, чтобы поместить его в систему контроля версий. Файлы могут очень быстро работать при управлении версиями, что может привести к замедлению работы всей системы контроля версий (сейчас я вспоминаю ужасную историю CVS).

6 голосов
/ 24 февраля 2011

Я согласен с ответом ESV, и именно по этой причине я некоторое время назад начал небольшой проект, чтобы помочь поддерживать обновления базы данных в очень простом файле, который затем мог бы содержать длинный исходный код. Это позволяет легко обновлять разработчикам, а также UAT и Production. Инструмент работает на Sql Server и MySql.

Некоторые особенности проекта:

  • Позволяет изменять схему
  • Допускает популяцию дерева значений
  • Позволяет вводить отдельные данные испытаний, например. UAT
  • Позволяет выполнить откат (не автоматизирован)
  • Поддерживает поддержку сервера SQL и Mysql
  • Имеет возможность импортировать вашу существующую базу данных в систему управления версиями с помощью одной простой команды (только сервер SQL ... все еще работает на MySQL)

Код размещен в коде Google. Пожалуйста, проверьте код Google для получения дополнительной информации

http://code.google.com/p/databaseversioncontrol/

6 голосов
/ 22 августа 2008

Мы только начали использовать Team Foundation Server. Если ваша база данных среднего размера, то Visual Studio имеет несколько хороших интеграций проектов со встроенным сравнением, сравнением данных, инструментами рефакторинга базы данных, инфраструктурой тестирования базы данных и даже инструментами генерации данных.

Но эта модель не очень хорошо подходит для больших или сторонних баз данных (которые шифруют объекты). Итак, что мы сделали, так это сохранили только наши индивидуальные объекты. Для этого очень хорошо работает сервер Visual Studio / Team.

TFS База данных начальника арх. блог

Сайт MS TFS

5 голосов
/ 16 сентября 2008

Некоторое время назад я обнаружил базовый модуль VB, который использовал объекты DMO и VSS для передачи всего сценария БД в VSS. Я превратил его в VB Script и разместил здесь . Вы могли бы легко принимать вызовы VSS и использовать материал DMO для генерации всех сценариев, а затем вызывать SVN из того же пакетного файла, который вызывает сценарий VBScript для их регистрации?

Дейв Дж

5 голосов
/ 15 мая 2009

Я также использую версию в базе данных, хранимую через семейство процедур расширенных свойств базы данных. В моем приложении есть сценарии для каждого шага версии (т. Е. Перейти с 1.1 на 1.2). При развертывании он просматривает текущую версию и затем запускает сценарии один за другим, пока не достигнет последней версии приложения. Не существует сценария с прямой «окончательной» версией, даже развертывание на чистой БД выполняет развертывание с помощью серии шагов обновления.

Теперь я хотел бы добавить, что два дня назад я видел в кампусе MS презентацию о новой и готовящейся к выпуску версии VS DB. Презентация была сосредоточена именно на этой теме, и меня выкинуло из воды. Вы должны обязательно это проверить, новые возможности сосредоточены на сохранении определения схемы в сценариях T-SQL (CREATE), дельта-движке времени выполнения для сравнения схемы развертывания с определенной схемой и выполнения дельта-изменений и интеграции с интеграцией исходного кода вплоть и в том числе MSBUILD непрерывной интеграции для автоматических сборок. Перетаскивание будет содержать новый тип файлов, файлы .dbschema, которые можно перенести на сайт развертывания, а инструмент командной строки может выполнить фактические «дельты» и запустить развертывание. У меня есть запись в блоге на эту тему со ссылками на загрузки VSDE, вы должны проверить их: http://rusanu.com/2009/05/15/version-control-and-your-database/

4 голосов
/ 23 июня 2015

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

3 голосов
/ 03 ноября 2009

Проверьте DBGhost http://www.innovartis.co.uk/. Я использую в автоматическом режиме в течение 2 лет, и он прекрасно работает. Это позволяет нашим сборкам БД происходить так же, как происходит сборка Java или C, за исключением базы данных. Вы понимаете, о чем я.

3 голосов
/ 06 августа 2009

По моему опыту, решение имеет два аспекта:

  1. Вам необходимо обработать изменения в базе данных разработки, которые были сделаны несколькими разработчиками во время разработки.

  2. Вам необходимо выполнить обновление базы данных на сайтах клиентов.

Чтобы справиться с № 1, вам понадобится мощный инструмент для различий / слияния баз данных. Лучший инструмент должен иметь возможность выполнять автоматическое объединение в максимально возможной степени, позволяя вам разрешать необработанные конфликты вручную.

Идеальный инструмент должен обрабатывать операции слияния, используя трехсторонний алгоритм слияния, который учитывает изменения, внесенные в базу данных THEIRS и базу данных MINE, относительно базы данных BASE.

Я написал коммерческий инструмент, который обеспечивает ручную поддержку слияния для баз данных SQLite, и в настоящее время я добавляю поддержку трехстороннего алгоритма слияния для SQLite. Проверьте это в http://www.sqlitecompare.com

Для обработки # 2 вам понадобится инфраструктура обновления на месте.

Основная идея заключается в разработке инфраструктуры автоматического обновления, которая знает, как обновить существующую схему SQL до более новой схемы SQL, и может создать путь обновления для каждой существующей установки БД.

Прочтите мою статью на эту тему в http://www.codeproject.com/KB/database/sqlite_upgrade.aspx, чтобы получить общее представление о том, о чем я говорю.

Удачи

Лирон Леви

2 голосов
/ 10 января 2017

Я бы предложил использовать инструменты сравнения для импровизации системы контроля версий для вашей базы данных. Хорошей альтернативой являются Сравнение схем xSQL и Сравнение данных xSQL .

Теперь, если ваша цель состоит в том, чтобы иметь только схему базы данных под управлением версиями, вы можете просто использовать xSQL Schema Compare для генерации моментальных снимков схемы xSQL и добавления этих файлов в свой контроль версий. Чем, чтобы вернуться или обновить до определенной версии, просто сравните текущую версию базы данных со снимком для целевой версии.

Увы, если вы хотите, чтобы данные также находились под контролем версий, вы можете использовать xSQL Data Compare для генерации сценариев изменений для вашей базы данных и добавления файлов .sql в свой контроль версий. Затем вы можете выполнить эти сценарии, чтобы вернуться / обновить до любой версии, которую вы хотите. Имейте в виду, что для функциональности «вернуть» вам нужно сгенерировать сценарии изменений, которые при выполнении сделают Версию 3 такой же, как Версия 2, а для функциональности «обновления» вам необходимо сгенерировать сценарии изменений, которые делают обратное.

Наконец, с некоторыми базовыми навыками пакетного программирования вы можете автоматизировать весь процесс, используя версии командной строки xSQL Schema Compare и xSQL Data Compare

Отказ от ответственности: я связан с xSQL.

...