Как вы отслеживаете изменения базы данных в системе контроля версий? - PullRequest
22 голосов
/ 09 декабря 2008

Мы используем SQL Server 2000/2005 и Vault или SVN в большинстве наших проектов. Я не нашел достойного решения для записи изменений схемы / процесса базы данных ни в одной из систем контроля версий.

Наше текущее решение довольно обременительно и трудно реализуемо (запишите сценарий изменяемого вами объекта и передайте его в базу данных).

У нас есть много идей о том, как решить эту проблему с помощью некоторой пользовательской разработки, но я бы предпочел установить существующий инструмент (с платными инструментами все хорошо).

Итак: как вы отслеживаете изменения кода вашей базы данных? Есть ли у вас какие-либо рекомендуемые инструменты?


Edit:

Спасибо за все предложения. Из-за нехватки времени я бы предпочел не кататься здесь. И у большинства предложений есть недостаток, заключающийся в том, что они требуют, чтобы разработчик выполнил какую-то процедуру.

Вместо этого, идеальное решение будет отслеживать изменения в базе данных SQL и фиксировать любые обнаруженные изменения в SCM. Например, если в SQL Server есть надстройка, которая может записывать любые изменения DML с пользователем, который внес изменение, а затем зафиксировать сценарий этого объекта в SCM, я был бы рад.

Мы говорили о двух системах: 1. В SQL 2005 используйте права доступа к объектам, чтобы запретить вам изменять объект, пока вы не выполните «проверку». Затем процедура регистрации запишет его в SCM. 2. Запустите запланированное задание, чтобы обнаружить любые изменения и зафиксировать их (анонимно) в SCM.

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

Ответы [ 13 ]

15 голосов
/ 09 декабря 2008

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

http://www.vitalygorn.com/blog/post/2008/01/Handling-Database-easily-with-Visual-Studio-2008.aspx

или проверьте MSDN для официальной документации

6 голосов
/ 07 декабря 2017

Отслеживание изменений базы данных напрямую из SSMS возможно с использованием различных сторонних инструментов. ApexSQL Source Control автоматически создает сценарии для любого объекта базы данных, включенного в управление версиями. Коммиты не могут быть автоматически выполнены инструментом. Вместо этого пользователь должен выбрать, какие изменения будут зафиксированы.

При получении изменений из хранилища ApexSQL Source Control осознает ссылочную целостность базы данных SQL. Таким образом, он создаст сценарии синхронизации, включающие в себя все зависимые объекты, которые будут заключены в транзакции, поэтому либо все изменения будут применены в случае отсутствия ошибок, либо ни одно из выбранных изменений не применяется. В любом случае целостность базы данных остается неизменной.

5 голосов
/ 09 декабря 2008

Я должен сказать, что я думаю, что проект базы данных visual studio также является разумным решением проблемы управления исходным кодом. Если он настроен правильно, вы можете запускать сценарии для базы данных из IDE. Если ваш скрипт старый, скачайте последний, запустите его для БД. При наличии скрипта, который также воссоздает все объекты, если вам нужно, новые объекты должны быть добавлены в скрипт также вручную, но только один раз

Мне нравится, чтобы каждая таблица, процедура и функция были в отдельном файле.

3 голосов
/ 09 декабря 2008

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

1 голос
/ 09 декабря 2008

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

Ваш комментарий о «предложениях имеет недостаток, заключающийся в том, что они требуют, чтобы разработчик выполнил какую-то процедуру» - это действительно контрольный сигнал. Это не недостаток, это особенность. Контроль версий помогает разработчикам выполнять следующие процедуры и делает процедуры менее болезненными. Если вы не хотите следовать процедурам, вам не нужен контроль версий.

1 голос
/ 09 декабря 2008

Свернуть свой собственный с нуля было бы не очень выполнимо, но если вы используете инструмент сравнения SQL, такой как Redgate SQL Compare SDK , чтобы сгенерировать для вас файлы изменений, это не займет очень много времени, пока вы не свернете его на половину. что вы хотите, а затем просто проверить эти файлы в систему контроля версий. Я применил нечто подобное для себя, чтобы обновить изменения от наших систем разработки до наших живых систем всего за несколько часов.

1 голос
/ 09 декабря 2008

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

В SQL 2005 вам потребуется написать немного кода, чтобы сгенерировать все объекты в отдельных файлах.

1 голос
/ 09 декабря 2008

Я просто добавляю оператор SQL-alter к полному оператору SQL-CreateDB.

0 голосов
/ 26 июня 2012

Для отслеживания всех изменений, таких как вставка обновления и удаления, будет много накладных расходов для SVN. Лучше отслеживать только изменения ddl, такие как (alter, drop, create), которые изменяют схему. Вы можете легко отслеживать эту схему, создав таблицу и триггер для вставки данных в эту таблицу. В любое время вы можете получить статус изменения, выполнив запрос из этой таблицы. Есть много примеров здесь и здесь

0 голосов
/ 18 сентября 2009

Мы разработали специальный инструмент, который обновляет наши базы данных. Схема базы данных хранится в нейтральном для базы данных XML-файле, который затем считывается и обрабатывается инструментом. Схема хранится в SVN, и мы добавляем соответствующий комментарий, чтобы показать, что было изменено. У нас это работает очень хорошо.

Хотя такое решение определенно излишне для большинства проектов, оно в разы облегчает жизнь.

...