Bereitstellen von SQL Server-Datenbanken von Test zu Live

Translate

Ich frage mich, wie ihr die Bereitstellung einer Datenbank zwischen zwei SQL-Servern verwaltet, insbesondere SQL Server 2005. Jetzt gibt es eine Entwicklung und eine Live-Entwicklung. Da dies Teil eines Buildskripts sein sollte (Standard-Windows-Batch, selbst bei der aktuellen Komplexität dieser Skripte kann ich später zu PowerShell wechseln), zählt Enterprise Manager / Management Studio Express nicht.

Würden Sie einfach die .mdf-Datei kopieren und anhängen? Ich bin immer ein bisschen vorsichtig, wenn ich mit Binärdaten arbeite, da dies ein Kompatibilitätsproblem zu sein scheint (obwohl Entwicklung und Live immer dieselbe Version des Servers ausführen sollten).

Oder tun Sie - angesichts des Fehlens von "EXPLAIN CREATE TABLE" in T-SQL - etwas, das eine vorhandene Datenbank in SQL-Skripte exportiert, die Sie auf dem Zielserver ausführen können? Wenn ja, gibt es ein Tool, das eine bestimmte Datenbank automatisch in SQL-Abfragen sichern kann und das über die Befehlszeile ausgeführt wird? (Auch hier zählen Enterprise Manager / Management Studio Express nicht).

Und schließlich - angesichts der Tatsache, dass die Live-Datenbank bereits Daten enthält, umfasst die Bereitstellung möglicherweise nicht das Erstellen aller Tabellen, sondern das Überprüfen des Strukturunterschieds und das Ändern der Live-Tabelle stattdessen ALTER TABLE, was möglicherweise auch eine Datenüberprüfung / -konvertierung erfordert, wenn sich vorhandene Felder ändern.

Jetzt höre ich viele tolle Sachen über dieRotes TorProdukte, aber für Hobbyprojekte ist der Preis etwas hoch.

Was verwenden Sie also, um SQL Server-Datenbanken automatisch von Test zu Live bereitzustellen?

This question and all comments follow the "Attribution Required."

Alle Antworten

Translate

Ich habe es mir zur Aufgabe gemacht, alle meine DDL-Anweisungen (erstellt / ändern / löschen) von Hand zu codieren, sie als Textdateien zu meiner .sln hinzuzufügen und die normale Versionierung zu verwenden (unter Verwendung von Subversion, aber jede Revisionskontrolle sollte funktionieren). Auf diese Weise bekomme ich nicht nur den Vorteil der Versionierung, sondern das Live-Aktualisieren von dev / stage ist der gleiche Prozess für Code und Datenbank - Tags, Zweige usw. funktionieren trotzdem.

Ansonsten stimme ich zu, dass Redgate teuer ist, wenn Sie keine Firma haben, die es für Sie kauft. Wenn Sie ein Unternehmen dazu bringen können, es für Sie zu kaufen, lohnt es sich wirklich!

Quelle
Translate

Für meine Projekte wechsle ich zwischen SQL Compare von REd Gate und dem Database Publishing Wizard von Microsoft, den Sie kostenlos herunterladen könnenHier.

Der Assistent ist nicht so clever wie SQL Compare oder SQL Data Compare, aber er macht den Trick. Ein Problem besteht darin, dass die von ihm generierten Skripte möglicherweise neu angeordnet und / oder bearbeitet werden müssen, um in einer Aufnahme zu fließen.

Auf der anderen Seite kann es Ihr Schema und Ihre Daten verschieben, was für ein kostenloses Tool nicht schlecht ist.

Quelle
Translate

Vergessen Sie nicht die Lösung von Microsoft für das Problem:Visual Studio 2008 Database Edition. Enthält Tools zum Bereitstellen von Änderungen an Datenbanken, die einen Unterschied zwischen Datenbanken für Schema- und / oder Datenänderungen, Komponententests und Generieren von Testdaten erzeugen.

Es ist ziemlich teuer, aber ich habe die Testversion eine Weile benutzt und fand sie brillant. Es macht die Arbeit mit der Datenbank so einfach wie mit jedem anderen Code.

Quelle
Translate

Wie Rob Allen verwende ich SQL Compare / Data Compare von Redgate. Ich verwende auch den Datenbankveröffentlichungsassistenten von Microsoft. Ich habe auch eine Konsolen-App, die ich in C # geschrieben habe und die ein SQL-Skript verwendet und auf einem Server ausführt. Auf diese Weise können Sie große Skripte mit 'GO'-Befehlen über eine Befehlszeile oder in einem Batch-Skript ausführen.

Ich verwende die Bibliotheken Microsoft.SqlServer.BatchParser.dll und Microsoft.SqlServer.ConnectionInfo.dll in der Konsolenanwendung.

Quelle
Translate

Ich arbeite genauso wie Karl, indem ich alle meine SQL-Skripte zum Erstellen und Ändern von Tabellen in einer Textdatei behalte, die ich in der Quellcodeverwaltung behalte. Um das Problem zu vermeiden, dass ein Skript die Live-Datenbank untersuchen muss, um festzustellen, welche ALTERs ausgeführt werden sollen, arbeite ich normalerweise folgendermaßen:

  • In der ersten Version platziere ich alles während des Testens in einem SQL-Skript und behandle alle Tabellen als CREATE. Dies bedeutet, dass ich während des Testens häufig Tabellen lösche und lese, aber das ist zu Beginn des Projekts keine große Sache (da ich normalerweise sowieso die Daten hacke, die ich zu diesem Zeitpunkt verwende).
  • Bei allen nachfolgenden Versionen mache ich zwei Dinge: Ich erstelle eine neue Textdatei für die Upgrade-SQL-Skripte, die nur die ALTERs für diese Version enthalten. Und ich nehme die Änderungen am Original vor und erstelle auch ein neues Datenbankskript. Auf diese Weise führt ein Upgrade nur das Upgrade-Skript aus. Wenn wir jedoch die Datenbank neu erstellen müssen, müssen wir nicht 100 Skripte ausführen, um dorthin zu gelangen.
  • Abhängig davon, wie ich die DB-Änderungen bereitstelle, füge ich normalerweise auch eine Versionstabelle in die DB ein, die die Version der DB enthält. Anstatt menschliche Entscheidungen darüber zu treffen, welche Skripte ausgeführt werden sollen, verwendet der Code, den ich zum Erstellen / Aktualisieren der Skripte habe, die Version, um zu bestimmen, was ausgeführt werden soll.

Das einzige, was dies nicht tun wird, ist zu helfen, wenn ein Teil dessen, was Sie vom Test zur Produktion bewegen, Daten sind, aber wenn Sie die Struktur verwalten und nicht für ein schönes, aber teures DB-Verwaltungspaket bezahlen möchten, ist dies wirklich nicht sehr schwierig. Ich habe auch festgestellt, dass dies eine ziemlich gute Möglichkeit ist, Ihre DB im Auge zu behalten.

Quelle
Translate

Wenn Sie ein Unternehmen haben, das es kauft, verfügt Toad von Quest Software über diese integrierte Verwaltungsfunktion. Im Grunde ist es eine Zwei-Klick-Operation, um zwei Schemas zu vergleichen und ein Synchronisierungsskript von einem zum anderen zu generieren.

Sie haben Editionen für die meisten gängigen Datenbanken, einschließlich natürlich SQL Server.

Quelle
Translate

Ich bin damit einverstanden, dass das Schreiben von Skripten der beste Weg ist und das, was ich bei der Arbeit befürworte. Sie sollten alles von der DB- und Objekterstellung bis zum Auffüllen Ihrer Nachschlagetabellen skripten.

Alles, was Sie nur in der Benutzeroberfläche tun, wird nicht übersetzt (insbesondere für Änderungen ... nicht so sehr für Erstbereitstellungen) und erfordert Tools wie das, was Redgate bietet.

Quelle
Translate

Mit SMO / DMO ist es nicht allzu schwierig, ein Skript für Ihr Schema zu erstellen. Daten machen etwas mehr Spaß, sind aber immer noch machbar.

Im Allgemeinen verfolge ich den "Script It" -Ansatz, aber vielleicht möchten Sie etwas in diese Richtung in Betracht ziehen:

  • Unterscheiden Sie zwischen Entwicklung und Staging, sodass Sie mit einer Teilmenge von Daten entwickeln können. Dies würde ich ein Tool erstellen, um einfach einige Produktionsdaten abzurufen oder gefälschte Daten zu generieren, wenn es um Sicherheit geht.
  • Für die Teamentwicklung muss jede Änderung an der Datenbank zwischen Ihren Teammitgliedern koordiniert werden. Schema- und Datenänderungen können miteinander vermischt werden, ein einzelnes Skript sollte jedoch eine bestimmte Funktion aktivieren. Sobald alle Ihre Funktionen fertig sind, bündeln Sie diese in einer einzigen SQL-Datei und führen diese gegen eine Wiederherstellung der Produktion aus.
  • Sobald Ihre Bereitstellung gelöscht wurde, führen Sie die einzelne SQL-Datei erneut auf dem Produktionscomputer aus.

Ich habe die Red Gate-Werkzeuge verwendet und sie sind esgroßartigWerkzeuge, aber wenn Sie es sich nicht leisten können, ist es nicht allzu weit vom Ideal entfernt, die Werkzeuge zu bauen und auf diese Weise zu arbeiten.

Quelle
Translate

Ich verwende den Migrationsmechanismus von Subsonic, daher habe ich nur eine DLL mit Klassen in quadratischer Reihenfolge, die zwei Methoden haben, nach oben und unten. Es gibt einen kontinuierlichen Integrations- / Build-Skript-Hook in nant, damit ich das Upgrade meiner Datenbank automatisieren kann.

Es ist nicht das beste Thign der Welt, aber es ist besser als DDL zu schreiben.

Quelle
Translate

RedGate SqlCompareist meiner Meinung nach ein guter Weg. Wir führen regelmäßig eine DB-Bereitstellung durch, und seit ich dieses Tool verwende, habe ich nie mehr zurückgeschaut. Sehr intuitive Benutzeroberfläche und spart am Ende viel Zeit.

Die Pro-Version kümmert sich auch um die Skripterstellung für die Integration der Quellcodeverwaltung.

Quelle
Translate

Ich verwalte auch Skripte für alle meine Objekte und Daten. Für die Bereitstellung habe ich dieses kostenlose Dienstprogramm geschrieben -http://www.sqldart.com. Damit können Sie Ihre Skriptdateien neu anordnen und das gesamte Los innerhalb einer Transaktion ausführen.

Quelle
Translate

Ich bin damit einverstanden, dass alles in der Quellcodeverwaltung bleibt und alle Änderungen manuell per Skript erstellt werden. Änderungen am Schema für eine einzelne Version werden in eine Skriptdatei übernommen, die speziell für diese Version erstellt wurde. Alle gespeicherten Prozesse, Ansichten usw. sollten in einzelne Dateien aufgenommen und in Bezug auf die Quellcodeverwaltung wie .cs oder .aspx behandelt werden. Ich verwende ein Powershell-Skript, um eine große SQL-Datei zum Aktualisieren der Programmierbarkeit zu generieren.

Ich mag es nicht, die Anwendung von Schemaänderungen wie neuen Tabellen, neuen Spalten usw. zu automatisieren. Wenn ich eine Produktionsversion mache, gehe ich das Änderungsskript Befehl für Befehl durch, um sicherzustellen, dass jede wie erwartet funktioniert. Es gibt nichts Schlimmeres, als ein großes Änderungsskript für die Produktion auszuführen und Fehler zu erhalten, weil Sie einige kleine Details vergessen haben, die sich in der Entwicklung nicht gezeigt haben.

Ich habe auch gelernt, dass Indizes wie Codedateien behandelt und in die Quellcodeverwaltung übernommen werden müssen.

Und Sie sollten auf jeden Fall mehr als 2 Datenbanken haben - dev und live. Sie sollten eine Entwicklungsdatenbank haben, die jeder für tägliche Entwicklungsaufgaben verwendet. Dann eine Staging-Datenbank, die die Produktion nachahmt und für Ihre Integrationstests verwendet wird. Dann vielleicht eine vollständige aktuelle Kopie der Produktion (wiederhergestellt aus einer vollständigen Sicherung), wenn dies machbar ist, sodass Ihre letzte Runde der Installationstests gegen etwas verstößt, das der Realität so nahe wie möglich kommt.

Quelle
Translate

Ich erstelle meine gesamte Datenbank als DDL und verpacke diese DDL dann in eine Schema-Wartungsklasse. Ich kann verschiedene Dinge tun, um die DDL zu erstellen, aber im Grunde mache ich das gesamte Schema, das im Code gepflegt wird. Dies bedeutet auch, dass Sie prozedurale Logik schreiben und zwischen DDL / DML-Klumpen ausführen können, wenn Sie Nicht-DDL-Aufgaben ausführen müssen, die SQL nicht gut zugeordnet sind.

Meine Datenbank hat dann eine Tabelle, die die aktuelle Version definiert, so dass man eine relativ einfache Reihe von Tests codieren kann:

  1. Existiert die DB? Wenn nicht, erstellen Sie es.
  2. Ist die DB die aktuelle Version? Wenn nicht, führen Sie die Methoden nacheinander aus, um das Schema auf den neuesten Stand zu bringen (möglicherweise möchten Sie den Benutzer auffordern, an dieser Stelle zu bestätigen und - im Idealfall - Sicherungen durchzuführen).

Für eine Einzelbenutzer-App führe ich dies einfach an Ort und Stelle aus. Für eine Web-App sperren wir derzeit den Benutzer, wenn die Versionen nicht übereinstimmen, und haben eine eigenständige Schema-Maint-App, die wir ausführen. Für Mehrbenutzer hängt dies von der jeweiligen Umgebung ab.

Der Vorteil? Nun, ich bin sehr zuversichtlich, dass das Schema für die Apps, die diese Methode verwenden, in allen Instanzen dieser Anwendungen konsistent ist. Es ist nicht perfekt, es gibt Probleme, aber es funktioniert ...

Es gibt einige Probleme bei der Entwicklung in einer Teamumgebung, aber das ist sowieso mehr oder weniger selbstverständlich!

Murph

Quelle
Translate

Ich arbeite gerade das Gleiche für Sie. Bereitstellen von SQL Server-Datenbanken von Test zu Live, sondern auch des gesamten Prozesses von Lokal -> Integration -> Test -> Produktion. Was mich jeden Tag leicht machen kann, ist, dass ich es tueKeine Aufgabe mit Red-Gate SQL Compare. Ich arbeite nicht für RedGate, aber ich muss sagen, dass es eine gute Wahl ist.

Quelle