Benutzer mit den meisten Antworten
Unterschiede zwischen Datenbanken

Frage
-
Hallo Forum,
ich habe mehrere SQL-Server, auf denen vor ca. 3 Jahren eine administrative Datenbank erstellt wurde. Diese Datenbank("historisch angewachsen", Ihr wisst schon ;-) hat keine Versionsnummer und in der Zwischenzeit gab es viele neuere Versionen von dieser DB, die ich in einem Aufwasch auf einen einheitlichen Level auf allen Servern per C#-Programm bringen möchte. Wenn ich es richtig sehe, beziehen sich die Änderungen auf die Spaltenlänge, bzw. es müssten neue Tabellenspalten zusätzlich in schon bestehenden Tabellen erstellt werden (bzw. komplett neue Tabellen erstellt werden), es kommen neue StoredProzeduren dazu, usw. Die alte Datenbank darf ich nicht löschen und neu erstellen, da sie Daten enthält. Kurz gesagt: wie kann/soll ich vorgehen?
1. Zuerst die jeweiligen Unterschiede zw. der alten und der neuen DB festellen (wie?) und dann ein gezieltes Update (...alter Table add column XYZ...) machen?
2. Backup machen (hmm, auf vielen Servern per C#-Programm...?), neue DB erstellen und die Daten übernehmen?
3...?
Vielen Dank für Eure VorschlägeP.
- Bearbeitet Purclot Sonntag, 22. Juli 2012 18:43
Antworten
-
Hi,
auch wenn Du kein Drittanbietertool wolltest, kann ich dir aus eigener Erfahrung trotzdem nur empfehlen, zumindest für den Vergleich und die Generierung der Aktualisierungsskripte auf bewährte Tools zurückzugreifen. Es gibt so viele Feinheiten, die man dabei beachten muss. Angefangen von Spaltenreihenfolgen, Datentypen, Indizes, Triggern, Constraints, Berechtigungen, usw. usw. usw.
Das Red Gate SQL Comparison SDK ist die Basis für deren eigene Tools SQL Compare und SQL Data Compare, hat für dich aber den Charme, dass Du das komplett in deine Anwendung integrieren und automatisieren kannst. D.h. es wird keine andere Oberfläche, ... angezeigt, alles läuft so, wie Du es haben willst.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Purclot Donnerstag, 16. August 2012 11:55
-
Die Sache mit der Schleife geht nicht immer. Die Unterschiede von Version zu Version können derart sein, das die notwendigen Schemaänderungen zu Datenverlust führen würden. Ein Tool kann zwar diese Schemaänderung bestimmen, aber eben nicht, wie gegebenenfalls Daten transformiert werden müssen, da es die Entitäten dahinter nicht kennen kann. Dieses Risiko steigt laut deiner Beschreibung, da die Datenbank ja in verschiedenen Entwicklungsstufen existiert.
Dein Schritt drei ist ein gewagter. Da kann ich mich Stefan nur anschließen. Schau dir Schema Compare, es gibt übrigens auch ein Data Compare von redgate an. Die gibt es 14-Tage zum Ausprobieren.
- Als Antwort markiert Purclot Donnerstag, 16. August 2012 11:55
Alle Antworten
-
Am besten ist es die neue Datenbank auf grüner Wiese neu zu erstellen. Also das Datenmodell sauber, neu aufsetzten. Dann erstelle dir für die einzelnen Versionen Migrationsskripts. D.h. Skripte, welche lediglich eine niedrigere Version in die nächste höhere Version bringen.
Hilfreich sind hierbei entsprechende Tools. Ich nutze hier gerne SQL Compare und SQL Control.
Im Grunde ist deine Vorgehensweise in Ordnung. Wobei ich die alte Version, wenns die Datenmenge und deine Server erlauben, erstmal kopieren und dann die Skripte auf die Kopie loslassen würde.
-
Hallo Purclot,
die möglichen Wege (eine DB mit Skripten zu migrieren oder Daten in eine neue DB zu importieren) hast Du bereits selbst vorgeschlagen. Ich würde mich einfach für den günstigsten Weg entscheiden und so eine Migration keinem Tool überlassen, sonder sorgfältig einzelne Skripte für die jeweilige DB-Version implementieren (evt. zum Teil generieren), testen und auf dem Produktionsserver(n) ausführen.
Zwei Datenbanken könnte man mit den Tools http://dbcomparer.com, http://reg-gate.com/sqlcompare vergleichen/synchronisieren.
-
Hallo Purclot,
mir gefällt das MS SQL Server Data Tool (SSDT) sehr gut, auch mit dem kann man sehr gut Differenzen zwischen zwei Daten über "Schema Compare" ermitteln.
Auch beim Entwickeln/Änderung von Datenbanken unterstützt es einen sehr gut, z.B. wenn man ein Spalte einer Tabelle ändert, zeigt es einem alle abhängigen Objekte wie Views & Store Procudures an, die von der Änderung betroffen sind und ggf ebenfalls geändert werden müssen. ... ist allerdings nocher Version 1.
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing -
mir gefällt das MS SQL Server Data Tool (SSDT) sehr gut, auch mit dem kann man sehr gut Differenzen zwischen zwei Daten über "Schema Compare" ermitteln.
... ist allerdings nocher Version 1.
Version 1 ginge noch, leider aber hat es das eine oder andere Feature von Visual Studio 2008/2010 Data Dude (noch) nicht und ist auf Windows XP nicht mehr unterstuetzt obwohl VS2010 selber ja noch auf Windows XP laeuft.
z.B. kannst Du zwar Schema zweier DBs vergleichen aber die Daten kannst mit SSDT derzeit nicht vergleichen - wohl hingegen mit VS2008/2010 Data Dude.
und noch was, welche Version 1 meinst Du damit ? die Version die fuer VS2010 runtergeladen werden kann oder diejenige Version welche auf der SQL Server 2012 Installation vorhanden ist ?
Please use Mark as Answer if my post solved your problem and use Vote As Helpful if a post was useful.
-
Hallo Forum,
ich habe mehrere SQL-Server, auf denen vor ca. 3 Jahren eine administrative Datenbank erstellt wurde. Diese Datenbank("historisch angewachsen", Ihr wisst schon ;-) hat keine Versionsnummer und in der Zwischenzeit gab es viele neuere Versionen von dieser DB, die ich in einem Aufwasch auf einen einheitlichen Level auf allen Servern per C#-Programm bringen möchte. Wenn ich es richtig sehe, beziehen sich die Änderungen auf die Spaltenlänge, bzw. es müssten neue Tabellenspalten zusätzlich in schon bestehenden Tabellen erstellt werden (bzw. komplett neue Tabellen erstellt werden), es kommen neue StoredProzeduren dazu, usw. Die alte Datenbank darf ich nicht löschen und neu erstellen, da sie Daten enthält. Kurz gesagt: wie kann/soll ich vorgehen?
von wievielen GB oder TB Daten sprichst Du hier und steht ein ausreichendes Wartungsfenster fuer den Upgrade der DB zur Verfuegung?
Als C# Developer benutzt Du wohl Visual Studio 2008 oder 2010 ? hoehere Edition haben eine Schema- und Datenvergleich von Datenbanken eingebaut und diese sind einigermassen brauchbar, schau einfach mal in den verfuegbaren Menus nach ob diese Funktion nicht vorhanden ist, wenn Du nicht weisst welche Edition von VS du benutzt.
Please use Mark as Answer if my post solved your problem and use Vote As Helpful if a post was useful.
-
die Version die fuer VS2010 runtergeladen werden kann oder diejenige Version welche auf der SQL Server 2012 Installation vorhanden ist ?
Hallo Daniel,
es gibt nur die Version zum Download; nach der Installtion von DVD findet man in VS nur das Projekt "SQL Server Datenbank (WebInstaller)" vor und man muss das Template/Plugin erst herunter laden.
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing -
Hallo,
vielen Dank für Euere Vorschläge.
Ich würde gerne - wenn möglich - auf den Einsatz von zusätzlichen Tools verzichten...
Da ich es vorhabe alles in einem C#-Programm zu machen, würde ich es gerne so machen:
1. die Muster-DB installiere ich frisch und scripte sie.
2. in einem Loop: ich verbinde mich mit dem Server XYZ, überprüfe die Unterschiede zw. der Muster-DB und der vorhandenen DB auf dem jeweiligen Server
3. ich mache Update der vorhandenen DB
4. gehe zur nächsen DB über.Das Hauptproblem ist das Scritp, dass eben die Unterschiede zw. der DBs zeigt und ein kluges Update, das auf den Unterschieden basiert...
Vielen Dank
P.
-
Hi,
auch wenn Du kein Drittanbietertool wolltest, kann ich dir aus eigener Erfahrung trotzdem nur empfehlen, zumindest für den Vergleich und die Generierung der Aktualisierungsskripte auf bewährte Tools zurückzugreifen. Es gibt so viele Feinheiten, die man dabei beachten muss. Angefangen von Spaltenreihenfolgen, Datentypen, Indizes, Triggern, Constraints, Berechtigungen, usw. usw. usw.
Das Red Gate SQL Comparison SDK ist die Basis für deren eigene Tools SQL Compare und SQL Data Compare, hat für dich aber den Charme, dass Du das komplett in deine Anwendung integrieren und automatisieren kannst. D.h. es wird keine andere Oberfläche, ... angezeigt, alles läuft so, wie Du es haben willst.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Purclot Donnerstag, 16. August 2012 11:55
-
Die Sache mit der Schleife geht nicht immer. Die Unterschiede von Version zu Version können derart sein, das die notwendigen Schemaänderungen zu Datenverlust führen würden. Ein Tool kann zwar diese Schemaänderung bestimmen, aber eben nicht, wie gegebenenfalls Daten transformiert werden müssen, da es die Entitäten dahinter nicht kennen kann. Dieses Risiko steigt laut deiner Beschreibung, da die Datenbank ja in verschiedenen Entwicklungsstufen existiert.
Dein Schritt drei ist ein gewagter. Da kann ich mich Stefan nur anschließen. Schau dir Schema Compare, es gibt übrigens auch ein Data Compare von redgate an. Die gibt es 14-Tage zum Ausprobieren.
- Als Antwort markiert Purclot Donnerstag, 16. August 2012 11:55
-
Hallo Purclot,
Ich möchte Dich bitte folgendes lesen und die Beiträge die Dir geholfen haben zu bewerten. Vielen Dank.
Nutzen Sie die Bewertungsfunktionen ("Antwort" und "Hilfreich") in den MSDN Foren! Unter anderem können andere später eine Lösung schneller finden. Es ist also wünschenswert, dass die fragenden (Benutzer) die Postings anderer Beantworter bewerten.
Hier dazu die wichtigsten Anhaltspunkte aus den Forenregeln und FAQs.Lösungsbeiträge als „Die Antwort“ markieren
Bitte markieren Sie den Beitrag, der zur Lösung geführt hat, als "Die Antwort". Durch Bewerten eines Beitrags als "Die Antwort" können andere Teilnehmer die Lösung schneller finden. Außerdem können Sie dem Benutzer, der die Antwort eingereicht hat, für seinen Beitrag danken und zur Steigerung der Antwortqualität in der Diskussionsgruppe beitragen.
[Quelle: Forenregeln]Bitte markiere den/die Beiträge als Antwort, die dir geholfen haben, dein Problem zu lösen. Das ist zum einen eine Anerkennung für die Autoren dieser Beiträge, zum anderen hilft es zukünftigen Lesern, sich in diesem Thread besser zu orientieren und Antworten auf ihre Fragen schneller zu identifizieren.
Wie zeige ich an, dass meine Frage durch einen Beitrag beantwortet wurde?
Wie bewerte ich einen Beitrag als hilfreich? Um einen Beitrag als hilfreich zu bewerten, klicken Sie in einem beliebigen Beitrag auf Als hilfreich bewerten. Sie können Ihre Stimme nur einmal für einen Beitrag abgeben.
[Quelle: Häufig gestellte Fragen]Grüße,
Robert
Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip„Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.- Bearbeitet Robert BreitenhoferModerator Dienstag, 14. August 2012 14:43 Formatierung