Migration FB 2.5 zu 3 oder 4 bei mehreren hundert EMBEDDED-Installatonen

Forum für Fragen rund um die Installation, Konfiguration und Inbetriebnahme von Firebird.

Moderator: martin.koeditz

Antworten
haegar
Beiträge: 3
Registriert: Sa 17. Nov 2018, 18:28

Hallo zusammen,

ich prüfe gerade die Möglichkeiten, bei mehreren hundert Installationen mit FB 2.5 embedded eine (weitgehend automatische) Migration zu FB3 oder FB4 durchzuführen. Alle Migrations-Dokumentationen beschreiben immer nur die manuelle Migration einer einzelnen Datenbank für einen User, der problemlos auf der Kommandozeile mit GBK hantieren kann. Ich kann das, aber die Anwender meiner Applikation können das nicht. Die Migration muss daher so weit wie möglich automatisiert erfolgen.

Nachfolgend gehe ich mal von FB4 aus, da mir kein Grund einfällt, wenn ich schon den Aufwand betreibe, warum es dann nicht gleich FB4 sein sollte.
Firebird 5 ist auch gerade released - auch das wäre eine Option, aber bisher finde ich nur Beschreibungen für die Migration von 2.5 auf 3 oder 4 und von 4 auf 5, daher gehe ich mal davon aus, dass der direkte Weg von 2.5 auf 5 (noch) nicht möglich ist.

Meine Applikation verfügt über eine Backup/Restore Funktion, die vermutlich genutzt werden könnte. Zumindest das Backup ist verwendbar und erstellt eine ganz mormale FB2.5-FBK-Datei. Ob das Restore mit FB4 funktioniert kann ich selbst ermitteln, auch eine direkte Nutzung von GBAK im Rahmen der Installation wäre möglich. Ich möchte hier nur vermeiden, viele Stunden Versuch und Irrtum mit einer von vorneherein als unmöglich erkennbaren Vorgehensweise zu verschwenden und zuerst den grundsätzlich richtigen Weg klären. Die Details bekomme ich dann wieder alleine hin :-).

Folgende Verfahren kann ich mir vorstellen:

1) Neuinstallation mit leerer Datenbank. Dann Backup / Restore
Das wäre technisch am einfachsten, falls das so wie beschrieben generell möglich ist.
Hierzu würde ich meine Applikation als Neuinstallation mit einer leeren FB4-Datenbank ausliefern, die bereits alle notwendigen Vorbereitungen (Umstellung User/Authentisierung, weitere?) enthält und grundsätzlich so für einen neuen User nutzbar wäre. Dann müsten die Anwender nur noch einmal ein Backup in der alten Software durchführen und dann in der neuen Installation die Wiederherstellung.
Frage: ist das grundsätzlich möglich oder kann man erst nach der Wiederherstellung die Umstellung auf die neue Userstruktur/Authentisierung durchführen? Ich habe auch gelesen, dass man bei der alten Authentisierung (legacy authentication) bleiben kann (https://firebirdsql.org/en/news/firebir ... tion-guide), habe das aber noch nicht so ganz verstanden. Wenn das der empfohlene Weg ist, grabe ich mch da tiefer rein und erstelle ein Migrations-Programm, das diesen Weg nutzt.

2) alles mit der vorhandenen Installation durchführen
Das würde für die Anwender nochmals das Verfahren erleichtern, da sie keine Zweitinstallation sondern nur ein Update durchführen müssten. Das wäre meine bevorzugte Lösung, aber auch die mit deutlich mehr Fehler-Möglichkeiten und evtl. so wie ich mir das denke gar nicht machbar.
Hier wäre es erforderlich, dass die Applikation vor dem Verbindungsversuch zur Datenbank erkennen kann, ob eine FB2.5 oder FB4 Datenbank vorliegt. Der Pfad zur Datenbank ist bekannt, ich müsste aber irgendwie (Check von identifizierenden Bytes in der Datei?) erkennen, ob es eine FB 2.5 Datenbank-Datei ist.
Falls das nicht möglich ist, kann ich den Dateinamen der Datenbank-Datei heranziehen und ab FB4 anders nennen. Das ist aber ein unsicheres Verfahren, da die Datei grundsätzlich einen beliebigen Namen haben kann. 99% der User nehmen zwar den Standard, aber trotzdem wäre es gut, eine Version unabhängig vom Dateinamen "sicher" erkennen zu können.

Möglicher Ablauf:
  • notwendige Tools (GBAK...) in einem neuen Ordner je Version mit installieren
  • Prüfen der FB-Version der Datenbankdatei
  • wenn FB2.5 gefunden: Backup mit GBAK aus dem FB2.5-Ordner erstellen, Restore mit dem GBAK aus dem FB4-Ordner mit neuem Dateinamen der Datenbank-Datei, damit sie einfacher als FB4 erkennbar ist (siehe dazu auch Überlegungen oben)
  • Prüfen ob das Update funktioniert hat
  • wenn ja: Applikation nutzt den FB4 embedded Client fbclient.dll mit der neuen Datenbank-Datei
  • wenn nein: Applikation nutzt den FB2.5-Client mit fembed.dll und der alten Datenbankdatei
Sind diese Überlegungen erst mal generell so machbar?
Bin ich da vielleicht auf einem völlig falschen Weg?

So, das war jetzt mal ein langer Text. Vielen Dank daher an alle, die bis hierhin durchgehalten haben und gamz großes Dankeschön für alle Tipps und Warnungen, die mich von einem vielleicht völlig falschen Weg abbringen.

Siegbert
bfuerchau
Beiträge: 490
Registriert: Mo 7. Mai 2018, 18:09
Kontaktdaten:

Eigentlich relativ simple:
a) du kannst FB2.5 und FB3/4 parallel verwenden, du musst nur die Umgebung entsprechend anpassen.
b) ohne Backup/Restore geht nichts. Hierfür wäre eine Parallelinstallation besser, da du das in einem Rutsch machen kannst.
c) wenn du aber auch gleich ein neues Datenmodell mitbringst, kommt es darauf an, wie der Upgrade funktioniert.
Machst du es mit EntityFramework o.ä., regelt das das EF ja selber, da reicht dann ein Safe/Restore.
Machst du aber einen eigenen Upgrade in dem du die alte DB Tabelle für Tabelle migrierst, ist eine parrallele Installation von 2.5 zu 3/4 besser, da du ja sowieso mit 2 DB's arbeitest.
Du musst in deiner Installtion halt nur 1 Weile 2 Firebirdserver installieren, bis alle umgestellt sind.
Ggf. gibts auch eine 1. "Migrationsversion" und alle folgenden Versionen prüfen nur, ob migriert ist. Dann kann eben zuerst die Migration laufen bevor die Betriebsversion zum Einsatz kommt.
haegar
Beiträge: 3
Registriert: Sa 17. Nov 2018, 18:28

Danke für den Tipp, ich verfolge dann diesen Weg weiter.

Interessante Erfahrung am Rande: mit der Embedded-Variante der FB4-Version (fbclient.dll + benötigte Dateien/Ordner) kann meine Applikation die unveränderte .FDB der 2.5er Version scheinbar problemlos öffnen. Ich hatte die Beschreibungen zur 4er Version eigentlich so verstanden, dass diese Version nicht rückwärts kompatibel ist. Vielleicht bezieht sich das aber nur auf "vollständige" Installationen und nicht auf die embedded-Variante.

Wie auch immer - das Risiko, dass im Betrieb dann doch irgendetwas in dieser Mischung aus 4er fbclient.dll und 2.5er Datenbank-Datei Probleme macht, muss man ja nicht eingehen. Backup/Restore ist mit wenigen Klicks erledigt :D.
Jetzt muss ich nur noch herausfinden, wie ich erkennen kann, ob ein Anwender einfach eine 2.5er Datenbankdatei per Copy&Paste in den DB-Ordner geschoben hat. Da die 4er fbclient.dll diese öffnen kann, bekommt meine Applikation das erst mal nicht mit. Aber das findet sich ...

Vielen Dank,
Siegbert
bfuerchau
Beiträge: 490
Registriert: Mo 7. Mai 2018, 18:09
Kontaktdaten:

Man kann die ODS-Version, ggf. per API, abfragen.
https://stackoverflow.com/questions/401 ... ion-in-net
vr2
Beiträge: 219
Registriert: Fr 13. Apr 2018, 00:13

ODS-Ermittlung geht auch per SQL:

Code: Alles auswählen

select mon$ods_major, mon$ods_minor from mon$database
Firebird 5: ODS 13.1
Firebird 4: ODS 13.0
Firebird 3: ODS 12.0

Grüße, Volker
Antworten