Bereitstellen von SQL Server-Datenbanken von Test-to Live

stimmen
24

Ich frage mich, wie Sie Jungs Bereitstellung einer Datenbank zwischen zwei SQL Server verwalten, speziell SQL Server 2005. Jetzt gibt es eine Entwicklung und eine Live ein. Da dies sollte Teil einer buildscript sein (mit aktueller Komplexität dieser Skripte Standard-Windows-Batch, auch tun i Powershell wechseln könnte oder so später), Enterprise Manager / Management Studio Express zählen nicht.

Möchten Sie nur die MDF- Datei kopieren und befestigen? Ich bin immer ein bisschen vorsichtig, wenn Sie mit binären Daten arbeiten, da dies ein Kompatiblität Problem zu sein scheint (obwohl Entwicklung und leben soll die gleiche Version des Servers jederzeit ausgeführt werden).

Oder - das Fehlen von „ERKLÄREN CREATE TABLE“ in T-SQL gegeben - tun Sie etwas tun, das eine vorhandene Datenbank in SQL-Scripts exportiert, die Sie auf dem Zielserver ausgeführt werden können? Wenn ja, ist es ein Werkzeug, das automatisch eine bestimmte Datenbank in SQL-Abfragen abladen kann und dass wegläuft die Befehlszeilen? (Wieder Enterprise Manager / Management Studio Express zählen nicht).

Und schließlich - angesichts der Tatsache, dass die Live-Datenbank bereits Daten enthält, kann die Bereitstellung beinhalten nicht alle Tabellen zu schaffen, sondern den Unterschied in der Struktur überprüft und ALTER TABLE die Live diejenigen statt, die auch die Datenüberprüfung / Konvertierung benötigen, wenn vorhandene Felder ändern.

Nun höre ich viele tolle Sachen über die Red Gate - Produkte, sondern auch für Hobby - Projekte, der Preis ist ein wenig steil.

Also, was sind Sie automatisch SQL Server-Datenbanken von Test-bereitstellen, um zu leben?

Veröffentlicht am 03/08/2008 um 00:30
quelle vom benutzer
In anderen Sprachen...                            


14 antworten

stimmen
19

Ich getroffen habe all meine DDL Hand-Codierung verwendet (/ ändern / löscht) Aussagen, sie zu meinem SLN als Textdateien hinzufügen und mit normaler Versionierung (Subversion verwendet, aber jede Revisionskontrolle funktionieren soll). Auf diese Weise habe ich nicht nur den Vorteil der Versionsverwaltung, aber von dev Automatisch aktualisieren / Stufe ist der gleiche Prozess für Code und Datenbank - Tags, Zweige und so weiter arbeiten alle gleich.

Ansonsten stimme ich redgate teuer ist, wenn man für Sie kaufen es nicht ein Unternehmen haben. Wenn Sie ein Unternehmen erhalten kann es für Sie aber zu kaufen, ist es wirklich wert!

Beantwortet am 03/08/2008 um 00:51
quelle vom benutzer

stimmen
14

Für meine Projekte stell ich zwischen SQL Vergleich von Red Gate und der Datenbank - Publishing - Assistenten von Microsoft , die Sie kostenlos herunterladen können hier .

Der Assistent ist nicht so glatt wie SQL vergleichen oder SQL Daten vergleichen, aber es funktioniert der Trick. Ein Problem ist, dass die Skripte erzeugt sie müssen möglicherweise einige Umordnung und / oder Bearbeitung in einem Schuss fließen.

Auf der Seite oben, kann es Ihr Schema und die Daten bewegen, die für ein kostenloses Tool ist nicht schlecht.

Beantwortet am 03/08/2008 um 00:40
quelle vom benutzer

stimmen
7

Vergessen Sie nicht , Microsofts Lösung für das Problem: Visual Studio 2008 Database Edition . Enthält Werkzeuge für Änderungen an Datenbanken, Erzeugen eines diff zwischen Datenbanken für Schema und / oder Datenänderungen, Komponententests, Testdatengenerierung einsetzen.

Es ist ziemlich teuer, aber ich verwendet, um die Testversion für eine Weile und dachte, es war brillant. Es macht die Datenbank so einfach mit wie jedes andere Stück Code zu arbeiten.

Beantwortet am 18/08/2008 um 11:47
quelle vom benutzer

stimmen
6

Wie Rob Allen, verwende ich SQL Compare / Daten vergleichen von Redgate. Ich benutze auch die Database-Publishing-Assistenten von Microsoft. Ich habe auch eine Konsole app, die ich in C # geschrieben, die einen SQL-Skript nimmt und es läuft auf einem Server. Auf diese Weise können Sie großen Skripte mit ‚GO‘ Befehlen in sie von einer Befehlszeile oder in einer Batch-Skript ausführen.

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

Beantwortet am 04/08/2008 um 19:00
quelle vom benutzer

stimmen
4

Ich arbeite auf die gleiche Weise Karl der Fall ist, durch alle meine SQL-Skripts zum Erstellen und Ändern von Tabellen in einer Textdatei zu halten, die ich in der Quellcodeverwaltung zu halten. In der Tat, das Problem zu vermeiden, dass ein Skript haben, die Live-Datenbank untersuchen, um zu bestimmen, was Abspaltungen zu laufen, ich arbeite in der Regel wie folgt aus:

  • Auf der ersten Version, lege ich alles während des Tests in einer SQL-Skript, und behandeln alle Tabellen als CREATE. Dies bedeutet, dass ich falle am Ende und readding Tabellen viel während des Tests, aber das ist keine große Sache früh in das Projekt (da ich normalerweise bin das Hacking Ich verwende an dieser Stelle sowieso).
  • Bei allen nachfolgenden Versionen, ich zwei Dinge: Ich habe eine neue Textdatei mache den Upgrade-SQL-Skripte zu halten, die nur die Abspaltungen für diese Version enthalten. Und ich mache die Änderungen an der ursprünglichen, eine neue Datenbank-Skript als auch erstellen. Auf diese Weise ein Upgrade läuft nur das Upgrade-Skript, aber wenn wir die DB neu erstellen müssen wir nicht brauchen, 100 Skripte auszuführen dorthin zu gelangen.
  • Je nachdem, wie ich die DB Änderungen bin bereitstellen, werde ich in der Regel auch eine Version Tisch in der DB, der die Version des DB hält. Dann, anstatt alle menschliche Entscheidungen zu treffen, um die Skripte auszuführen, was auch immer ich Code ausgeführt habe, die erstellen / aktualisieren Skripte verwendet die Version zu bestimmen, was zu laufen.

Das einzige, was dies nicht tun, ist hilfreich, wenn ein Teil von dem, was Sie von Test bis zur Produktion in Bewegung sind, Daten, aber wenn Sie Struktur verwalten möchten und nicht für einen schönen, aber teuer DB-Management-Paket zu zahlen, ist wirklich nicht sehr schwierig. Ich habe auch festgestellt, ist es ein ziemlich guter Weg, mental den Überblick über Ihre DB zu halten.

Beantwortet am 03/08/2008 um 01:37
quelle vom benutzer

stimmen
3

Mit SMO / DMO, ist es nicht allzu schwierig, ein Skript von Ihrem Schema zu generieren. Data ist ein wenig mehr Spaß, aber immer noch machbar.

In der Regel nehme ich „Script Es“ -Ansatz, aber man könnte etwas in dieser Richtung betrachten möchten:

  • Unterscheiden Sie zwischen Entwicklung und Staging, so dass Sie mit einer Teilmenge von Daten entwickeln ... das würde ich ein Werkzeug erstellen, um einfach nach unten zieht einige Produktionsdaten oder gefälschte Daten zu erzeugen, in denen die Sicherheit betreffen.
  • Für Teamentwicklung, jede Änderung in der Datenbank müssen unter Ihren Teammitgliedern abgestimmt werden. Schema und Datenänderungen können verwirbelt werden, aber ein einziges Skript sollte eine gegebene Funktion aktivieren. Sobald alle Funktionen bereit sind, können Sie diese bündeln in einer einzigen SQL-Datei und führen, dass gegen eine Produktions wiederherzustellen.
  • Sobald Ihre Inszenierung Akzeptanz gelöscht wurde, führen Sie die einzelnen SQL-Datei erneut auf der Produktionsmaschine.

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

Beantwortet am 04/08/2008 um 18:38
quelle vom benutzer

stimmen
3

Wenn Sie ein Unternehmen kaufen es haben, Toad von Quest Software hat diese Art von Management-Funktionalität integriert. Es ist im Grunde ein Zwei-Klick-Betrieb auf zwei Schemata vergleichen und ein Sync-Skript von einem zum anderen zu erzeugen.

Sie haben Ausgaben für die meisten der gängigen Datenbanken, darunter natürlich SQL Server.

Beantwortet am 03/08/2008 um 01:22
quelle vom benutzer

stimmen
2

Ich behaupte auch Skripte für alle meine Objekte und Daten. Für die Bereitstellung schrieb ich dieses freie Dienstprogramm - http://www.sqldart.com . Es lasse Sie Ihre Skriptdateien neu ordnen und die ganze Menge innerhalb einer Transaktion ausführen.

Beantwortet am 08/06/2010 um 22:33
quelle vom benutzer

stimmen
2

RedGate SqlCompare ist ein Weg , meiner Meinung nach gehen. Wir tun DB Einsatz auf einer regelmäßigen Basis , und da ich dieses Werkzeug begann mit Ich habe es nie bereut. Sehr intuitive Benutzeroberfläche und spart viel Zeit am Ende.

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

Beantwortet am 28/08/2008 um 01:22
quelle vom benutzer

stimmen
2

Ich verwende Migrationen Mechanismus Subsonic so dass ich nur eine DLL mit Klassen in squential habe, um die zwei Methoden, nach oben und unten. Es gibt einen kontinuierlichen Integration / Build-Skript Haken in Nant, so dass ich das Upgrade meiner Datenbank automatisieren.

Es ist nicht die beste thign in der Welt, aber es schlägt das Schreiben DDL.

Beantwortet am 26/08/2008 um 18:39
quelle vom benutzer

stimmen
2

Ich stimme mit allem, was in der Quellcodeverwaltung zu halten und von Hand alle Änderungen scripting. Änderungen am Schema für eine Single-Auskopplung gehen in eine Skriptdatei erstellt speziell für diese Version. Alle gespeicherten Procs, Ansichten, etc. sollten in einzelne Dateien gehen und wie CS- oder .aspx so weit wie Quellcodeverwaltung geht behandelt. Ich benutze einen Powershell-Skript eine große SQL-Datei für die Aktualisierung des Programmierbarkeit Materials zu erzeugen.

Ich mag es nicht, die Anwendung von Schemaänderungen zu automatisieren, wie neue Tabellen, neue Spalten usw. Wenn eine Produktionsfreigabe zu tun, wie ich mit dem Befehl durch die Änderung Script-Befehl gehen, um sicherzustellen, jeder wie erwartet funktioniert. Es gibt nichts Schlimmeres als eine große Veränderung Skript auf der laufenden Produktion und Fehler bekommen, weil Sie einige kleine Detail vergessen, die nicht selbst in der Entwicklung vorgelegt hat.

Ich habe auch gelernt, dass Indizes müssen wie Code-Dateien und in der Quellcodeverwaltung gestellt behandelt werden.

Und Sie sollten auf jeden Fall mehr als zwei Datenbanken - dev und leben. Sie sollten eine Entwickler-Datenbank, die alle für den täglichen dev Aufgaben verwendet. Dann wird eine Staging-Datenbank, die Produktion nachahmt und verwendet, um Ihre Integrationstests zu tun. Dann vielleicht eine vollständige aktuelle Kopie der Produktion (von einer vollständigen Sicherung gestellt), wenn das möglich ist, so die letzte Runde der Installationsprüfung geht gegen etwas, das so nah an die Realität wie möglich ist.

Beantwortet am 13/08/2008 um 16:41
quelle vom benutzer

stimmen
2

Ich bin damit einverstanden, dass alles scripting ist der beste Weg zu gehen und ist das, was ich bei der Arbeit einsetzen. Sie sollten Skript alles von DB und Objekterstellung Ihre Lookup-Tabellen zu bevölkern.

Alles, was Sie in UI tun wird nicht nur übersetzen (vor allem für Änderungen ... nicht so sehr für die ersten Einsätze) und ein Werkzeug erfordern wie das, was Redgate bietet enden.

Beantwortet am 03/08/2008 um 02:38
quelle vom benutzer

stimmen
1

Im Moment arbeite ich die gleiche Sache zu Ihnen. Nicht nur SQL Server - Datenbanken von Test bereitstellen zu leben , sondern umfasst auch den gesamten Prozess von Local -> Integration -> Test -> Produktion. Also , was mich einfach jeden Tag machen kann , ist , ich NAnt Aufgabe mit Red-Gate - SQL vergleichen . Ich arbeite nicht für RedGate aber ich muss sagen , dass es eine gute Wahl ist.

Beantwortet am 27/11/2008 um 04:15
quelle vom benutzer

stimmen
1

Ich mache alle meine Datenbankerstellung als DDL und dann die DDL in ein Schema maintainence Klasse wickeln. Ich kann verschiedene Dinge tun, um die DDL in erster Linie zu schaffen, sondern im Grunde ich das alles Schema maint im Code. Dies bedeutet auch, dass, wenn man braucht nicht DDL Dinge zu tun, die nicht gut zu SQL ordne können Sie prozedurale Logik schreiben und es zwischen Klumpen von DDL / DML laufen.

Mein dbs hat dann eine Tabelle, die die aktuelle Version definiert, so kann man eine relativ einfache Reihe von Tests Code:

  1. Ist der DB vorhanden sind? Wenn es nicht schaffen.
  2. Ist die DB die aktuelle Version? Wenn nicht, dann die Methoden ausgeführt werden, in der Reihenfolge, die das Schema auf dem neuesten Stand bringen (Sie den Benutzer aufzufordern, zu bestätigen und sollten - im Idealfall - do Sicherungen an dieser Stelle).

Für einen einzelnen Benutzer app laufen diese ich nur an Ort und Stelle für eine Web-App wir derzeit den Benutzer aus sperren, wenn die Versionen eine Stand-alone-Schema maint App laufen wir übereinstimmen und nicht haben. Für Multi-User wird es von der jeweiligen Umgebung ab.

Der Vorteil? Nun habe ich ein sehr hohes Maß an Vertrauen, dass das Schema für die Anwendungen, 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, wenn in einem Team zu entwickeln, aber das ist mehr oder weniger ohnehin ein given!

Murph

Beantwortet am 26/08/2008 um 16:38
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more