2008-09-03 16 views
5

Ich bin früh in der Entwicklung einer Webanwendung in VS2008 gebaut. Ich habe sowohl einen Desktop-PC (wo die meiste Arbeit erledigt wird) als auch einen Laptop (für gelegentliche Portabilität), auf dem ich AnkhSVN verwende, um den Projektcode synchronisiert zu halten. Wie kann ich meine Entwicklungsdatenbank (SQL Server Express) am besten synchronisieren?Entwickeln von Datenbanken in mehreren Umgebungen synchron halten

Ich habe ein VS-Datenbank-Projekt in SVN enthält Create-Skripte, die ich neu generieren, wenn das Schema ändert. Die ursprüngliche Idee war, die DB immer dann neu zu erstellen, wenn sich etwas geändert hat, aber es wird schnell zu einem Schmerz. Außerdem würde ich alle Stichprobenzeilen verlieren, die ich eingegeben habe, um sicherzustellen, dass die Daten korrekt angezeigt werden.

Ich überlege, die .MDF- und .LDF-Dateien unter Quellcodeverwaltung zu setzen, aber ich bezweifle, dass SQL Server Express es ordnungsgemäß behandelt, wenn ich ein SVN-Update mache und die Dateien darunter herausgerissen und durch neuere Kopien ersetzt werden . Ein paar große Binärdateien in die Quellcodeverwaltung zu stecken, scheint auch keine elegante Lösung zu sein, auch wenn es sich nur um eine Wegwerf-Entwicklungsdatenbank handelt. Irgendwelche Vorschläge?

Antwort

3

Zusätzlich zu Ihrem Datenbank-CREATE-Skript sollten Sie auch ein Standarddaten- oder Beispieldatenskript beibehalten.

Dies ist ein Ansatz, den wir für inkrementelle Versionen einer Anwendung gewählt haben, die wir seit mehr als 2 Jahren pflegen, und es funktioniert sehr gut. Mit einem Standard-Datenskript können Ihre QA-Tester Fehler mit den Daten, die Sie ebenfalls haben, neu erstellen.

Vielleicht haben Sie auch einen Blick auf eine Frage nehmen will ich vor einiger Zeit geschrieben:

Best tool for auto-generating SQL change scripts

3

Sie können Backup (.bak-Datei) Ihrer Datenbank statt .MDF & .LDF-Dateien speichern.

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 

Sie können über Skript in Textdatei restore.sql erwähnt setzen und es aus Batch-Datei aufrufen folgenden Befehl::
Sie können Ihre db einfach mit folgenden Skript wiederherstellen

osql -E -i restore.sql 

Auf diese Weise Sie können Skriptdatei zu automatisieren gesamten Prozess erstellen:

  • neuesten db Backup aus dem SVN-Repository oder jeden geeigneten stora Get ge
  • aktuelle db wiederherstellen bak-Datei mit
7

Es offensichtlich eine Reihe von Möglichkeiten, dies zu nähern, so werde mir eine Reihe von Links aufzulisten, die eine bessere Grundlage für den Bau zur Verfügung stellen sollen. Dies sind die Links, auf die ich in der Vergangenheit hingewiesen habe, als ich versucht habe, andere auf den fahrenden Zug zu bringen.

Allerdings mit all dem gesagt, wenn Sie nicht denken, t Hut Sie die folgende empfehle ich Ihnen Check-out sind entschlossen genug, um irgendeine Art von Versionskontrolle (entweder manuell oder halbautomatisch) zu implementieren, dann:

Heilige Kuh ! Sprechen Sie darüber, wie Sie das Leben leichter machen! Ich hatte ein Projekt, das von mir abhing, und hatte mehrere Leute, die Schemaänderungen vornehmen mussten und mehrere Umgebungen synchron halten mussten.Es war trivial, die Red-Gate-Produkte auf zwei Datenbanken zu verweisen und die Unterschiede zu erkennen und sie dann zu synchronisieren.

1

Wir verwenden eine Kombination aus Backups aus höheren Umgebungen.
Sowie mit ApexSql, um anfängliche Einrichtung des Schemas zu behandeln.
Vor kurzem verwendet Subsonic Migrationen, wie eine codierte, Source-kontrollierte, durchlaufen CI-Weg, um Änderungen Skripte in, gibt es auch "Tarantino" -Projekt von heatspring aus Texas entwickelt.

Die meisten dieser Ansätze, insbesondere die Letzteren, sind sicher, zusätzlich zu den meisten Testdaten zu verwenden. Ich mag besonders die automatisierten letzten 2, weil ich eine Änderung vornehmen kann, und das nächste Mal, wenn jemand das letzte Mal bekommt, laufen sie einfach den "Updater" und sie werden bis zuletzt eingeläutet.