Управление версиями базы данных SQL Server

Я хочу, чтобы мои базы данных были под контролем версий. Кто-нибудь есть какие-либо советы или рекомендуемые статьи, чтобы начать меня?

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

1.08.2008 18:33:08
Также взгляните на эту белую книгу; Полное руководство по базе данных управления версиями www3.dbmaestro.com/...
DBAstep 22.07.2015 09:53:11
29 ОТВЕТОВ
РЕШЕНИЕ

Мартин Фаулер написал мою любимую статью на эту тему, http://martinfowler.com/articles/evodb.html . Я предпочитаю не помещать дампы схемы в систему управления версиями, как это часто бывает, и другие советуют , потому что я хочу простой способ обновить производственную базу данных.

Для веб-приложения, в котором у меня будет один экземпляр производственной базы данных, я использую два метода:

Сценарии обновления базы данных

Сценарии обновления базы данных последовательностей, содержащие DDL, необходимый для перемещения схемы из версии N в N + 1. (Они идут в вашей системе контроля версий.) Таблица _version_history_, что-то вроде

create table VersionHistory (
    Version int primary key,
    UpgradeStart datetime not null,
    UpgradeEnd datetime
    );

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

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

Синхронизация Sandbox разработчика

  1. Скрипт для резервного копирования, очистки и сжатия рабочей базы данных. Запускайте это после каждого обновления производственной БД.
  2. Скрипт для восстановления (и при необходимости настройки) резервной копии на рабочей станции разработчика. Каждый разработчик запускает этот скрипт после каждого обновления производственной БД.

Предостережение: мои автоматизированные тесты выполняются на базе правильной схемы, но пустой базы данных, поэтому этот совет не будет полностью соответствовать вашим потребностям.

178
2.08.2008 17:33:54
Управление версиями скриптов полной схемы очень полезно для справочных целей. Например, невозможно увидеть, что именно было изменено в хранимой процедуре, посмотрев на инструкцию ALTER PROCEDURE.
Constantin 24.09.2008 14:36:20
Сброс (и управление версиями) полной схемы БД после запуска новых сценариев обновления - это хороший способ сделать информацию доступной и другим инструментам в процессе сборки / развертывания. Кроме того, наличие полной схемы в сценарии означает возможность «раскрутить» новую базу данных, не пройдя все этапы миграции. Это также позволяет отличать текущую версию от накопленных предыдущих версий.
mlibby 16.06.2009 21:50:38
Говорят, что вы поместили сценарии обновления в систему управления версиями, а не добавили туда откат?
A-K 7.07.2009 13:16:24
У меня есть привычка поддерживать полный сценарий создания и удаления, а также дельта-сценарии для обновления существующих экземпляров БД до последней версии. Оба идут в контроль версий. Дельта-скрипты названы в соответствии с номерами ревизий. Таким образом, легко автоматизировать исправление базы данных с помощью скрипта обновления.
nikc.org 28.01.2010 22:46:23
Ответ @ nikc.org, а также крючки после фиксации для автоматизации.
Silviu-Marian 6.11.2014 23:26:52

Продукт SQL Gate от Red Gate не только позволяет выполнять сравнения на уровне объектов и генерировать из них сценарии изменений, но также позволяет экспортировать объекты базы данных в иерархию папок, упорядоченную по типу объекта, с одним созданием [имя объекта] .sql скрипт на объект в этих каталогах. Иерархия типов объектов выглядит следующим образом:

\ Функции
\ Безопасность
\ Безопасность \ Роли
\ Безопасность \ Схемы
\ Безопасность \ Пользователи
\ Хранимые процедуры
\ Таблицы

Если вы вносите свои сценарии в тот же корневой каталог после внесения изменений, вы можете использовать это для обновления репозитория SVN и ведения истории выполнения каждого объекта в отдельности.

45
9.06.2014 07:57:16
Мы только что выпустили SQL Source Control, который интегрирует описанное вами поведение SQL Compare в SSMS и связывает с SVN и TFS. Я добавил отдельный ответ на этот вопрос, который более подробно описывает, что он делает. red-gate.com/products/SQL_Source_Control/index.htm
David Atkinson 1.07.2010 09:13:23

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

Если вам нужно только сохранить структуру базы данных, а не данные, вы можете экспортировать базу данных в виде запросов SQL. (в Enterprise Manager: щелкните правой кнопкой мыши на базе данных -> Создать сценарий SQL. Я рекомендую установить «создать один файл на объект» на вкладке параметров). Затем вы можете зафиксировать эти текстовые файлы в svn и использовать функции svn diff и logging.

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

Если вам также необходимо сохранить все данные, я рекомендую сохранить резервную копию базы данных и использовать продукты Redgate ( http://www.red-gate.com/ ) для сравнения. Они не дешевы, но стоят каждой копейки.

39
1.08.2008 19:28:25
Что касается данных - вы можете использовать OffScale DataGrove для сохранения версий всей вашей БД (включая данные). Позже вы можете использовать его для создания двух виртуальных копий вашей БД, которые можно сравнить с продуктом Red-Gate. Это также избавляет вас от необходимости генерировать тестовые данные - вы можете просто сохранить версии БД для соответствия различным тестовым
Taichman 15.11.2011 12:24:55
Как определить порядок запуска сценариев базы данных, если вы используете опцию «один файл на объект»?
Jamie Kitson 27.01.2015 16:56:22
@Taichman: DataGrove, похоже, не поддерживает сервер SQL, и поэтому не имеет отношения к вопросу.
Neolisk 5.02.2016 12:44:40

Во-первых, вы должны выбрать систему управления версиями, которая подходит именно вам:

  • Централизованная система контроля версий - стандартная система, в которой пользователи регистрируются / регистрируются до / после работы с файлами, а файлы хранятся на одном центральном сервере.

  • Распределенная система контроля версий - система, в которой репозиторий клонируется, и каждый клон фактически является полной резервной копией репозитория, поэтому в случае сбоя любого сервера любой клонированный репозиторий можно использовать для его восстановления. После выбора подходящей системы для ваших нужд вам нужно будет установить репозиторий, который является ядром каждой системы контроля версий. Все это объясняется в следующей статье: http://solutioncenter.apexsql.com/sql-server-source-control-part-i-understanding -source-Control-основы /

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

  • SQL Server Management Studio через поставщика MSSCCI,

  • Visual Studio и инструменты данных SQL Server

  • Сторонний инструмент ApexSQL Source Control
38
24.06.2015 10:36:56

Здесь, в Red Gate, мы предлагаем инструмент SQL Source Control , который использует технологию SQL Compare для связи вашей базы данных с репозиторием TFS или SVN. Этот инструмент интегрируется в SSMS и позволяет вам работать как обычно, за исключением того, что теперь он позволяет фиксировать объекты.

Для подхода на основе миграции (более подходящего для автоматизированных развертываний) мы предлагаем SQL Change Automation (ранее называлась ReadyRoll), которая создает и управляет набором инкрементных сценариев в качестве проекта Visual Studio.

В SQL Source Control можно указывать статические таблицы данных. Они хранятся в системе контроля версий как операторы INSERT.

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

24
28.01.2019 10:47:56
Интересный продукт (небольшой разрыв на рынке), но дельты, хранящиеся как «CREATE ...», пугают меня. Как вы разветвления / слияния?
annakata 22.07.2010 12:10:50
Мы сохраняем определения объектов как CREATE, но если вы «получите последнюю версию» или, например, используете SQL Compare Pro для генерации сценариев синхронизации, они заменяются соответствующими командами, такими как ALTER. Для ветвления или слияния вы просто используете свою систему контроля версий так же, как в настоящее время.
David Atkinson 22.07.2010 22:21:25
Этот ответ дублирует ответ Дейна, опубликованный двумя годами ранее.
WonderWorker 7.02.2018 11:49:13
Это другой ответ. SQL Compare не поддерживает базы данных с контролем версий, тогда как SQL Source Control был разработан специально для этого.
David Atkinson 7.02.2018 21:13:09

Возможно, вы захотите взглянуть на Liquibase ( http://www.liquibase.org/ ). Даже если вы не используете сам инструмент, он достаточно хорошо справляется с концепциями управления изменениями базы данных или рефакторинга.

21
16.09.2008 18:16:59
Мы используем Liquibase в 5 распределенных командах в одной ветке для непрерывной доставки, и это прекрасно работает. У нас есть более 10 приложений баз данных, установленных в разных средах. Мы используем его для управления схемой, индексированием, разделением, кодом, поисковыми данными, группами и разрешениями групп. Мы используем его для Oracle, Postgresql и MSSQL.
Peter Henell 12.05.2016 10:51:23
Если я правильно понимаю, основываясь на введении, это требует, чтобы вы знали какой-то проприетарный язык XML для объявления ваших объектов вместо SQL? Не фанат
JDPeckham 24.01.2017 23:02:00

+1 для всех, кто порекомендовал инструменты RedGate, с дополнительной рекомендацией и предупреждением.

SqlCompare также имеет прилично документированный API: так, например, вы можете написать консольное приложение, которое синхронизирует вашу папку с исходными текстами сценариев с базой данных тестирования интеграции CI при регистрации, чтобы, когда кто-то регистрирует изменение схемы из папки сценариев он автоматически развертывается вместе с соответствующим изменением кода приложения. Это помогает сократить разрыв с разработчиками, которые забывают о распространении изменений в своей локальной базе данных до общей базы данных разработки (я думаю, что около половины из нас :)).

Предостережение заключается в том, что с помощью скриптового решения или иным образом инструменты RedGate достаточно гладкие, поэтому легко забыть о реалиях SQL, лежащих в основе абстракции. Если вы переименуете все столбцы в таблице, SqlCompare не сможет сопоставить старые столбцы с новыми столбцами и отбросит все данные в таблице. Он будет генерировать предупреждения, но я видел, как люди проходили мимо. Я думаю, что здесь есть общий момент, который стоит отметить, что до сих пор можно автоматизировать только управление версиями БД и их обновление - абстракции очень неплотные.

19
15.10.2008 09:44:04
Поэтому должна существовать система, которая отслеживает, какие столбцы вы изменяете, и запоминает сопоставления от старых имен столбцов к новым именам столбцов.
Silvercode 15.10.2008 18:06:00
Следует иметь в виду, что для изменений базы данных, которые имеют неоднозначность (и, следовательно, нуждаются в элементе «намерения разработчика»), решение на основе миграции является подходящим решением. Redgate теперь имеет ReadyRoll, который удовлетворяет этому подходу управления версиями.
David Atkinson 1.03.2017 16:18:29

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

15
7.08.2008 21:12:01
Я использовал DbGhost в течение 10 лет, и он никогда не подводил меня. Поддержка, которую они предоставляют, не имеет себе равных
penderi 21.02.2010 10:29:15

В VS 2010 используйте проект базы данных.

  1. Сценарий вашей базы данных
  2. Внесите изменения в сценарии или непосредственно на вашем сервере БД
  3. Синхронизация с использованием Data> Schema Compare

Создает идеальное решение для управления версиями БД и упрощает синхронизацию БД.

15
25.02.2011 20:18:05
Да, но, к сожалению, вы должны помнить, чтобы «генерировать сценарий» каждый раз. Если вы непосредственно обновляете базу данных, вы теряете возможность генерировать скрипт обновления для этой дельты. Если бы только проекты баз данных имели бы некоторые встроенные функции для управления версиями.
Jez 2.11.2015 10:21:16

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

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

Инструмент автоматизации должен иметь средства для обработки метаданных базы данных, которые сообщают, какие базы данных находятся в каком состоянии разработки, а какие таблицы содержат данные, контролируемые версиями, и так далее.

13
24.09.2008 06:11:22

Вы также можете посмотреть на решение по миграции. Это позволяет вам указать схему вашей базы данных в коде C # и прокрутить версию базы данных вверх и вниз, используя MSBuild.

В настоящее время я использую DbUp , и он работает хорошо.

12
4.04.2017 17:55:40

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

Миграции программно определяют преобразования базы данных с использованием Ruby DSL; каждое преобразование может применяться или (обычно) откатываться, что позволяет вам переходить к другой версии вашей схемы БД в любой момент времени. Файл, определяющий эти преобразования, может быть проверен в системе контроля версий, как и любой другой фрагмент исходного кода.

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

11
2.08.2008 19:22:50

Каждая база данных должна находиться под контролем исходного кода. Чего не хватает, так это инструмента для автоматического сценария всех объектов базы данных - и «данных конфигурации» - в файл, который затем можно добавить в любую систему контроля версий. Если вы используете SQL Server, то мое решение здесь: http://dbsourcetools.codeplex.com/ . Веселиться. Натан.

10
7.07.2009 12:58:34

Это просто.

  1. Когда базовый проект готов, вы должны создать полный скрипт базы данных. Этот скрипт передан в SVN. Это первая версия.

  2. После этого все разработчики создают сценарии изменений (ALTER ..., новые таблицы, sprocs и т. Д.).

  3. Когда вам нужна текущая версия, вы должны выполнить все новые сценарии изменений.

  4. Когда приложение выпущено в производство, вы возвращаетесь к 1 (но, конечно, это будет последовательная версия).

Nant поможет вам выполнить эти сценарии изменений. :)

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

9
16.05.2009 11:37:32
Через несколько лет я говорю: используйте FluentMigrator (или аналогичный инструмент для вашей платформы).
dariol 19.02.2015 08:32:03

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

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

8
7.08.2008 21:21:01

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

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

IF ISNULL(OBJECT_ID('last_run_sysversions'), 0) <> 0 DROP TABLE last_run_sysversions
CREATE TABLE last_run_sysversions (
    name varchar(128), 
    id int, base_schema_ver int,
    schema_ver int,
    type char(2)
)

Нормальный режим работы: вы можете взять результаты этого sql, сгенерировать sql скрипты только для тех, которые вас интересуют, и поместить их в систему управления исходным кодом по вашему выбору.

IF ISNULL(OBJECT_ID('tempdb.dbo.#tmp'), 0) <> 0 DROP TABLE #tmp
CREATE TABLE #tmp (
    name varchar(128), 
    id int, base_schema_ver int,
    schema_ver int,
    type char(2)
)

SET NOCOUNT ON

-- Insert the values from the end of the last run into #tmp
INSERT #tmp (name, id, base_schema_ver, schema_ver, type) 
SELECT name, id, base_schema_ver, schema_ver, type FROM last_run_sysversions

DELETE last_run_sysversions
INSERT last_run_sysversions (name, id, base_schema_ver, schema_ver, type)
SELECT name, id, base_schema_ver, schema_ver, type FROM sysobjects

-- This next bit lists all differences to scripts.
SET NOCOUNT OFF

--Renamed.
SELECT 'renamed' AS ChangeType, t.name, o.name AS extra_info, 1 AS Priority
FROM sysobjects o INNER JOIN #tmp t ON o.id = t.id
WHERE o.name <> t.name /*COLLATE*/
AND o.type IN ('TR', 'P' ,'U' ,'V')
UNION 

--Changed (using alter)
SELECT 'changed' AS ChangeType, o.name /*COLLATE*/, 
       'altered' AS extra_info, 2 AS Priority
FROM sysobjects o INNER JOIN #tmp t ON o.id = t.id 
WHERE (
   o.base_schema_ver <> t.base_schema_ver
OR o.schema_ver      <> t.schema_ver
)
AND  o.type IN ('TR', 'P' ,'U' ,'V')
AND  o.name NOT IN ( SELECT oi.name 
         FROM sysobjects oi INNER JOIN #tmp ti ON oi.id = ti.id
         WHERE oi.name <> ti.name /*COLLATE*/
         AND oi.type IN ('TR', 'P' ,'U' ,'V')) 
UNION

--Changed (actually dropped and recreated [but not renamed])
SELECT 'changed' AS ChangeType, t.name, 'dropped' AS extra_info, 2 AS Priority
FROM #tmp t
WHERE    t.name IN ( SELECT ti.name /*COLLATE*/ FROM #tmp ti
         WHERE NOT EXISTS (SELECT * FROM sysobjects oi
                           WHERE oi.id = ti.id))
AND  t.name IN ( SELECT oi.name /*COLLATE*/ FROM sysobjects oi
         WHERE NOT EXISTS (SELECT * FROM #tmp ti
                           WHERE oi.id = ti.id)
         AND   oi.type  IN ('TR', 'P' ,'U' ,'V'))
UNION

--Deleted
SELECT 'deleted' AS ChangeType, t.name, '' AS extra_info, 0 AS Priority
FROM #tmp t
WHERE NOT EXISTS (SELECT * FROM sysobjects o
                  WHERE o.id = t.id)
AND t.name NOT IN (  SELECT oi.name /*COLLATE*/ FROM sysobjects oi
         WHERE NOT EXISTS (SELECT * FROM #tmp ti
                           WHERE oi.id = ti.id)
         AND   oi.type  IN ('TR', 'P' ,'U' ,'V'))
UNION

--Added
SELECT 'added' AS ChangeType, o.name /*COLLATE*/, '' AS extra_info, 4 AS Priority
FROM sysobjects o
WHERE NOT EXISTS (SELECT * FROM #tmp t
                  WHERE o.id = t.id)
AND      o.type  IN ('TR', 'P' ,'U' ,'V')
AND  o.name NOT IN ( SELECT ti.name /*COLLATE*/ FROM #tmp ti
         WHERE NOT EXISTS (SELECT * FROM sysobjects oi
                           WHERE oi.id = ti.id))
ORDER BY Priority ASC

Примечание. Если вы используете нестандартное сопоставление в любой из ваших баз данных, вам нужно будет заменить его /* COLLATE */сопоставлением в базе данных. т.е.COLLATE Latin1_General_CI_AI

8
24.09.2008 12:53:48

Поскольку наше приложение должно работать в нескольких РСУБД, мы сохраняем определение нашей схемы в системе управления версиями, используя нейтральный для базы данных формат крутящего момента (XML). Мы также контролируем версию справочных данных для нашей базы данных в формате XML следующим образом (где «Отношение» является одной из справочных таблиц):

  <Relationship RelationshipID="1" InternalName="Manager"/>
  <Relationship RelationshipID="2" InternalName="Delegate"/>
  etc.

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

8
22.06.2015 05:26:57

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

7
6.08.2008 23:00:16

После перехода на платформу x64 у нас возникла необходимость в версии нашей базы данных SQL, и наша старая версия порвала с миграцией. Мы написали приложение на C #, которое использовало SQLDMO для отображения всех объектов SQL в папке:

                корень
                    Название сервера
                       DatabaseName
                          Объекты схемы
                             Триггеры базы данных *
                                .ddltrigger.sql
                             функции
                                ..function.sql
                             Безопасность
                                Роли
                                   Роли приложений
                                      .approle.sql
                                   Роли базы данных
                                      .role.sql
                                Schemas *
                                   .schema.sql
                                пользователей
                                   .user.sql
                             Место хранения
                                Полнотекстовые каталоги *
                                   .fulltext.sql
                             Хранимые процедуры
                                ..proc.sql
                             Синонимы *
                                .synonym.sql
                             таблицы
                                ..table.sql
                                Ограничения
                                   ... chkconst.sql
                                   ... defconst.sql
                                Индексы
                                   ... index.sql
                                Ключи
                                   ... fkey.sql
                                   ... pkey.sql
                                   ... ukey.sql
                                Триггеры
                                   ... trigger.sql
                             Типы
                                Пользовательские типы данных
                                   ..uddt.sql
                                Коллекции XML-схем *
                                   ..xmlschema.sql
                             Взгляды
                                ..view.sql
                                Индексы
                                   ... index.sql
                                Триггеры
                                   ... trigger.sql

Затем приложение сравнивает вновь написанную версию с версией, хранящейся в SVN, и при наличии различий оно обновляет SVN. Мы определили, что запуск процесса один раз за ночь был достаточным, поскольку мы не вносили столько изменений в SQL. Это позволяет нам отслеживать изменения всех объектов, которые нас интересуют, а также позволяет нам перестраивать нашу полную схему в случае серьезной проблемы.

7
9.10.2008 14:54:12
Ооо, это было бы здорово сделать публично доступным.
Chris Charabaruk 10.03.2009 08:16:04

Я написал это приложение некоторое время назад, http://sqlschemasourcectrl.codeplex.com/, который будет сканировать ваши базы данных MSFT SQL столько раз, сколько вы хотите, и автоматически выгружать ваши объекты (таблицы, представления, процессы, функции, настройки SQL) в SVN. Работает как шарм. Я использую его с Unfuddle (что позволяет мне получать уведомления о регистрации)

7
23.09.2010 02:35:41

Типичное решение - выгрузить базу данных по мере необходимости и сделать резервную копию этих файлов.

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

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

6
3.08.2008 01:49:58

Мы только начали использовать Team Foundation Server. Если ваша база данных среднего размера, то Visual Studio имеет несколько хороших интеграций проектов со встроенным сравнением, сравнением данных, инструментами рефакторинга базы данных, инфраструктурой тестирования базы данных и даже инструментами генерации данных.

Но эта модель не очень хорошо подходит для больших или сторонних баз данных (которые шифруют объекты). Итак, что мы сделали, так это сохранили только наши индивидуальные объекты. Visual Studio / Team Foundation server очень хорошо работает для этого.

База данных TFS начальник арх. блог

Сайт MS TFS

6
22.08.2008 17:13:23

Я согласен с ответом ESV, и именно по этой причине я некоторое время назад начал небольшой проект, чтобы помочь поддерживать обновления базы данных в очень простом файле, который затем мог бы содержать длинный исходный код. Это позволяет легко обновлять разработчикам, а также UAT и Production. Инструмент работает на Sql Server и MySql.

Некоторые особенности проекта:

  • Позволяет изменения схемы
  • Позволяет популяцию дерева значений
  • Позволяет отдельные вставки тестовых данных, например. UAT
  • Позволяет вариант для отката (не автоматизирован)
  • Поддерживает поддержку сервера SQL и Mysql
  • Имеет возможность импортировать существующую базу данных в систему управления версиями с помощью одной простой команды (только сервер SQL ... все еще работает на MySQL)

Код размещен на Google Code. Пожалуйста, проверьте код Google для получения дополнительной информации

http://code.google.com/p/databaseversioncontrol/

6
24.02.2011 18:28:51

Некоторое время назад я обнаружил базовый модуль VB, который использовал объекты DMO и VSS для передачи всего сценария БД в VSS. Я превратил его в скрипт VB и разместил здесь . Вы могли бы легко принимать вызовы VSS и использовать материал DMO для генерации всех сценариев, а затем вызывать SVN из того же пакетного файла, который вызывает сценарий VBScript для их регистрации?

Дэйв Дж

5
16.09.2008 17:55:32

Я также использую версию в базе данных, хранимой через семейство процедур расширенных свойств базы данных. В моем приложении есть сценарии для каждого шага версии (т. Е. Перейти с 1.1 на 1.2). При развертывании он просматривает текущую версию и затем запускает сценарии один за другим, пока не достигнет последней версии приложения. Не существует сценария с прямой «окончательной» версией, даже развертывание на чистой БД выполняет развертывание через серию шагов обновления.

Теперь я хотел бы добавить, что два дня назад я видел в кампусе MS презентацию о новой и готовящейся к выпуску версии VS DB. Презентация была сосредоточена именно на этой теме, и меня выкинуло из воды. Вы должны обязательно это проверить, новые возможности сосредоточены на сохранении определения схемы в сценариях T-SQL (CREATE), дельта-движке времени выполнения, чтобы сравнить схему развертывания с определенной схемой и выполнить дельта-изменения и интеграцию с интеграцией исходного кода, вплоть до и включая непрерывную интеграцию MSBUILD для автоматизированных сборок. Перетаскивание будет содержать новый тип файлов, файлы .dbschema, которые можно перенести на сайт развертывания, а инструмент командной строки может выполнить фактические «дельты» и запустить развертывание. У меня есть запись в блоге на эту тему со ссылками на загрузки VSDE, вы должны проверить их: http://rusanu.com/2009/05/15/version-control-and-your-database/

5
15.05.2009 19:26:32

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

5
23.06.2015 11:26:15

По моему опыту, решение имеет два аспекта:

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

  2. Вы должны обрабатывать обновления баз на сайтах клиентов.

Для того, чтобы справиться с № 1, вам понадобится мощный инструмент для сравнения / слияния баз данных. Лучший инструмент должен иметь возможность выполнять автоматическое объединение в максимально возможной степени, позволяя вам разрешать необработанные конфликты вручную.

Идеальный инструмент должен обрабатывать операции слияния, используя трехсторонний алгоритм слияния, который учитывает изменения, внесенные в базу данных THEIRS и базу данных MINE, относительно базы данных BASE.

Я написал коммерческий инструмент, который обеспечивает ручную поддержку слияния для баз данных SQLite, и в настоящее время я добавляю поддержку трехстороннего алгоритма слияния для SQLite. Проверьте это на http://www.sqlitecompare.com

Для обработки # 2 вам понадобится инфраструктура обновления на месте.

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

Посмотрите мою статью на эту тему в http://www.codeproject.com/KB/database/sqlite_upgrade.aspx, чтобы получить общее представление о том, о чем я говорю.

Удачи

Лирон Леви

3
6.08.2009 10:28:36

Проверьте DBGhost http://www.innovartis.co.uk/ . Я использую в автоматическом режиме в течение 2 лет, и это прекрасно работает. Это позволяет нашим сборкам БД происходить так же, как сборка Java или C, за исключением базы данных. Если вы понимаете, о чем я.

3
2.11.2009 22:17:17

Я бы предложил использовать инструменты сравнения для импровизации системы контроля версий для вашей базы данных. Хорошей альтернативой являются xSQL Schema Compare и xSQL Data Compare .

Теперь, если ваша цель состоит в том, чтобы иметь только схему базы данных под управлением версиями, вы можете просто использовать xSQL Schema Compare для генерации моментальных снимков схемы xSQL и добавления этих файлов в свой контроль версий. Чем, чтобы вернуться или обновить до определенной версии, просто сравните текущую версию базы данных со снимком для целевой версии.

Увы, если вы хотите, чтобы данные также находились под контролем версий, вы можете использовать xSQL Data Compare для генерации сценариев изменений для вашей базы данных и добавления файлов .sql в свой контроль версий. Затем вы можете выполнить эти сценарии, чтобы вернуться / обновить до любой версии, которую вы хотите. Имейте в виду, что для функциональности «вернуть» вам нужно сгенерировать сценарии изменений, которые при выполнении сделают Версию 3 такой же, как Версия 2, а для функциональности «обновления» вам необходимо сгенерировать сценарии изменений, которые делают обратное.

Наконец, с некоторыми базовыми навыками пакетного программирования вы можете автоматизировать весь процесс, используя версии командной строки xSQL Schema Compare и xSQL Data Compare.

Отказ от ответственности: я связан с xSQL.

2
10.01.2017 16:16:55