Хранимые процедуры в Source Control, лучшие практики


16

В настоящее время я использую Tortoise SVN для управления исходным кодом веб-приложения .NET. Как лучше всего перенести хранимые процедуры SQL Server в систему управления версиями? В настоящее время я использую VS 2010 в качестве среды разработки и подключаюсь к внешней базе данных SQL Server 2008 R2 с помощью средств данных SQL Server (SSDT).

В прошлом я занимался сохранением процедур в файл .sql и сохранением этих файлов под контролем исходного кода. Я уверен, что должен быть более эффективный способ, чем этот? Есть ли расширение, которое я могу установить на VS2010, SSDT или даже SQL Server на рабочем компьютере?


2
Если вы используете тип проекта SSDT в Visual Studio, добавьте этот проект в систему управления версиями. Вот и все.
Марк Стори-Смит

1
Пожалуйста, уточните ваши цели - вы просто ищете версии объектов базы данных или вы тоже пытаетесь использовать это в качестве платформы развертывания?
Джон Зигель

Ответы:


14

Есть инструменты, такие как Redgate , но я всегда обнаруживал, что лучше всего сохранять их в виде файлов SQL, возможно, даже в проекте базы данных (SSDT?) В вашем решении.

Наряду с этим, я предлагаю следующие рекомендации:

  • Всегда предполагайте версию SVN как «текущую» / «последнюю»
  • Убедитесь, что у каждого запускаемого вами скрипта есть соответствующий " if exists then drop" в начале
  • Не забудьте написать свои разрешения, если таковые имеются

Первоначально вы можете создавать эти файлы SQL, создавая сценарии непосредственно из SSMS, и вы можете настроить SSMS для сценариев всех ваших « drop» и « create», а также ваших разрешений.


Я не знал о типе проекта базы данных и только начал изучать SSDT, но это выглядит многообещающе. Я выбрал это решение, поскольку он не зависит от сторонних инструментов, и я могу легко перенести файлы .sql в наш текущий Source Control.
QFDev

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

3
Будьте осторожны с «если они есть, удалите, (заново) создайте с новым определением» при изменении таблиц / представлений, на которые ссылаются другие представления / процессы. Я столкнулся с обстоятельствами, когда выходные данные таких зависимых представлений повреждены (тип столбца и содержимое перемещены, но имена нет) из-за повторного использования плана запроса без перекомпиляции, предполагая предыдущую структуру. Более безопасным вариантом является «если не существует, создайте пустышку», за которым следует «изменить таблицу / представление / процесс», поскольку команда alter будет следовать за записями sysdepends для аннулирования планов по мере необходимости, а команда drop + create не будет, так как drop удаляет такие записи, а команда create не сканирует свисающие ссылки.
Дэвид Спиллетт

Комментарий @DavidSpillett еще более важен, если у вас есть триггеры в управлении версиями, потому что drop + create может потерпеть неудачу даже в тупике, не должно происходить с create dummy + alter
James Z

4

Сохранение файлов SQL в системе контроля версий обеспечивает контроль только над файлами SQL. Он не контролирует изменения реальных объектов базы данных и не предотвращает одновременные изменения одного и того же объекта базы данных несколькими пользователями (и я думаю, вы хотели бы также контролировать это). Мы используем сторонний инструмент ( ApexSQL Version), он интегрируется как с SSMS, так и с VS, вы можете выбрать, работать ли с версией объекта в базе данных или с версией Source Control. Если вы редактируете версию базы данных, она автоматически проверяется только вами, поэтому никто другой не может ее редактировать (она не объединяет изменения от разных пользователей). Только когда вы зарегистрируете его снова, другие могут его изменить. И вы можете иметь свою версию SC, отличную от версии живого объекта (я использую ее, когда ухожу на день и планирую закончить правки и проверить ее на следующем)


3

Используйте RedGate Source Control, чтобы подключить его к вашему контролю исходного кода.

http://www.red-gate.com/products/sql-development/sql-source-control/

Он подключит вашу SSMS непосредственно к вашему репозиторию управления исходным кодом и даже позволяет проверять статические данные.

Работает как шарм


3

Попробуйте Ankhsvn , очень рекомендуется и бесплатно.

С домашней страницы:

AnkhSVN - поставщик управления исходным кодом Subversion для Microsoft Visual Studio 2005, 2008, 2010 и 2012 .

AnkhSVN обеспечивает поддержку управления исходным кодом Apache ™ Subversion® для всех типов проектов, поддерживаемых Visual Studio, и позволяет выполнять наиболее распространенные операции контроля версий непосредственно из среды Microsoft Visual Studio IDE.

Панель инструментов Pending Changes дает вам уникальное представление о процессе разработки и обеспечивает легкий доступ к исходному коду и функциям управления проблемами. Интеграция глубокого контроля исходного кода (SCC) позволяет вам сосредоточиться на разработке, в то время как AnkhSVN отслеживает все ваши изменения и предоставляет вам инструменты для эффективного удовлетворения ваших конкретных потребностей.


3

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

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

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

Поэтому, как только я развернул v1.0, возникла необходимость в поддержке сценариев обновления. Иногда они просто содержат изменения схемы, но во многих случаях мне нужно создавать значения по умолчанию на основе содержимого какой-либо другой таблицы, нужно снимать определенное ограничение до тех пор, пока я не заполню данные и т. Д. Обычно простое обновление схемы не совсем обрезает ее. Я предпочитаю, чтобы эти сценарии обновления находились в отдельной папке в проекте базы данных. Обычно это выглядит как «обновление с версии 1.0 до версии 1.1».

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

Еще одним преимуществом проектов базы данных является возможность развертывания различных наборов данных на основе одной и той же схемы. У меня есть разные наборы данных для разработки, команды QA, проверки приемлемости для пользователей и для автоматизированных интеграционных тестов. Поскольку у проекта базы данных может быть только 1 сценарий после развертывания, задача состоит в том, чтобы создать новый проект базы данных, который ссылается на «главный» проект, и сделать настраиваемый набор данных частью процесса после развертывания этого проекта.

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


0

Я закончил писать инструмент сам.

Он доступен для бесплатного скачивания - http://www.gitsql.net

Я надеюсь, что это помогает другим людям, которые хотят достичь той же конечной цели.

Вот статья, которая описывает, как управлять исходным кодом SQL Server. http://gitsql.net/documentation-04_SQL_Server_and_GIT

Я пытался сделать это как можно проще. (3 экрана)

  • Подключиться к SQL Server
  • Выберите объекты
  • Выберите папку для экспорта в / импортировать из

Я также - случайно - добавил возможность выбора отдельных объектов для импорта или экспорта. Что делает его намного проще во время разработки.

Я обычно вносил изменения в хранимую процедуру и таблицу, а затем экспортировал эти два объекта в каталог GIT.

Затем я использую дерево исходных текстов, чтобы визуально увидеть изменения, а затем зафиксировать их в bitbucket, если я счастлив.


4
скачать бесплатно - но только для 20 объектов. Этот ответ - просто реклама вашего продукта.
Thronk

-1

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

Servantt - это WinMerge для сравнения баз данных SQL Server с управляемыми версиями сценариями.

Он поддерживает и поощряет лучшие практики в разработке программного обеспечения:

  • Хранение объектов базы данных под контролем версий (*)
  • Удаление прав доступа от разработчиков в производственных средах
  • Анализ DBA изменений в процедурах / представлениях для узких мест производительности и стандартов именования
  • Именование объектов с использованием полностью определенных идентификаторов и ограничителей в скобках (это исправляет сценарии CREATE PROCEDURE / VIEW / FUNCTION / etc)

(*) Скрипты сохраняются в локальной папке, которая может быть рабочей копией Git, Subversion, TFS, Source Safe или любой другой VCS.

Скачать бесплатно: http://servantt.com

Профессиональная версия (которая все еще находится в стадии разработки) будет совершенно другим чудом - она ​​предназначена для автоматизации развертывания (управления выпусками), для автоматизации таких задач, как обновление IIS, обновление служб Windows и т. Д.


Этот инструмент не работает.
Нирадж Кумар

@NeerajKumar есть адрес «свяжитесь с нами» на странице, где вы можете описать свою проблему. Я буду рад помочь. Есть более тысячи активных пользователей, я полагаю, это работает в некотором смысле :-)
drizin
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.