Der Threadersteller hat das Knowhow, um die Ideen selbständig zu analysieren und die für seinen Belange beste Kombination daraus zu erstellen.
Ist sicherlich deutlich effektiver als sich über eventuell bestehende Fehermöglichkeiten und / oder Schwachstellen zu streiten.
Hat er
Ihr habt mir einige Anregungen gegeben, die ich mir alle angesehen habe.
Stand zur Zeit:
Ich möchte keine weiteres Tools einsetzen, deshalb mache ich dann doch alles selber. Auch wenn diese Tools durchaus gut sind und mit Sicherheit vieles auch noch besser machen, als ich, so geht das doch oft über meine Anforderungen hinaus, bzw. verursacht weitere Kosten, die ich vermeiden kann.
In einer Tabelle lege ich mir die Version der
DB an (der Einfachheit halber nutze ich dafür die Programmversion, warum erzähle ich später).
Beim Programmstart wird auf
DB-Version<Programmversion geprüft. Ist diese größer, so wird die Datenbank überprüft. Ich prüfe jede Tabelle und jedes Feld. Dazu habe ich mir eine Klasse geschrieben, die alle Tabellen und Felddefinitionen enthält, diese validieren kann und auch die gewünschten Operationen durchführen kann.
(Löschen von Tabellen oder Feldern wird mit Sicherheit eine Ausnahme bleiben, und wahrscheinlich nur zwei, drei mal, wenn überhaupt, vorkommen. Und bei Änderungen wird es auch nur mal eine Feldvergrößerung sein)
Weiterhin hat die Klasse die Möglichkeit in Abhängigkeit von Operationen oder bestimmten Versionsnummern auch
SQL-Scripte auszuführen.
Somit sind da doch all meine Anforderungen erfüllt.
Zum Thema "an mehreren Clients updates gleichzeitig". Nun, das sollte ja logisch sein, dass man sowas berücksichtigen muss. Aber auch dort habe ich keine Bedenken.
Da sich die Clients in einer Benutzertabelle anmelden müssen, wird natürlich als erstes geprüft, ob andere Clients angemeldet sind. Ist dies der Fall werden diese Benachrichtigt und gewartet, bis alle Clients sich ordnungsgemäß abgemeldet haben. Erst dann kann das
DB-Update gestartet werden. Dann wird natürlich auch ein Updateflag in die
DB geschrieben, welches eine später Anmeldung während des Update-Vorgangs verhindert.
Somit sollte sichergestellt sein, dass kein Client mehr aktiv mit der
DB arbeitet.
Sicherlich hat mein Konzept Lücken und auch Schwachpunkte. Aber ich denke ich kann damit sehr gut leben.
Das wichtigste ist vorab umgesetzt: Die Sicherung der kompletten Datenbank
Achja, warum nehme ich die Programmvesion als Datenbankversion.
Das Programm wird nur ca. alle 3 Monate als Update ausgeliefert. Eine der häufigsten Änderung ist in den erstellen Indizes, da für neue Berechnungen weiter Indizes hinzukommen. Deshalb lasse ich die
DB in dem Zuge auch gleich überprüfen, was das Neuerstellen der Indizes beinhaltet. Somit brauch ich keine weitere Versionsnummer. (innerhalb der Entwicklung löse ich das anders).