Предоставление объектов базы данных SQL Server в виде файлов в файловой системе
Там более одной файловой системы
Большинство инструментов контроля версий работают в локальной файловой системе диска.
Объекты базы данных для большинства систем реляционных баз данных существуют в файловой системе, поскольку существует текстовое имя, идентифицирующее объект, и сценарий создания может быть извлечен или, по крайней мере, сгенерирован с использованием этого имени.
Но это не локальная дисковая файловая система, и в результате они невидимы для таких инструментов, как CVS или SVN, которые работают строго в локальной файловой системе диска.
Чтобы SVN можно было применять к объектам базы данных, они должны быть реплицированы в файловую систему локального диска, а изменения в файловой системе локального диска должны быть реплицированы в базу данных.
Другой режим использования
В отличие от исходного кода, для которого у каждого разработчика есть личная рабочая копия, разработчики, как правило, работают с общей базой данных на сервере в сети. В то время как Visual Studio обеспечивает прямую поддержку локальных копий базы данных для монтирования по требованию, разработчики избегают этой возможности, поскольку не существует удобного и надежного способа объединения изменений.
Однако после того, как изменения в структуре базы данных будут управляться системой контроля версий слиянием-копированием, такой как CVS или SVN, распространение и объединение будут в основном автоматически (конфликт столбцов), и больше нет причин для совместного использования базы данных.
Исключение SCC в качестве опции
Microsoft SQL Management Studio поддерживает контроль версий для всего, что реализует спецификацию SCC. Microsoft только перечисляет VSS (blech), но Google показывает множество вариантов. Тем не менее, SCC это все о блокировке - двойной отбеливание.
Репликация между файловыми системами
Весь вопрос теперь сводится к вопросу о репликации между файловыми системами. CodePlex содержит реализацию для VS2005/SQL2005, но он не работает с VS2008/SQL2008.
На данный момент я думаю, что основной вопрос "как мне поступить" был успешно решен, хотя я не уверен, как начислять очки.
Спасибо всем заинтересованным за ваш вклад.
Возникают некоторые конкретные вопросы, в основном связанные с сценариями различных типов объектов схемы.
- Как извлечь
create
а такжеalter
скрипты в порядке зависимости для- Таблица
- Посмотреть
- хранимая процедура
- функция
- спусковой крючок
- индекс
- иностранный ключ
- Как извлечь сценарии заполнения таблицы в порядке зависимости
- Как эффективно обнаружить изменения в схеме (при отсутствии триггеров на
sys.objects
надо будет опросить; это лучше быть быстрым и дешевым)
Обнаружение изменений
До меня дошло, что с помощью политик можно связать действия с изменениями в схеме. Остаются вопросы упорядочения зависимостей и того, как написать скрипт для создания таблицы.
6 ответов
Мы используем Red Gate для сравнения текущей схемы со скриптовыми файлами, хранящимися в SVN, для базовых версий, версий и т. Д.
Тем не менее, наша основная ссылка на самом деле является восстановленной копией продукции. Это наша базовая линия и должна соответствовать SVN. Это часть процесса развертывания для фиксации мастер-скриптов в SVN, что Red Gate делает с пользой: он изменяет только файлы для измененных объектов.
Далее мы разделяем наши рабочие скрипты и выпускаем скрипты (только изменения), поэтому у нас всегда есть основная БД и базовая линия в SVN. Мы используем только сценарии для разработки.
Управление исходным кодом базы данных - хорошая вещь, но его сложно реализовать из-за природы объекта SQL Server: строки или 3 в некоторых таблицах...
На очень упрощенном уровне вы могли бы написать службу Windows, которая следит за файловой системой, анализирует файлы в каталоге aprticuler и применяет их к базе данных. Аналогичный механизм, использующий посредника SQL-сервера (или просто триггеры и xp_commandshell), может быть использован для написания обратного.
В течение последних шести месяцев я занимался разработкой инструмента ShiftSchema, который, по моему мнению, имеет отношение к вашему вопросу.
ShiftSchema использует триггеры базы данных для синхронизации объектов базы данных SQL Server 2005 и 2008 с файлами на диске, которые подходят для хранения в системе контроля версий. Он также отслеживает изменения в файловой системе (когда вы обновляете из репозитория и получаете изменения схемы, зафиксированные другим разработчиком) и помещает эти изменения в вашу личную базу данных разработки.
Он поддерживает синхронизацию данных, но эта функция действительно предназначена для небольших объемов данных, таких как справочные таблицы.
Также имеется средство для сравнения двух баз данных (в СУБД или на диске) и создания сценария DDL для их синхронизации.
ShiftSchema предназначен для использования в среде разработки, где каждый разработчик имеет свою собственную базу данных разработки.
Если вам интересно, ссылка на сайт в моем профиле указывает на сайт ShiftSchema.
Red Gate создает SQL Source Control, интегрируясь с SSMS, чтобы обеспечить как фиксацию, так и извлечение из системы контроля версий (в фоновом режиме мы связываем объекты базы данных с соответствующими файлами SQL создания, содержащимися в системе контроля версий). Хотя мы и рекомендуем, чтобы каждый разработчик использовал свою собственную копию базы данных для разработки, мы планируем поддерживать модель, посредством которой она будет распространяться, хотя это имеет тот недостаток, что любой разработчик может в любой момент сломать базу данных для всех.
Мы надеемся выпустить этот инструмент в первой половине 2010 года. Если вы хотите узнать больше или зарегистрироваться в нашей программе раннего доступа, перейдите по следующей ссылке:
http://www.red-gate.com/products/SQL_Source_Control/index.htm
С уважением,
Дэвид Аткинсон, менеджер по продукту, Red Gate Software
В отношении изменений, внесенных непосредственно в сервер SQL другими пользователями: я не знаю, насколько это практично для вас, но может быть хорошей идеей сделать ВСЕ изменения с помощью сценариев SQL, а не по отдельности, непосредственно на сервере. Эти сценарии SQL могут быть пронумерованы и помещены в систему управления исходным кодом по вашему выбору. Чтобы получить более точный контроль над развернутыми изменениями, вы можете использовать скрипт каждого изменения в паре со сценарием отката, который можно использовать при необходимости.
Вам, конечно, нужно будет обучить пользователей, установить некоторые элементы управления и т. Д., А также настроить процесс развертывания так, чтобы только утвержденные изменения передавались в среду базы данных с помощью сценариев. Просто мысль, хотя.
Вам обязательно нужно отслеживать КАЖДЫЕ изменения, внесенные в объект или только в последний? Мы написали решение на C#, которое работает против TFS, в котором у нас есть базовая линия всех объектов SQL в базе данных, а затем, используя методы из Microsoft.SqlServer.Management.Smo, мы просто проходим каждый объект базы данных и сравниваем "рабочий набор". к версии сервера. Мы запускаем его ночью как часть нашей вечерней обработки, и на весь сервер из 9 баз данных уходит около 15 минут. Мы обнаружили, что он прекрасно работает, не требует каких-либо прямых модификаций серверов / баз данных SQL и работает для SQL 2005/2008. Он генерирует отчет, который отправляется по почте администратору нашей базы данных, сообщая им, какие объекты изменились, а затем позволяет им пройти через TFS и посмотреть, что и что.
Я изначально начал здесь; http://odetocode.com/blogs/scott/archive/2008/02/02/versioning-databases-change-scripts.aspx
но обнаружил, что то, что я искал, было не столько способом отправить изменения на сервер, сколько просто узнать об изменениях. Ссылка на блог содержит несколько достойных предложений, возможно, будет полезна.
С уважением.