Как управлять версиями баз данных SQL Server? - PullRequest
16 голосов
/ 23 марта 2009

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

Моя среда - Visual C # Express, SQL Server 2008 Express и черепаха SVN.

Ответы [ 10 ]

4 голосов
/ 09 марта 2016

Поздний ответ, но, надеюсь, полезно для других читателей

Я могу предложить использовать надстройку SSMS под названием ApexSQL Source Control. Используя эту надстройку, разработчики могут легко сопоставлять объекты базы данных с системой управления версиями с помощью мастера непосредственно из SSMS. Включает поддержку Git, TFS, Mercurial, Subversion, TFS (включая Visual Studio Online) и других систем контроля версий. Он также включает в себя поддержку контроля источника статических данных (так что вы также можете управлять записями контроля версий).

После загрузки и установки ApexSQL Source Control просто щелкните правой кнопкой мыши базу данных, для которой вы хотите управлять версиями, и перейдите в подменю ApexSQL Source Control в SSMS. Нажмите «Связать базу данных с источником контроля» и выберите систему контроля источника и модель разработки базы данных, например:

enter image description here

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

На следующем шаге вам будет предложено ввести информацию для входа в систему управления исходным кодом:

enter image description here

После этого просто нажмите кнопку «Готово», и появится окно «Центр действий», предлагающее объекты, которые будут зафиксированы в хранилище (это по умолчанию, если хранилище пусто).

Как только база данных будет связана с контролем версий, все операции, которые могут быть выполнены из клиента контроля версий, будут доступны на панели «Обозреватель объектов». К ним относятся:

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

Вы можете прочитать эту статью для получения дополнительной информации: http://solutioncenter.apexsql.com/sql-source-control-reduce-database-development-time/

3 голосов
/ 23 марта 2009

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

Наши сценарии следуют шаблону, в котором создается временная таблица, а затем заполняется тем, что мы хотим, чтобы реальная таблица напоминала. Мы помещаем только удобочитаемые значения (то есть мы не включаем столбцы IDENTITY / GUID). Оставшаяся часть сценария берет временную таблицу и выполняет соответствующие операторы INSERT / UPDATE / DELETE, чтобы реальная таблица напоминала временную таблицу. Когда нам нужно изменить эти «статические» данные, все, что нам нужно обновить, - это заполнение временной таблицы. Это означает, что DIFF между версиями работает так, как ожидается, и сценарии отката столь же просты, как и получение предыдущей версии из системы контроля версий.

ВСТАВИТЬ / ОБНОВИТЬ / УДАЛИТЬ нужно записать только один раз. На самом деле, наши сценарии немного сложнее и имеют два набора проверок, выполняемых перед фактическими инструкциями DML. Один набор проверяет данные временной таблицы (то есть, что мы не собираемся нарушать какие-либо ограничения, пытаясь сделать базу данных похожей на временную таблицу). Другой проверяет временную таблицу и целевую базу данных (то есть, что внешние ключи доступны).

2 голосов
/ 29 октября 2009

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

http://www.red -gate.com / ОБЪЯВЛЕНИЯ / viewtopic.php? Т = 12298

1 голос
/ 23 марта 2009

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

Скрипт для установки свойств выглядит так:

DECLARE @AssemblyDescription sysname
SET @AssemblyDescription = N'DailyBuild_20090322.1'

DECLARE @AssemblyFileVersion sysname
SET @AssemblyFileVersion = N'0.9.3368.58294'

-- The extended properties DatabaseDescription and DatabaseFileVersion contain the
-- AssemblyDescription and AssemblyFileVersion of the build that was used for the
-- database script that creates the database structure.
-- 
-- The current value of these properties can be displayed with the following query:
-- SELECT * FROM sys.extended_properties

IF EXISTS (SELECT * FROM sys.extended_properties WHERE class_desc = 'DATABASE' AND name = N'DatabaseDescription')
BEGIN
    EXEC sys.sp_updateextendedproperty @name = N'DatabaseDescription', @value = @AssemblyDescription
END
ELSE
BEGIN
    EXEC sys.sp_addextendedproperty @name = N'DatabaseDescription', @value = @AssemblyDescription
END

IF EXISTS (SELECT * FROM sys.extended_properties WHERE class_desc = 'DATABASE' AND name = N'DatabaseFileVersion')
BEGIN
    EXEC sys.sp_updateextendedproperty @name = N'DatabaseFileVersion', @value = @AssemblyFileVersion
END
ELSE
BEGIN
    EXEC sys.sp_addextendedproperty @name = N'DatabaseFileVersion', @value = @AssemblyFileVersion
END
GO
1 голос
/ 23 марта 2009

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

0 голосов
/ 11 сентября 2010

Этот проект имеет хороший пример развертывания и отката

0 голосов
/ 18 августа 2009

Я использую bcp для этого (утилита массовой загрузки, часть стандартной установки SQL Server, включая Express Edition).

Для каждой таблицы с данными требуется управляющий файл Table.ctl и файл данных Table.csv (это текстовые файлы, которые можно сгенерировать из существующей базы данных с помощью bcp). Как текстовые файлы, они очень легко могут быть версионированы.

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

SET BASE_NAME=MyDatabaseName
SET CONNECT_STRING=.\SQLEXPRESS

FOR /R %%i IN (.) DO (
  FOR %%j IN ("%%~fi\*.ctl") DO (
    ECHO +   %%~nj
    bcp %BASE_NAME%..%%~nj in "%%~dpsj%%~nj.csv" -T -E -S %CONNECT_STRING% -f "%%~dpsj%%~nj.ctl" >"%TMP%\%%~nj.log"
    IF %ERRORLEVEL% GTR 0 (
      TYPE "%TMP%\%%~nj.log"
      GOTO ERROR_USAGE
    )
  )
)

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

0 голосов
/ 23 марта 2009

Вы должны использовать определенные версии БД.

http://msdn.microsoft.com/en-us/library/ms189050.aspx

Когда либо READ_COMMITTED_SNAPSHOT или База данных ALLOW_SNAPSHOT_ISOLATION варианты включены, логические копии (версии) поддерживаются для всех данных изменения, выполненные в база данных. Каждый раз, когда строка изменяется конкретной транзакцией экземпляр хранилища компонента Database Engine версия ранее совершенного изображение строки в tempdb. каждый версия помечена транзакцией порядковый номер транзакции это сделало изменение. Версии измененные строки связаны с помощью ссылки список. Самое новое значение строки всегда хранится в текущей базе данных и прикован к версионным строкам в базе данных.

0 голосов
/ 23 марта 2009

MS Visual Studio Team System для разработчиков баз данных обладает функциональностью, позволяющей легко создавать сценарии создания для всей схемы. Единственным недостатком является стоимость!

Рассматривали ли вы использование SubSonic?

0 голосов
/ 23 марта 2009

Вы можете получить версию SQL Management Studio для SQL Server Express. Я полагаю, что вы сможете использовать это для создания сценариев схемы вашей базы данных. Я думаю, что это позволит вам создавать сценарии вручную для вставки начальных записей.

Затем поместите все сценарии в систему управления версиями вместе с основным сценарием, который запускает отдельные сценарии в правильном порядке.

Вы сможете запускать diff-файлы, используя windiff (бесплатно с Visual Studio SDK), или же Beyond Compare недорогой и отличный инструмент сравнения / слияния / синхронизации.

...