AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Tabellenstruktur (MSSQL) bei Update überprüfen
Thema durchsuchen
Ansicht
Themen-Optionen

Tabellenstruktur (MSSQL) bei Update überprüfen

Ein Thema von winnionkel · begonnen am 22. Nov 2006 · letzter Beitrag vom 23. Nov 2006
 
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.643 Beiträge
 
#5

Re: Tabellenstruktur (MSSQL) bei Update überprüfen

  Alt 22. Nov 2006, 20:30
Zitat von winnionkel:
Ich hatte so in der Art gedacht, ob der SQL Server das anhand einer Deffinitionsdatei, eventuell allein machen könnte.
Huh. Soweit ich weiss kann DAS kein DBMS.

Was die Performance angeht: Selbst mit Tabellen im GB-Bereich ist sowas kein Problem. Vor allem die Systemtabellen zum Abgleich sind, da IMMER gecached, superschnell abgefragt. Und es reicht ja, die einmal in eine Memtable zu laden und dort dann auf fehlende Fehler zu vergleichen.

Aber mal ne ganz andere Frage: Warum so kompliziert?

Vorschlag:
Wenn Du sowas wie eine Konfigurationstabelle hast hier einen Wert 'DBVersion' anlegen. Wenn Du keine Konfigtabelle hast, diese Anlegen und diesen Wert anlegen.

Eine Version des Datenbanklayouts bekommt ab dann immer eine definierte Version, die in dieser Konfig abgelegt wird.

Änderst Du Deine Tabellen, erhöhst Du die Datenbankversion. Die nötigen Scripte zum ändern (ALTER TABLE..., zur not mit Umweg über temp-tabelle wenns gröbere Änderungen sind etc.) lieferst Du immer alle mit dem Client aus - entsprechend der alten(!) Datenbankversion benamst. Letztes Statement ist freilich das updaten des DBVersion-Wertes auf die neue DB-Version.

Jeder Client benötigt dann einfach eine bestimmte Datenbankversion, die einfach aus dem DBVersion ausgelesen werden kann.

Zum Start des Client überprüft dieser die Version. Ist diese gleich der benötigten ist alles okay. Ist diese kleiner, wird das vorliegende Script zur aktuell eingetragenen DBVersion ausgeführt und danach der Wert nochmal abgefragt. Ist er immer noch kleiner wird das nächste Skript ausgeführt... bis die DBVersion am schluss mit der richtigen vom Client verlangten Version übereinstimmt.

Somit hast Du die Datenbank inkrementell immer auf dem aktuellsten Stand (selbst wenn ein Kunde mal 2 Versionen aussetzt bekommt er alle updates) und das läuft mit der Auslieferung einer neuen Clientversion auch vollautomatisch ab.

Wichtig ist nur, dass dann nicht zwei Clients gleichzeitig versuchen, upzudaten. Also müsstest Du den DBversion-Eintrag halt explizit vom ersten Client aus locken. Wenn schon gelockt ist kann der nächste Client keinen Lock bekommen und mnacht kein update sondern wartet bis der Lock wieder weg ist.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz