Синхронизация баз данных разработки в нескольких средах - PullRequest
5 голосов
/ 03 сентября 2008

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

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

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

Ответы [ 4 ]

7 голосов
/ 03 сентября 2008

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

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

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

3 голосов
/ 03 сентября 2008

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

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

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

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

3 голосов
/ 03 сентября 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
1 голос
/ 03 сентября 2008

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

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

...