Каков наилучший способ контроля версий моих хранимых процедур SQL-сервера?

Каков наилучший способ контроля версий объектов моей базы данных? Я использую Visual Studio 2005/2008 и SQL Server 2005. Я бы предпочел решение, которое можно использовать с SVN.

Ответ 1

То же, что и ваш другой код, добавьте "проект базы данных" в ваше приложение и сохраните файлы sql, используемые для создания объектов базы данных. Используйте тот же элемент управления версиями для этих файлов кода, что и для приложения.

Ответ 2

Посмотрите на инструменты, предлагаемые RedGate. В них конкретно рассматриваются случаи резервного копирования/восстановления/сравнения для объектов SQL Server, включая SP. В качестве альтернативы я не уверен, но я думаю, что Visual Studio позволяет вам проверять sp в репозитории. Хавент сам это пробовал. Но я могу порекомендовать инструменты RedGate. Они спасли мне массу проблем.

Ответ 3

Я использую SVN для всех элементов управления исходным кодом /sproc/function.

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

Для интересующихся источник теперь доступен в svn://finsel.com/public/VS2005/GenerateSVNFilesForSQL2005.

Ответ 4

Мы используем Subversion, и все, что мы делаем, это сохранить код sql в каталоге для нашего проекта subversion, а затем передать код в репозиторий, когда мы будем готовы и обновить из репозитория, прежде чем мы начнем работать над чем-то уже там.

Настоящий трюк - убедить разработчиков сделать это. Наши dbas делают это, удаляя любой сохраненный proc (или другой объект базы данных), который не находится в Subversion периодически. Потеряйте вещи один раз и в значительной степени никто не делает это снова.

Ответ 5

Я не знаю предварительно упакованного решения, извините...

... но вы не могли бы просто немного script подключиться к базе данных и сохранить все хранимые процедуры на диск в виде текстовых файлов? Затем script добавит все текстовые файлы в репозиторий SVN, сделав системный вызов 'svn add'.

Тогда вам, возможно, понадобится еще один script для подключения к БД, отбросить все хранимые процедуры и загрузить все хранимые процедуры хранилища с диска. Этот script должен запускаться каждый раз, когда вы запускаете "svn up" и имеете новые/измененные хранимые процедуры.

Я не уверен, что это может быть достигнуто с помощью MS SQL, но я уверен, что MySQL это применит. Если писать SVN-расширения для этого слишком сложно, Capistrano поддерживает скрипты checkin/checkout, IIRC.

Ответ 6

Лучший способ - тот, который работает на вас.

Самый простой способ - тот, который в настоящее время не существует.

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

Что мы должны делать, это реализовать какой-то контроль источника и шаблон dump diff..., но он вообще "работает для нас", хотя он действительно сильно ударяет большую часть времени.

Ответ 7

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

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

Ответ 8

Мы делаем дампы для открытого текста и сохраняем их в нашей VCS.

Вы можете script выполнить резервное копирование и-commit, чтобы сделать что-то подобное.

Ответ 10

Используйте versaplex для сброса вашей схемы: http://code.google.com/p/versaplex/

Versaplex поставляется с Schemamatic, который считывает схему базы данных (таблицы, SP и т.д.), а также данные (данные сбрасываются как CSV). Я использую его, с SVN и git, и это потрясающе:) Если вам нужна помощь, дайте мне знать, стоит попробовать! http://github.com/eduardok/versaplex