Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как хранить БД в системе контроля версий?  [new]
stenford
Member

Откуда: урал
Сообщений: 2832
Используется скажем TFS, требуется следующая функциональность - при изменении любой ХП, функции, таблицы или даже insert скрипта (который заполняет базу определенными данными) информация об этом оказывалась в системе контроля версий и была возможность отследить историю изменений, скажем увидеть всю историю изменений определенной ХП. Возможно-ли такое?
Пока используется следущий подход - в TFS продублированы все ХП и функции (таблицы и скрипты не отслеживаются), и ХП меняется либо прямо через visual studio (что неудобно, т.к. management studio более мощный редактор), либо после изменения ХП разработчик копирует ее текст в TFS. Это тоже неудобно, т.к. регулярно кто-нибудь забывает проапдейтить TFS и появляются различия.

Можно-ли как-нибудь сделать так что-бы ХП, функции, структура и скрипты оказались под контролем версий, но без утомительного ручного копирования каждый раз после изменений?
9 мар 11, 09:01    [10340785]     Ответить | Цитировать Сообщить модератору
 Re: Как хранить БД в системе контроля версий?  [new]
Edkonst2008
Member

Откуда:
Сообщений: 503
stenford,

Т.е., что бы TFS за Вас решала, надо ли заливать в свой репозитарий Ваши изменения?
9 мар 11, 09:53    [10341001]     Ответить | Цитировать Сообщить модератору
 Re: Как хранить БД в системе контроля версий?  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
stenford
Используется скажем TFS, требуется следующая функциональность - при изменении любой ХП, функции, таблицы или даже insert скрипта (который заполняет базу определенными данными) информация об этом оказывалась в системе контроля версий и была возможность отследить историю изменений, скажем увидеть всю историю изменений определенной ХП. Возможно-ли такое?
Пока используется следущий подход - в TFS продублированы все ХП и функции (таблицы и скрипты не отслеживаются), и ХП меняется либо прямо через visual studio (что неудобно, т.к. management studio более мощный редактор), либо после изменения ХП разработчик копирует ее текст в TFS. Это тоже неудобно, т.к. регулярно кто-нибудь забывает проапдейтить TFS и появляются различия.

Можно-ли как-нибудь сделать так что-бы ХП, функции, структура и скрипты оказались под контролем версий, но без утомительного ручного копирования каждый раз после изменений?


red-gate.com
9 мар 11, 09:55    [10341010]     Ответить | Цитировать Сообщить модератору
 Re: Как хранить БД в системе контроля версий?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
stenford
Можно-ли как-нибудь сделать так что-бы ХП, функции, структура и скрипты оказались под контролем версий, но без утомительного ручного копирования каждый раз после изменений?
Можно просто вести проекты в visual studio.

Не знаю, чем отличается редактор SSMS, по моему, в visual studio ничуть не хуже.

Можно и видеть все изменения, всю историю, и генерить скрипты изменений, для программных объектов (ХП, функции, триггеры и т.п.) это всё отлично работает.
9 мар 11, 10:53    [10341438]     Ответить | Цитировать Сообщить модератору
 Re: Как хранить БД в системе контроля версий?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Самописный триггер:
CREATE TRIGGER [HGSaveObject] ON ALL SERVER
AFTER DDL_DATABASE_LEVEL_EVENTS,ALTER_DATABASE,DROP_DATABASE AS BEGIN ...
Там конечно целая система (2к строк кода). Т.к. учитывать надо любые комбинации, типа ALTER SCHEMA TRANSFER и DROP TABLE с триггерами и ALTER VIEW с индексами, sp_rename...

Раньше было на-а-амного проще. При каждом изменении в VSS тупо создавалась версия файла. Хотя VSS в основном централизованный блокировщик.
Теперь наоборот делается CheckOut/CheckIn. Хотя репо распределённый - Mercurial.
Оно и понятно сервер разработки то общий. Зато изменения целостны и с комментами.

Почему такая сложная система? У нас установлены некоторые свои критерии, ограничения и структура. CheckOut можно делать схеме, базе или серверу. Чтобы учитывался auto-merge и оптимальное блокировка при разработке с несколькими проектами/группами программистов.

Вот хочеца ещё аля StyleCop для сиквела. Только думаю руки не дойдут, хотя направление копания есть (уже писал).
9 мар 11, 10:58    [10341503]     Ответить | Цитировать Сообщить модератору
 Re: Как хранить БД в системе контроля версий?  [new]
Павел-П
Guest
stenford,

Именно для ваших целей и разработали MS Visual Studio for Database Professionals.
Почитайте, посмотрите что это такое.
Штука интересная.
9 мар 11, 12:37    [10342401]     Ответить | Цитировать Сообщить модератору
 Re: Как хранить БД в системе контроля версий?  [new]
stenford
Member

Откуда: урал
Сообщений: 2832
Павел-П
stenford,
Именно для ваших целей и разработали MS Visual Studio for Database Professionals.
Почитайте, посмотрите что это такое.
Штука интересная.

да, судя по описанию штука вроде не плохая, но опять-таки проблема в том, что приходиться использовать visual studio редактор sql, а в нем как минимум нет execution plans, т.е. в любом случае придется юзать management studio для настройки
А может есть каки-нибудь компоненты для студии, которые имеют функционал из management studio ?

alexeyvg
Не знаю, чем отличается редактор SSMS, по моему, в visual studio ничуть не хуже.

а execution plans вы откуда там берете?
10 мар 11, 03:47    [10346840]     Ответить | Цитировать Сообщить модератору
 Re: Как хранить БД в системе контроля версий?  [new]
wghost
Member

Откуда:
Сообщений: 39
Посмотри Toad For Sql Server. Я перепробовал кучу редакторов для базы данных MS SQL и Oracle. Остановился на нем.
Что есть в нем из того, что я использую:
1. Нормальная работа с базой
2. Просмотр плана выполнения
3. Лог всех скриптов, которые я вызывал
4. Нормальные подсказки
5. Есть инструменты для тюнинга базы, SQL Optimizer и другие
6. Есть возможность подключиться прямо из него к системе контроля версий и автоматом туда все заливать
7. Есть возможность сравнить схемы двух БД и получить скрипт миграций
8. Есть возможность сравнить данные двух БД и получить скрипт обновления



Есть еще один вариант, у меня на работе работает следующая схема:
У нас идет разразработка Dev-Stend-Production - три разные машинки на которых находится наша база.

Dev изначально является полной копией Stend и Production.

Вся разработка идет на Dev. Затем с помощью dbdeploy и hudson используя делта скрипты у нас идет выливание на Stend, если все тесты прошли успешно, то идет выливание на Production.

Основная идея, что делта скрипт делается путем сравния двух баз используя toad или dbforce инструменты(кстати он бесплатный)
10 мар 11, 07:45    [10346942]     Ответить | Цитировать Сообщить модератору
 Re: Как хранить БД в системе контроля версий?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
stenford
alexeyvg
Не знаю, чем отличается редактор SSMS, по моему, в visual studio ничуть не хуже.

а execution plans вы откуда там берете?
Да, для планов и оптимизации приходится использовать SSMS. Ну и вообще - студию использую для разработки, а запускаю в SSMS - в студии ни разу не запускал.
На мой взгляд, очень удобно, позволяет не пользоваться мышкой.

И ещё насчёт планов - я обычно всё равно для сложных случаев планы смотрю в профайлере, а для простых их и смотреть нечего :-)
10 мар 11, 09:46    [10347230]     Ответить | Цитировать Сообщить модератору
 Re: Как хранить БД в системе контроля версий?  [new]
Павел-П
Guest
stenford
да, судя по описанию штука вроде не плохая, но опять-таки проблема в том, что приходиться использовать visual studio редактор sql, а в нем как минимум нет execution plans, т.е. в любом случае придется юзать management studio для настройки
А может есть каки-нибудь компоненты для студии, которые имеют функционал из management studio ?


может быть и есть. Вообщем вы хотите всеобщего и полного счасться. Только в данном случае реально я не вижу никакой проблемы в использовании Management Studio для просмотра execution plan-ов. Вы ничего не теряете (ни времени, ни прочих ресурсов). Разве что 2 приложения запущено.
10 мар 11, 11:16    [10347827]     Ответить | Цитировать Сообщить модератору
 Re: Как хранить БД в системе контроля версий?  [new]
Qumer
Member

Откуда:
Сообщений: 3
stenford
Используется скажем TFS, требуется следующая функциональность - при изменении любой ХП, функции, таблицы или даже insert скрипта (который заполняет базу определенными данными) информация об этом оказывалась в системе контроля версий и была возможность отследить историю изменений, скажем увидеть всю историю изменений определенной ХП. Возможно-ли такое?
Пока используется следущий подход - в TFS продублированы все ХП и функции (таблицы и скрипты не отслеживаются), и ХП меняется либо прямо через visual studio (что неудобно, т.к. management studio более мощный редактор), либо после изменения ХП разработчик копирует ее текст в TFS. Это тоже неудобно, т.к. регулярно кто-нибудь забывает проапдейтить TFS и появляются различия.

Можно-ли как-нибудь сделать так что-бы ХП, функции, структура и скрипты оказались под контролем версий, но без утомительного ручного копирования каждый раз после изменений?


В MSSMS есть пункт меню Tools>External Tools, туда можно забить свои команды. Я сделал несколько команд с использование tf.exe(ставится вместе с Team Explorer 2005(2008) для работы с TFS 2005(2008)). Команды следующие:
Забрать последнюю версию из tfs открытого файла
CheckOut открытому файлу

Как это работает:
Я открываю интересующий меня файл из папки ассоциирующаяся с WorkSpace TFS и если мне нужно его редактировать, выбираю получить последнюю версию файла из TFS и потом CheckOut.
Произвожу необходимы изменения и сохраняю.
Потом перехожу в MS VS 2008 и делаю CheckIn с привязкой к задаче.
Мне так удобно работать.

PS есть еще провайдер для подключения к TFS MSSMS, но он уж очень глючный оказался и не удобный - необходимо было создавать проект в MSSMS и туда добавлять скритпы. С отдельным открытым скриптом он не хотел работать.
21 июл 11, 08:53    [11004177]     Ответить | Цитировать Сообщить модератору
 Re: Как хранить БД в системе контроля версий?  [new]
budden
Member

Откуда:
Сообщений: 1060
stenford,

Я делал так:
1. Завёл множество файлов скриптов (*.sql), в которых хранятся все исходники вьюх, хрпр,триггеров, раздача прав. В одном файле, обычно, несколько объектов. Таблиц там нет.
2. Эти файлы загружаются в базу isql, если их все загрузить, структура базы будет какая надо.
3. Файлы построены в проект make, к-рый "собирает" структуру БД экономно.
4. Никогда не менял процдуры напрямую, а всегда сначала менял исходник, потом делал make. Если надо поработать в Query Analyzer, надо не забыть сделать copy/paste.
5. Эволюция базы (alter table, update) записывается в отдельных файлах, например, alter-yyyy-mm-dd-номер-внутри-дня.sql и также загружается с помощью isql (вручную). Можно завести систему, к-рая будет отслеживать, что все изменения сделаны.
6. Все упомянутые файлы хранятся в системе контроля версий.

примерно 5 лет я поддерживал базу MS SQL с помощью этой системы, достаточно удобно. Позволяет иметь несколько баз разработки и спокойно переносить все изменения в production.

Сейчас я пользуюсь аналогичной систеой для Firebird.

Принципиальный недостаток такой системы - один: для обновления нужно сделать паузу в работе системы в 2-3 минуты. В моём случае это приемлемо.
19 июн 12, 14:17    [12738570]     Ответить | Цитировать Сообщить модератору
 Re: Как хранить БД в системе контроля версий?  [new]
kaygees
Member

Откуда:
Сообщений: 93
Господа,
установил VS2008TS Database Edition.
Импортировал схемы БД, при деплое вылетает validation error на запросе с CTE.
Никто с этим не сталкивался? Запрос в SMSS не выдает ошибок.
26 июн 12, 18:03    [12778640]     Ответить | Цитировать Сообщить модератору
 Re: Как хранить БД в системе контроля версий?  [new]
Crimean
Member

Откуда:
Сообщений: 13148
budden,

+1. все верно. а если make сделать чуть более умным то и никаких пауз в работе делать не надо
26 июн 12, 18:09    [12778676]     Ответить | Цитировать Сообщить модератору
 Re: Как хранить БД в системе контроля версий?  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3618
Crimean
budden,

+1. все верно. а если make сделать чуть более умным то и никаких пауз в работе делать не надо

Это вообще самый правильный способ.
Опять же при наличии как в серьезных местах нескольких энвайроментов (база для разработки - база для тестирования - продакшен база) и само собой отнятия всех прав у простых разработчиков на продакшен базу - по другому никак.
26 июн 12, 18:42    [12778804]     Ответить | Цитировать Сообщить модератору
 Re: Как хранить БД в системе контроля версий?  [new]
Jovanny
Member

Откуда:
Сообщений: 1195
С базой работаю через SSMS, но параллельно существует SQL Server Database Project в Visual Studio 2010.
После изменений в базе делаю Shema Compare и затем Check-In в TFS.
Отлично отслеживается история изменений.
Вообще довольно мощная связка VS2010-SSDT Power Tools.
26 июн 12, 19:43    [12778961]     Ответить | Цитировать Сообщить модератору
 Re: Как хранить БД в системе контроля версий?  [new]
VS2010
Guest
Jovanny
С базой работаю через SSMS, но параллельно существует SQL Server Database Project в Visual Studio 2010.
После изменений в базе делаю Shema Compare и затем Check-In в TFS.
Отлично отслеживается история изменений.
Вообще довольно мощная связка VS2010-SSDT Power Tools.

я правильно понял, что вы напрямую чёта наменяли в базе а потом затягиваете изменения в SQL DB project?
26 июн 12, 19:55    [12778986]     Ответить | Цитировать Сообщить модератору
 Re: Как хранить БД в системе контроля версий?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Офигеть метод чайничка.
26 июн 12, 23:02    [12779509]     Ответить | Цитировать Сообщить модератору
 Re: Как хранить БД в системе контроля версий?  [new]
kaygees
Member

Откуда:
Сообщений: 93
kaygees
Господа,
установил VS2008TS Database Edition.
Импортировал схемы БД, при деплое вылетает validation error на запросе с CTE.
Никто с этим не сталкивался? Запрос в SMSS не выдает ошибок.

проблема была в VS2008, в VS2010 все ок
27 июн 12, 12:22    [12781711]     Ответить | Цитировать Сообщить модератору
 Re: Как хранить БД в системе контроля версий?  [new]
AlexMajic
Member

Откуда: Kiev
Сообщений: 99
а еще вот тут http://connect.microsoft.com/SQLServer/feedback/details/737893/ssms-2012-error-adding-solution-to-source-control-with-tfs-msscci-provider
недавно обещали в свежем апдейте нормально прикрутить SSMS 2012 к TFS. Жду, не дождусь - так приятно из VS c TFS работать, а уж если будет в SSMS - вообще песня!
27 июн 12, 17:54    [12784594]     Ответить | Цитировать Сообщить модератору
 Re: Как хранить БД в системе контроля версий?  [new]
PG81
Member

Откуда: Тверь
Сообщений: 882
AlexMajic,

fа не знаете можно ли как-то на чекоут взять файлы из какого-то списка

Например в репозиторий может чекинить только определеный чел
ему принясят список файлов он их берет на чекоут копирует новые вместо старых
и потом все чекинит
вобщем самое важно возможность взять на чекоут список файлов.
Такое возможно?
2 июл 12, 15:48    [12804880]     Ответить | Цитировать Сообщить модератору
 Re: Как хранить БД в системе контроля версий?  [new]
AlexMajic
Member

Откуда: Kiev
Сообщений: 99
PG81,

Ну, для этого, собственно, и используется система контроля версий. Только файлы извлекаются по-одному (и в итоге получается список извлеченных файлов) . А вот насчет возвращения только одним человеком этих файлов - тут нужно выключать шаровый чекаут в настройках, ну и права соответственно на TFS-е не забыть нормально раздать.
2 июл 12, 16:00    [12804977]     Ответить | Цитировать Сообщить модератору
 Re: Как хранить БД в системе контроля версий?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
PG81
Например в репозиторий может чекинить только определеный чел
ему принясят список файлов он их берет на чекоут копирует новые вместо старых ...
Человек-клавиатура
Человек-чекинер
2 июл 12, 20:07    [12806408]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить