Предоставление объектов базы данных 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.

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

Спасибо всем заинтересованным за ваш вклад.

Возникают некоторые конкретные вопросы, в основном связанные со сценарием различных типов объектов схемы.

  • How to extract create and alter scripts in dependency order for
    • table
    • Посмотреть
    • хранимая процедура
    • функция
    • курок
    • показатель
    • иностранный ключ
  • Как извлечь сценарии заполнения таблицы в порядке зависимости
  • Как оперативно обнаруживать изменения в схеме (при отсутствии триггеров на sys.objects нужно будет опрашивать, лучше быстро и дешево)

Обнаружение изменений

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


person Community    schedule 19.10.2009    source источник
comment
Это очень интересная идея. Извините, у меня нет опыта в этом, но я хотел бы увидеть ответ/   -  person Preet Sangha    schedule 19.10.2009


Ответы (6)


Мы используем Red Gate для сравнения текущей схемы с файлами сценариев, хранящимися в SVN, для базовых показателей, версий и т. д.

Однако наш эталонный эталон на самом деле является восстановленной копией производства. Это наш базовый уровень, и он должен соответствовать SVN. Частью процесса развертывания является передача основных сценариев в SVN, что Red Gate делает с пользой: он только изменяет файлы для измененных объектов.

Мы дополнительно разделяем наши рабочие сценарии и сценарии выпуска (только изменения), поэтому у нас всегда есть главная БД и базовый уровень в SVN. Однако мы используем скрипты только для разработки.

Управление исходным кодом базы данных — это хорошо, но его сложно реализовать из-за того, что представляет собой объект SQL Server: строка или 3 в некоторых таблицах...

person gbn    schedule 20.10.2009
comment
Мы тоже используем Red Gate с почти такими же методами работы. Я пытаюсь улучшить уровень автоматизации. - person Peter Wone; 21.10.2009

на очень упрощенном уровне вы можете написать службу Windows, которая следит за файловой системой и анализирует файлы в каталоге aprticuler и применяет их к базе данных. Аналогичный мехинсим с использованием брокера SQL-сервера (или просто триггеров и xp_commandshell) можно использовать для написания обратного.

person Preet Sangha    schedule 19.10.2009
comment
Вы совершенно правы, зафиксировать изменения в папке на диске довольно просто, и небольшой сервис может легко отправить изменения на сервер. Но что это за брокер SQL Server, о котором вы говорите? - person Peter Wone; 19.10.2009
comment
Я только что просмотрел его и, насколько я понимаю, это что-то вроде MSMQ с использованием базы данных. Я не понимаю, как это позволит мне перехватывать обновления практически всего, что не является табличными данными. - person Peter Wone; 19.10.2009
comment
Вы предлагаете мне поставить триггеры на системные таблицы? - person Peter Wone; 21.10.2009

За последние шесть месяцев или около того я разрабатывал инструмент под названием ShiftSchema, который, как мне кажется, имеет отношение к вашему вопросу.

ShiftSchema использует триггеры базы данных для синхронизации объектов базы данных SQL Server 2005 и 2008 с файлами на диске, которые подходят для хранения в системе контроля версий. Он также отслеживает изменения в файловой системе (когда вы обновляетесь из репозитория и получаете изменения схемы, зафиксированные другим разработчиком) и отправляет эти изменения в вашу личную базу данных разработки.

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

Он также имеет средство для сравнения двух баз данных (либо в СУБД, либо на диске) и создания сценария DDL для их синхронизации.

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

Если вам интересно, ссылка на сайт в моем профиле указывает на сайт ShiftSchema.

person Andrew Kennan    schedule 22.10.2009
comment
Это очень похоже на то, что я имею в виду. Я действительно проверю [так в оригинале] вашу работу. - person Peter Wone; 23.10.2009

Red Gate создает систему управления версиями SQL, интегрируя ее с SSMS, чтобы обеспечить как фиксацию, так и извлечение из системы управления версиями (в фоновом режиме мы связываем объекты базы данных с соответствующими файлами создания SQL, хранящимися в системе управления версиями). Хотя мы рекомендуем, чтобы каждый разработчик использовал собственную разрабатываемую копию базы данных, мы планируем поддерживать модель, в соответствии с которой она является общей, хотя это имеет недостаток, заключающийся в том, что любой разработчик может сломать базу данных для всех в любой момент.

Мы надеемся выпустить инструмент в первой половине 2010 года. Если вы хотите узнать больше или зарегистрироваться в нашей программе раннего доступа, перейдите по следующей ссылке:

http://www.red-gate.com/products/SQL_Source_Control/index.htm

С уважением,

Дэвид Аткинсон, менеджер по продукту, Red Gate Software

person David Atkinson    schedule 25.10.2009
comment
Программа раннего доступа завершена, и сейчас выпущен SQL Source Control v1.0. Загрузите его и сообщите нам, соответствует ли он вашим требованиям. red-gate.com/products/SQL_Source_Control/index.htm - person David Atkinson; 30.06.2010

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

Вам, конечно, потребуется обучить пользователей, установить некоторые элементы управления и т. д., а также настроить процесс развертывания таким образом, чтобы через сценарии в среду базы данных поступали только одобренные изменения. Хотя просто мысль.

person Critical Skill    schedule 20.10.2009
comment
Необходимость обучать пользователей, вот в чем фишка. Даже если они слушают, иногда они забывают. - person Peter Wone; 21.10.2009
comment
полностью знаю, что вы имеете в виду. Просто подумал, что у вас может быть более сговорчивая аудитория, чем у меня ;-) удачи. - person Critical Skill; 21.10.2009

Вам обязательно нужно отслеживать КАЖДОЕ изменение, внесенное в объект, или только последнее? Мы написали решение на 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

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

С уважением.

person Christopher Klein    schedule 21.10.2009
comment
То есть, по сути, вы выполняете контроль версий ежедневных снимков структуры базы данных? - person Peter Wone; 22.10.2009
comment
да, это служит целям наших аудиторов SAS70, которым просто нужно знать, что и когда было изменено, не обязательно, что это изменилось 20 раз в процессе разработки. Развертывание на нашем производственном сервере очень спорадическое, поэтому оно обеспечивает хороший способ в основном откатить все обновление или частично, если это необходимо, поскольку у вас есть вся история. - person Christopher Klein; 22.10.2009