Контроль версій за допомогою SQL Server


14

Я починаю новий проект і використовую SVN (з черепахою) як свою систему управління версіями. Мені було цікаво, чи можна також підтримувати базу даних SQL Server за допомогою тієї ж системи.

Я хотів би версії моїх таблиць / функцій / переглядів / procs / тригерів / тощо. але не мої дані, оскільки все одно це будуть тестові дані. Я не дуже впевнений, як це налаштувати. Я зіткнувся з декількома варіантами, але хотів би знати, чи не було я, і якщо там, можливо, посібник чи щось там, щоб допомогти мені з цим працювати.

Я бачив і чув про Red Gate, але шукаю щось безкоштовно (або, принаймні, дуже низьку вартість). Я знаю, що завжди міг щось написати сам, але не дуже намагаюся витрачати на це час.

Одне, на що я натрапив, - це пакет із відкритим кодом, що складається разом під назвою ScriptDB4Svn . Хтось користувався цим раніше? Це добре? Чи може він робити те, що мені потрібно для цього, і чи досить просто отримати налаштування?


1
Has anyone used this before? Is it good? Can it do the things I need it to do and is it pretty simple to get setup?Чому ти боїшся спробувати це на собі? Просто схопіть його і пограйте.
янніс

@ YannisRizos - Я точно буду, якщо я не отримаю занадто багато відповідей на це, я в основному просто хотів спробувати врятувати деякий час і побачити, чи хтось працював з цим раніше, чи хтось що-небудь випробував і випробовував прямо з битою які відповідають моїм потребам, щоб я міг заощадити час на експерименти.

Щойно помітив, як ви тут нові. Програмісти SE - це не найкраще місце для запитань, щоб заощадити час, ми дійсно сподіваємось, що ви зробите такі речі для себе, тобто зробіть власне дослідження, перш ніж задавати питання . Або, альтернативно, запитайте у чаті (але не очікуйте надійних відповідей). Сказавши це, це насправді не має значення, тому що останнє речення не є вашим основним питанням, яке насправді є дуже хорошим (і правильно позначено тегом, що рідко для нових користувачів, кудо!).
янніс

@YannisRizos - спасибі Я заскочу у чат, щоб побачити, чи зможу я отримати відгуки про ScriptDB4Svn, і перевірте тут, чи немає оновлень щодо основного питання. Редагувати: Схоже, я не можу спілкуватися, поки не отримаю 20 повторень. Ну добре, терпіння я здогадуюсь.

Відповіді:


2

З технічної точки зору вам навіть не потрібен інструмент, ви можете сценаріювати об'єкти безпосередньо та перевіряти їх у контролі джерел. Це трохи більше роботи без інструменту, але це, безумовно, працездатно.

BTW: Я використовував інструмент RedGate, і він досить гладкий і вартий грошей.


Отже, я б в основному робив свою роботу в Management Studio, а потім експортував сценарії в каталог SVN, і в основному це роблю щоразу, коли я працюю над ним (замінюючи старі кожен експорт)? Я думаю, це спрацювало б. Це дозволило б зберегти функціонал SVN, щоб можна було повертати та інше, але так, це було б певною мірою. Можливо, я перевірю ціни на RedGate і побачу, чи варто це для мене.

@Scott - Ручний спосіб може працювати, ви просто повинні думати про свою розробку SQL інакше. Сценарійні версії об'єктів є "офіційними", а версія в SQL - це лише компільована версія. Так само, як і ваш вихідний код.
JohnFx

Я вирішив зробити все вручну і, можливо, реалізувати скрипт, використовуючи допомогу у посиланнях, які надав Майк Накіс, але наразі я просто збираюся використовувати вбудований інтерфейс GUI у програмі Management Studio для експорту скриптів створення БД, коли я закінчу працюючи, і перевірте тих, хто входить, і нехай SVN підтримує їх таким чином. Оскільки я вирішив все робити вручну, ви отримуєте відповідь, щоб вказати, що мені не дуже потрібен інструмент для цього: :)

1

Здається, у вас в основному налаштування Microsoft. Ви можете ознайомитися з проектами баз даних (раніше відомими як DataDude). Вони в основному перетворюють T-SQL на першокласну мову в Visual Studio; ти можеш:

  • Компілюйте проекти - це не просто створює остаточний сценарій, але забезпечує наявність імен об'єктів тощо.
  • Виконайте статичний аналіз коду - наприклад, переконуючись, що ви завжди посилаєтесь на об’єкти, включаючи їх схему (наприклад, [dbo]у більшості випадків) для того приємного 30-відсоткового підвищення продуктивності.
  • Створіть різні сценарії за допомогою порівняння різних версій проекту.
  • Оновіть проект із бази даних або сценарію (інженер зворотного зв'язку).
  • Intellisense.
  • Інструментів для діаграми немає.

Вони добре уніфікують ваш код та код вашої бази даних під контролем джерела. Якщо людина вгору і сценарій об'єктів бази даних (замість того , щоб використовувати DaVinci інструменти в SSMS) , ви також кінчатися з допомогою одного IDE - що приємно.


0

Можна використовувати Рейки. Rails має концепцію міграції баз даних, яку ви можете застосувати або повернути назад. На мій досвід, це найкращий спосіб версії бази даних. Ви перевіряєте ці файли міграції у SVN.

У моєму поточному проекті ми не розробляємо додаток у Ruby, але ми все ще використовуємо Rails для управління базою даних. Я б не робив цього інакше.


Будь-які посібники, щоб пояснити це трохи більше, і вступити в налаштування чогось подібного?

Насправді, це не дуже гарна ідея використовувати Rails разом із технологіями .NET.
altern

Глава про міграцію рейкових шляхів ( guides.rubyonrails.org/migrations.html ). Цього має бути достатньо, щоб розпочати роботу та дати вам все необхідне для того, чому це гарна ідея. @altern - оскільки ви просто використовуєте Rails для маніпулювання та версії бази даних, це повинно мати будь-який вплив на технології .NET. Ви можете отримувати доступ та використовувати БД так само, як якщо б ви не використовували рейли. Я був би не проти бачити деякі посилання на ваші проблеми. Чи не IronRuby .Net реалізація Ruby and Rails?
Вінні

> Чи не IronRuby .Net реалізація Ruby і Rails? IronRuby - це .NET реалізація Ruby . Я не впевнений, що Rails працює належним чином на IronRuby. Мій загальний аргумент проти використання Rails з метою версії db полягає в тому, що у Ruby та пов'язаних з ними технологій (RoR, migratinos) є досить крута крива навчання, особливо для такої простої задачі, як версія db. Це нормально використовувати для інших цілей, а не лише для міграцій. Інакше це просто підвищить складність проекту без особливих позитивних ефектів.
altern

0

Про це йшлося раніше у stackoverflow: /programming/2750278/sql-server-2008-create-database-script-schema-data-with-command-line

Крім того, ця зовнішня стаття містить деяку додаткову інформацію http://www.sqlteam.com/article/scripting-database-objects-using-smo-актуалізована разом із зразком коду у вигляді програми Windows.

Оскільки те, що ви хочете зробити, - це те, що я зробив сам для MS Access, я розповім вам, що я зробив, якщо це дає вам деякі ідеї: я написав модуль під назвою Ado2Xml, який перетворює схему та дані будь-якого ADO -доступна база даних до XML та назад. Однак він знає лише про таблиці та види; жодних збережених процедур, жодних тригерів, нічого. У будь-якому випадку, у вашому випадку цей модуль заміняється інструментом, який, імовірно, ви знайдете, який робить те, що ви хочете, з MS-SQL. Отже, щоразу, коли моя програма запускається, вона порівнює часову позначку бази даних з часовою міткою збереженого файлу xml; якщо файл XML більш пізній, він знищує базу даних і викликає Ado2Xml, щоб відновити її з файлу xml. Коли моя програма закінчується, вона робить зворотне: вона викликає Ado2Xml для експорту бази даних у файл xml. Насправді, Об'єкти ADO, які витягують схему бази даних, чомусь жахливо повільні, через що процес експортування потребує певного часу. Отже, щоб уникнути необхідності щоразу чекати, коли моя програма закінчиться, і візуальна студія переключиться з макета налагодження на макет редагування, безпосередньо перед тим, як вона завершить роботу, моя програма запустить зовнішній додаток для здійснення експорту, щоб він міг припинити роботу негайно.


Дві надані вами посилання - це я, мабуть, зацікавлений у самому налаштуванні, тому я в основному можу автоматизувати ручні кроки, які я зараз роблю. Дякую за це!

0

Так, я використовував аналогічний інструмент (розроблений в приміщенні) для попереднього проекту. Сценаріює всі таблиці, представлення, проростки, тригери тощо в окремі файли .sql. Тоді у нас був сценарій, який виконувався щовечора, щоб "перевірити", що все в нашій базі даних "розробки" відбилося на контролі джерел.

Таким чином, нормальний робочий процес полягає в тому, що ви можете змінити свій код, змінити відповідні таблиці та проростки в базі даних розробок, якщо це потрібно, тоді ви запустите інструмент, який ми мали, щоб оновити всі сценарії .sql файлів. Тоді ви одразу все перевірите.

Проблема полягала в тому, що якщо ви забули запустити інструмент, код "запрацював" (і тести одиниць пройдуть), оскільки база даних була "правильною", але нові відростки / таблиці не будуть контролювати джерело.

Тому щовечора у нас є сценарій, який здійснив перевірку вихідного коду, а потім запустив інструмент для оновлення всіх сценаріїв. Якщо була якась різниця, це означає, що хтось забув перевірити їх зміни та було створено сповіщення електронною поштою. Це був лише спосіб переконатися, що ми не забули постійно оновлювати контроль джерела.

Це було трохи прикро, тому що важко було працювати над змінами, які тривали кілька днів, але це було краще, ніж нічого не мати ...


Чи можете ви детальніше розглянути Then, we had a script that ran every night to "validate" that everything in our "development" database was reflected in source control.? Дякую за Вашу відповідь.

@Scott: я змінив відповідь, щоб включити трохи детальніше.
Дін Хардінг
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.