Seite 2 von 13

Fehler beim Initialisieren der Datenbank - Lösung mit manuellem Datenbankupgrade

Verfasst: Dienstag 26. Februar 2019, 00:28
von DIG
Mein Ausgangssituation war die:
  • Update auf Jameica>=2.8.2
  • JVerein-H2-Datenbank dabei so in Mitleidenschaft gezogen dass sie sich mit h2-1.4.197 nicht öffnen lies
  • daher H2-Downgrade auf 1.4.196
Mit dieser Konfiguration habe ich nun monatelang gearbeitet und zweimal einen Datenbankfehler gehabt, der eine Rücksicherung erforderlich machte.

Nach den Beiträgen hier und einigen Versuchen meinerseits dazu habe ich nun folgendes gemacht:
  1. zuerst natürlich mein Datenverzeichnis gesichert und dann den Ordner C:/jameica-daten/jverein/h2db in C:/jameica-daten/jverein/h2db.bak umbenannt
  2. Die JVerein-Datenbank mit h2-1.4.196 als Script gesichert
    java -cp h2-1.4.196.jar org.h2.tools.Script -url jdbc:h2:C:/jameica-daten/jverein/h2db.bak/jverein -user jverein -password jverein -script C:/temp/out.sql
  3. Den Ordner C:/jameica-daten/jverein/h2db neu anlegen
  4. Die JVerein-Datenbank aus dem generierten Script neu erzeugt, ebenfalls wieder mit h2-1.4.196
    java -cp h2-1.4.196.jar org.h2.tools.RunScript -url jdbc:h2:C:/jameica-daten/jverein/h2db/jverein -user jverein -password jverein -script C:/temp/out.sql
  5. Wenn alles läuft kann dann der Ordner C:/jameica-daten/jverein/h2db.bak gelöscht werden
Anschließend habe ich in meiner aktuellen Jameica-Installation die H2-Bibliothek wieder in h2-1.4.197 ändern können:
Jameica+Hibiscus+JVerein laufen einwandfrei, keine Auffälligkeiten oder gar Fehler habe ich seit dem gehabt und das trotz intensiver Nutzung mit Abrechnungslauf, Spendenquittungserstellung usw.

Für mich ist das die grundlegende Lösung des Datenbank-Problems: ich habe so eine fehlerfreie Datenbankdatei bekommen und werde wieder neue Jameica- und/oder H2-Versionen problemlos installieren können.

Re: Fehler beim Initialisieren der Datenbank

Verfasst: Dienstag 26. Februar 2019, 12:35
von ManuelR
Mit einem Einspielen des Backups war das Problem behoben. Allerdings habe ich dadurch recht viele Datensätze verloren.. Gibt es eine Möglichkeit diese aus einem "kaputten Backup" auszulesen?

Re: Fehler beim Initialisieren der Datenbank

Verfasst: Dienstag 26. Februar 2019, 14:50
von DIG
ManuelR hat geschrieben: Dienstag 26. Februar 2019, 12:35 Mit einem Einspielen des Backups war das Problem behoben. Allerdings habe ich dadurch recht viele Datensätze verloren.. Gibt es eine Möglichkeit diese aus einem "kaputten Backup" auszulesen?
Hallo Manuel,

hast Du das schon probiert?

Code: Alles auswählen

java -cp /pfad/zu/jameica/lib/h2/h2-*.jar org.h2.tools.Recover -url jdbc:h2:/pfad/zur/defekten/jverein/h2db/jverein -user jverein -password jverein

Re: Fehler beim Initialisieren der Datenbank

Verfasst: Mittwoch 3. April 2019, 11:24
von ManuelR
Ich hatte mich, kurz bevor ich diesen Post gelesen habe, dazu entschieden alles noch mal händisch einzugeben...

Das nächste mal teste ich das.

Re: Fehler beim Initialisieren der Datenbank - Lösung mit manuellem Datenbankupgrade

Verfasst: Sonntag 7. April 2019, 09:19
von vseibt
Der Vorschlag von
DIG hat geschrieben: Dienstag 26. Februar 2019, 00:28Lösusng mit manuellem Datenbankupgrade
scheint mir die beste Lösung. Danach läuft bisher alles ohne Probleme.

Re: Fehler beim Initialisieren der Datenbank

Verfasst: Dienstag 9. April 2019, 16:57
von HJB
Hallo,
ich verfolge seit einiger Zeit diesen Fehler-Chat und der Downgrade auf h2-1.4.196 hat mir schon geholfen, unseren jährlichen Beitragseinzugslauf erfolgreich durchzuführen. Allerdings war jetzt der Abrechnungslauf für einen Nachzügler erneut fehlerhaft, sodass ich gerne die Lösung mit dem manuellen Datenbankupgrade ausprobieren würde. Bis jetzt ist mir das nicht gelungen, da org.h2.tools.*-Objekte offenbar nicht auf meinem Rechner vorhanden sind. ich bin noch Frischling in Sachen H2-Datenbank, etc., deshalb hier meine Frage, was ich - neben Java - installieren muss, damit ich dieses manuelle Datenbankupgrade ausführen kann ?
Im voraus schon mal vielen Dank für die Unterstützung !

Viele Grüße
Hans-Jürgen

Re: Fehler beim Initialisieren der Datenbank

Verfasst: Dienstag 9. April 2019, 20:05
von DIG
HJB hat geschrieben: Dienstag 9. April 2019, 16:57 meine Frage, was ich - neben Java - installieren muss, damit ich dieses manuelle Datenbankupgrade ausführen kann ?
Du brauchst nur java und Jameica (+JVerein).
Dein Problem dürfte wahrscheinlich sein dass die h2-Bibliothek nicht gefunden wurde weil sie nicht in den von java durchsuchten Ordnern liegt.

Entweder wechselst Du ins h2-Verzeichnis und führst dann java aus, z.B.

Code: Alles auswählen

cd C:\jameica\lib\h2
java -cp h2-1.4.196.jar org.h2.tools.Script -url jdbc:h2:C:/jameica-daten/jverein/h2db.bak/jverein -user jverein -password jverein -script C:/temp/out.sql
oder Du gibst dem java-Aufruf den vollen Pfad zur h2-Bibliothek mit, z.B.

Code: Alles auswählen

java -cp C:/jameica/lib/h2/h2-1.4.196.jar org.h2.tools.Script -url jdbc:h2:C:/jameica-daten/jverein/h2db.bak/jverein -user jverein -password jverein -script C:/temp/out.sql

Re: Fehler beim Initialisieren der Datenbank

Verfasst: Mittwoch 10. April 2019, 09:54
von hibiscus
Hat eigentlich mal jemand das aktuelle Nightly-Build von Jameica ausprobiert? Es gibt nämlich inzwischen eine neue H2-Version 1.4-199, die auch im aktuellen Nightly-Build enthalten ist. Eventuell ist damit der manuelle Migrationsprozess oder das Downgrade auf 1.4-196 ja gar nicht mehr nötig.

Re: Fehler beim Initialisieren der Datenbank

Verfasst: Mittwoch 10. April 2019, 21:27
von HJB
DIG hat geschrieben: Dienstag 9. April 2019, 20:05
HJB hat geschrieben: Dienstag 9. April 2019, 16:57 meine Frage, was ich - neben Java - installieren muss, damit ich dieses manuelle Datenbankupgrade ausführen kann ?
Du brauchst nur java und Jameica (+JVerein).
Dein Problem dürfte wahrscheinlich sein dass die h2-Bibliothek nicht gefunden wurde weil sie nicht in den von java durchsuchten Ordnern liegt.

Entweder wechselst Du ins h2-Verzeichnis und führst dann java aus, z.B.

Code: Alles auswählen

cd C:\jameica\lib\h2
java -cp h2-1.4.196.jar org.h2.tools.Script -url jdbc:h2:C:/jameica-daten/jverein/h2db.bak/jverein -user jverein -password jverein -script C:/temp/out.sql
oder Du gibst dem java-Aufruf den vollen Pfad zur h2-Bibliothek mit, z.B.

Code: Alles auswählen

java -cp C:/jameica/lib/h2/h2-1.4.196.jar org.h2.tools.Script -url jdbc:h2:C:/jameica-daten/jverein/h2db.bak/jverein -user jverein -password jverein -script C:/temp/out.sql
Geschafft !
Nach dem Ersetzen eines Teils der Slashes durch Backslashes hat die Transformation der H2-Datenbank geklappt. Allerdings hatte ich dann noch etliche Fehlversuche beim Versuch, einen Nachzügler abzurechnen. Erst nachdem ich sowohl "jameica" als auch "hibiscus" auf die Version 2.9.0-nightly build upgedatet hatte, war der Abrechnungslauf erfolgreich gelaufen.
Nochmals vielen Dank für die Hilfe !

Viele Grüße
Hans-Jürgen

Re: Fehler beim Initialisieren der Datenbank

Verfasst: Dienstag 23. April 2019, 18:51
von tectumopticum
Moinsen,
hibiscus hat geschrieben: Mittwoch 10. April 2019, 09:54 Hat eigentlich mal jemand das aktuelle Nightly-Build von Jameica ausprobiert? Es gibt nämlich inzwischen eine neue H2-Version 1.4-199, die auch im aktuellen Nightly-Build enthalten ist. Eventuell ist damit der manuelle Migrationsprozess oder das Downgrade auf 1.4-196 ja gar nicht mehr nötig.
leider nicht erfolgreich - auch beim Start der nightly-Version kommt anschließend ein Fehler (log-Auszug s.u.): "jverein (Fehler beim Initialisieren der Datenbank).

[Tue Apr 23 18:36:28 CEST 2019][ERROR][main][de.jost_net.JVerein.Einstellungen.<clinit>] Fehler
java.rmi.RemoteException: error while getting database service; nested exception is:
de.willuhn.util.ApplicationException: Der Service "database" wurde nicht gefunden
at de.jost_net.JVerein.Einstellungen.getDBService(Einstellungen.java:173)
at de.jost_net.JVerein.Einstellungen.<clinit>(Einstellungen.java:100)
at de.jost_net.JVerein.gui.boxes.MitgliedNextBGruppeChecker.<init>(MitgliedNextBGruppeChecker.java:58)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)

[...]