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

Я на раннем этапе разработки веб-приложения, построенного на VS2008. У меня есть как настольный компьютер (на котором выполняется большая часть работы), так и ноутбук (для случайной переносимости), на котором я использую AnkhSVN для синхронизации кода проекта. Как лучше всего синхронизировать мою базу данных разработки (SQL Server Express)?

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

Я рассматриваю возможность помещения файлов .MDF и .LDF в систему управления версиями, но я сомневаюсь, что SQL Server Express справится с этим корректно, если я сделаю обновление SVN, и файлы будут извлечены из-под него и заменены более новыми копиями. Вставка пары больших двоичных файлов в систему управления версиями тоже не кажется изящным решением, даже если это всего лишь одноразовая база данных для разработки. Какие-либо предложения?


person Brant Bobby    schedule 03.09.2008    source источник


Ответы (4)


Почему бы вам не сохранить в дополнение к сценарию CREATE базы данных сценарий данных по умолчанию или образец данных?

Это подход, который мы использовали для инкрементных версий приложения, которое мы поддерживаем более 2 лет, и он работает очень хорошо. Наличие сценария данных по умолчанию также позволяет вашим QA-тестерам воссоздавать ошибки, используя данные, которые у вас тоже есть?

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

Лучший инструмент для автоматического создания сценариев изменения SQL

person Jon Limjap    schedule 03.09.2008

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

Однако, с учетом всего сказанного, если вы не думаете, что достаточно привержены реализации какого-либо типа управления версиями (ручного или полуавтоматического), то я НАСТОЯТЕЛЬНО рекомендую вам проверить следующее:

Святая корова! Поговорим об облегчении жизни! У меня был проект, который ускользнул от меня, и несколько человек вносили изменения в схему, и мне приходилось синхронизировать несколько сред. Было тривиально указать продукты Red Gate на две базы данных и увидеть различия, а затем синхронизировать их.

person mattsmith321    schedule 03.09.2008

Вы можете хранить резервную копию (файл .bak) своей базы данных, а не файлы .MDF и .LDF.
Вы можете легко восстановить свою базу данных, используя следующий скрипт:

use master
go

if exists (select * from master.dbo.sysdatabases where name = 'your_db')
begin
    alter database your_db set SINGLE_USER with rollback IMMEDIATE
    drop database your_db
end

restore database your_db
from disk = 'path\to\your\bak\file'
with move 'Name of dat file' to 'path\to\mdf\file',
     move 'Name of log file'  to 'path\to\ldf\file'
go

Вы можете поместить вышеупомянутый скрипт в текстовый файл restore.sql и вызвать его из командного файла, используя следующую команду:

osql -E -i restore.sql

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

  • Получите последнюю резервную копию базы данных из репозитория SVN или любого подходящего хранилища
  • Восстановить текущую базу данных с помощью файла bak
person aku    schedule 03.09.2008

Мы используем комбинацию из резервных копий из более высоких сред.
А также использование ApexSql для обработки первоначальной настройки схемы.
Недавно использовались Subsonic миграции, как закодированные, контролируемые источником, проходящие через CI способ для получения change scripts, есть также проект "tarantino", разработанный хедспринг из Техаса.

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

person DevelopingChris    schedule 03.09.2008