Korrupte Datenbank wegen zweiter Instanz?

michaeln

Betreff:

Korrupte Datenbank wegen zweiter Instanz?

 ·  Gepostet: Gestern um 08:05 Uhr  ·  #187667
Hallo,

wir arbeiten im Vereine schon seit über 10 Jahren erfolgreich mit JVerein, das ja auf Jameica und Hibiscus basiert.
An dieser Stelle ein großes Kompliment und herzliches Dankeschön an die Entwickler.

Jetzt hatten wir wir ersten Mal ein richtiges Problem. Die Datenbank ließ sich beim Start durch Hibiscus nicht mehr öffnen, sondern nur noch ein älteres Backup. Leider sind dadurch umfangreiche Arbeiten und und Daten zu Abbuchungen verloren.
Daher die erste Frage: Gibt es Wege die Datenbank zu reparieren / wiederherzustellen?

Ich habe mir die Log-Datei angesehen. Es sieht so aus, als ob unsere neue Vereinskassiererin eine zweite Instanz gestartet hat und es dadurch zum Problem kam.
Kann das sein und/oder ist es möglich, Sicherheitsmechanismen einzubauen, mit denen der Start eine zweiten Jameica-Instanz überhaupt nicht möglich ist oder bei Datenbankzugriff der zweiten Instanz dann wenigstens eine Fehlermeldung kommt und zum Schließen dieser auffordert, bevor es zu Schädigung kommt?

Installiert war zu dem Zeitpunkt Jameica 2.12.0, Hibiscus 2.12.2 und JVerein 4.1.4

Vielen Dank im Voraus!

Viele Grüße

Michael

hibiscus

Betreff:

Re: Korrupte Datenbank wegen zweiter Instanz?

 ·  Gepostet: Gestern um 09:20 Uhr  ·  #187674
Es gibt ein Recover-Tool. Die Benutzung ist im Wiki unter https://www.willuhn.de/wiki/do…lexception beschrieben. Ich weiss aber nicht, was das Tool genau macht. Mir ist jedenfalls kein Fall bekannt, bei dem sich eine defekte Datenbank damit tatsächlich reparieren liess. Das Sicherste ist nach wie vor das Einspielen eines Backups von einem Zeitpunkt, an dem der Fehler noch nicht auftrat.

Ein zweiter Start kann tatsächlich zu einem Datenbank-Defekt führen. Genau das wird beim Start aber auch bereits geprüft. Da wird ein Warnhinweis angezeigt, dass bereits eine Instanz läuft. Die Kassiererin muss den Start trotz dieser Sicherheitsabfrage fortgesetzt haben.

michaeln

Betreff:

Re: Korrupte Datenbank wegen zweiter Instanz?

 ·  Gepostet: Gestern um 09:52 Uhr  ·  #187678
Vielen Dank für die schnelle Rückmeldung. Ich werde das Recovery-Tool ausprobieren.

Damit das nicht mehr vorkommt, habe ich die Start-Batch-Datei geändert, damit dürfte es noch eine weitere Sicherheit geben:
Code

@echo off

tasklist |find /i "javaw.exe"
if %errorlevel%==0 (
REM echo javaw.exe >> javaw.exe.log
goto Weiter
)

echo "JVerein wird gestartet, es laeuft keine andere Java Anwendung"
REM pause

REM tasklist >>  log-prozesse.log
"C:\Users\michael\Downloads\jameica-win64-2.12.0\jameica\jameica-win64.exe" -f "C:\Users\michael\Downloads\jameica-win64-2.12.0\jameica-daten"

goto END

:WEITER

echo "Der Start wird abgebrochen da schon eine Java-Anwendung laeuft"
pause

:END

infoman

Betreff:

Re: Korrupte Datenbank wegen zweiter Instanz?

 ·  Gepostet: Gestern um 11:12 Uhr  ·  #187682

michaeln

Betreff:

Re: Korrupte Datenbank wegen zweiter Instanz?

 ·  Gepostet: Gestern um 13:11 Uhr  ·  #187686
Zitat geschrieben von infoman

Zitat geschrieben von michaeln
... und JVerein 4.1.4 ...

einige bugfix durchgeführten w. in letzter Zeit: https://github.com/openjverein/jverein/releases


... natürlich wurde jetzt alles auf den aktuellen Stand gebracht :)

michaeln

Betreff:

Re: Korrupte Datenbank wegen zweiter Instanz?

 ·  Gepostet: Gestern um 13:22 Uhr  ·  #187687
Ich habe noch was gefunden:

In der Konfig-Datei „de.willuhn.jameica.hbci.rmi.HBCIDBService.properties“, die ich wegen dem Recovery öffnete, waren 2 Einträge drin:
database.driver.h2.encryption.algorithm=AES
und noch einer mit dem verschlüsselten Paßwort.

In den funktionierenden Backups fehlt dieser Eintrag. Wie ich ja schon gesehen habe, wird AES ja gar nicht mehr verwendet.
Daher habe ich mal zum Test diese Zeile entfernt ... und siehe da ... der aktuelle Stand ist wieder da🤩.

Daher ist jetzt die Frage: Warum hat Jameica oder Hibiscus diesen Eintrag hinzugefügt?
Händisch hat ja niemend was gemacht. Daher gehe ich von einem Bug aus.

Viele Grüße

Michael

hibiscus

Betreff:

Re: Korrupte Datenbank wegen zweiter Instanz?

 ·  Gepostet: Gestern um 14:19 Uhr  ·  #187688
Zitat geschrieben von michaeln

In den funktionierenden Backups fehlt dieser Eintrag. Wie ich ja schon gesehen habe, wird AES ja gar nicht mehr verwendet.
Daher habe ich mal zum Test diese Zeile entfernt ... und siehe da ... der aktuelle Stand ist wieder da🤩.


Im Gegenteil: Bei Neuinstallationen kommt seit einiger Zeit AES zum Einsatz. Also immer dann, wenn noch keine Hibiscus-Datenbank existiert und sie neu angelegt wird.

Der Parameter

Code
database.driver.h2.encryption.algorithm=AES


wird nur genau dann zu diese Config-Datei hinzugefügt, wenn Hibiscus in Jameica vorher noch nicht existiert hat und daher die Installation ausgeführt wird (in dem Zusammenhang wird auch die Datenbank neu erstellt). Dann ist der Parameter explizit gesetzt und wird dann auch so verwendet.

Zur Wahrung der Abwärtskompatibilität ist der Default-Wert des Parameters aber weiterhin "XTEA". Dieser Wert gilt auch, wenn der Parameter in der Config-Datei nicht existiert. Das ist notwendig, damit existierende Datenbank weiterhin geöffnet werden können.

Der Wert "AES" kann bei euch nur dann in der Config-Datei geladen werden, wenn das Plugin "hibiscus" zwar vorhanden, im Benutzerordner aber keinerlei Informationen dazu vorlagen, wodurch Jameica dann von einer Neuinstallation ausging. Wie das genau bei euch passiert ist, kann ich leider nicht sagen. Es ist aber kein Bug sondern das gewollte Verhalten. Irgendwie wurde die Anwendung da mal mit dem Plugin aber ohne entsprechende Nutzerdaten gestartet.

michaeln

Betreff:

Re: Korrupte Datenbank wegen zweiter Instanz?

 ·  Gepostet: Heute um 07:11 Uhr  ·  #187691
Ich habe mir nochmals die Log-Datei angeschaut.

Als die zweite Instanz gestartet wurde, war zuerst XTEA drin, wie beim normalen Start auch.
Dann konnte nicht auf die Datenbank zugegriffen werden und es wurde auf AES umgeschwenkt und probiert.
Und da dann auch den Eintrag database.driver.h2.encryption.algorithm=AES gesetzt?

Code
[Sat Aug 15 14:45:27 CEST 2026][INFO][main][de.willuhn.jameica.hbci.HBCI.init] starting init process for hibiscus
[Sat Aug 15 14:45:28 CEST 2026][INFO][main][de.willuhn.jameica.hbci.server.HBCIDBServiceImpl.<init>] loading database driver: de.willuhn.jameica.hbci.server.DBSupportH2Impl
[Sat Aug 15 14:45:28 CEST 2026][INFO][main][de.willuhn.jameica.hbci.server.DBSupportH2Impl.<init>] switching dbservice to uppercase
[Sat Aug 15 14:45:28 CEST 2026][INFO][main][de.willuhn.jameica.hbci.server.DBSupportH2Impl.<init>] h2 version: 1.4.199
[Sat Aug 15 14:45:28 CEST 2026][INFO][main][de.willuhn.datasource.db.DBServiceImpl.start] starting db service
[Sat Aug 15 14:45:28 CEST 2026][INFO][main][de.willuhn.jameica.hbci.server.HBCIDBServiceImpl.checkConsistency] determine current database version
[Sat Aug 15 14:45:28 CEST 2026][INFO][main][de.willuhn.datasource.db.DBServiceImpl.createConnection] creating new connection
[Sat Aug 15 14:45:28 CEST 2026][INFO][main][de.willuhn.jameica.hbci.server.DBSupportH2Impl.getJdbcUrl] database encryption: XTEA
[Sat Aug 15 14:45:28 CEST 2026][INFO][main][de.willuhn.jameica.hbci.server.DBSupportH2Impl.getJdbcUrl] jdbc url: jdbc:h2:C:\Users\UserInstall\Documents\Schuetzengilde\JVerein\jameica-daten\hibiscus/h2db/hibiscus;CIPHER=XTEA
[Sat Aug 15 14:45:28 CEST 2026][INFO][main][de.willuhn.util.Base64.<clinit>] using base64 encoder/decoder: JavaEncoder
[Sat Aug 15 14:45:28 CEST 2026][WARN][main][de.willuhn.jameica.hbci.server.HBCIDBServiceImpl.checkConsistency] unable to determine database version - database probably empty, recreating
[Sat Aug 15 14:45:28 CEST 2026][INFO][main][de.willuhn.util.I18N.<init>] loading resource bundle lang/hibiscus_messages for locale de_DE
[Sat Aug 15 14:45:28 CEST 2026][WARN][pool-1-thread-1][de.willuhn.jameica.services.BackupService$Consumer.handleMessage] detected error: java.rmi.RemoteException: connection to database.jdbc:h2:C:\Users\UserInstall\Documents\Schuetzengilde\JVerein\jameica-daten\hibiscus/h2db/hibiscus;CIPHER=XTEA failed; nested exception is: 
  org.h2.jdbc.JdbcSQLNonTransientException: Eingabe/Ausgabe: "java.io.IOException: Der Prozess kann nicht auf die Datei zugreifen, da ein anderer Prozess einen Teil der Datei gesperrt hat"; "C:/Users/UserInstall/Documents/Schuetzengilde/JVerein/jameica-daten/hibiscus/h2db/hibiscus.h2.db"
IO Exception: "java.io.IOException: Der Prozess kann nicht auf die Datei zugreifen, da ein anderer Prozess einen Teil der Datei gesperrt hat"; "C:/Users/UserInstall/Documents/Schuetzengilde/JVerein/jameica-daten/hibiscus/h2db/hibiscus.h2.db" [90031-199]
[Sat Aug 15 14:45:28 CEST 2026][WARN][pool-1-thread-1][de.willuhn.jameica.services.BackupService$Consumer.handleMessage] detected error: java.rmi.RemoteException: connection to database.jdbc:h2:C:\Users\UserInstall\Documents\Schuetzengilde\JVerein\jameica-daten\hibiscus/h2db/hibiscus;CIPHER=XTEA failed; nested exception is: 
  org.h2.jdbc.JdbcSQLNonTransientException: Eingabe/Ausgabe: "java.io.IOException: Der Prozess kann nicht auf die Datei zugreifen, da ein anderer Prozess einen Teil der Datei gesperrt hat"; "C:/Users/UserInstall/Documents/Schuetzengilde/JVerein/jameica-daten/hibiscus/h2db/hibiscus.h2.db"
IO Exception: "java.io.IOException: Der Prozess kann nicht auf die Datei zugreifen, da ein anderer Prozess einen Teil der Datei gesperrt hat"; "C:/Users/UserInstall/Documents/Schuetzengilde/JVerein/jameica-daten/hibiscus/h2db/hibiscus.h2.db" [90031-199]
[Sat Aug 15 14:45:28 CEST 2026][INFO][main][de.willuhn.jameica.gui.SplashScreen$3.run]  Installiere Hibiscus ...
[Sat Aug 15 14:45:28 CEST 2026][INFO][main][de.willuhn.datasource.db.DBServiceImpl.createConnection] creating new connection
[Sat Aug 15 14:45:28 CEST 2026][INFO][main][de.willuhn.jameica.hbci.server.DBSupportH2Impl.getJdbcUrl] database encryption: AES
[Sat Aug 15 14:45:28 CEST 2026][INFO][main][de.willuhn.jameica.hbci.server.DBSupportH2Impl.getJdbcUrl] jdbc url: jdbc:h2:C:\Users\UserInstall\Documents\Schuetzengilde\JVerein\jameica-daten\hibiscus/h2db/hibiscus;CIPHER=AES
[Sat Aug 15 14:45:28 CEST 2026][WARN][pool-1-thread-1][de.willuhn.jameica.services.BackupService$Consumer.handleMessage] detected error: java.rmi.RemoteException: connection to database.jdbc:h2:C:\Users\UserInstall\Documents\Schuetzengilde\JVerein\jameica-daten\hibiscus/h2db/hibiscus;CIPHER=AES failed; nested exception is: 
  org.h2.jdbc.JdbcSQLNonTransientException: Eingabe/Ausgabe: "java.io.IOException: Der Prozess kann nicht auf die Datei zugreifen, da ein anderer Prozess einen Teil der Datei gesperrt hat"; "C:/Users/UserInstall/Documents/Schuetzengilde/JVerein/jameica-daten/hibiscus/h2db/hibiscus.h2.db"
IO Exception: "java.io.IOException: Der Prozess kann nicht auf die Datei zugreifen, da ein anderer Prozess einen Teil der Datei gesperrt hat"; "C:/Users/UserInstall/Documents/Schuetzengilde/JVerein/jameica-daten/hibiscus/h2db/hibiscus.h2.db" [90031-199]
[Sat Aug 15 14:45:28 CEST 2026][ERROR][main][de.willuhn.jameica.hbci.server.HBCIDBServiceImpl.checkConsistency] unable to recreate database
java.rmi.RemoteException: connection to database.jdbc:h2:C:\Users\UserInstall\Documents\Schuetzengilde\JVerein\jameica-daten\hibiscus/h2db/hibiscus;CIPHER=AES failed; nested exception is: 
  org.h2.jdbc.JdbcSQLNonTransientException: Eingabe/Ausgabe: "java.io.IOException: Der Prozess kann nicht auf die Datei zugreifen, da ein anderer Prozess einen Teil der Datei gesperrt hat"; "C:/Users/UserInstall/Documents/Schuetzengilde/JVerein/jameica-daten/hibiscus/h2db/hibiscus.h2.db"
IO Exception: "java.io.IOException: Der Prozess kann nicht auf die Datei zugreifen, da ein anderer Prozess einen Teil der Datei gesperrt hat"; "C:/Users/UserInstall/Documents/Schuetzengilde/JVerein/jameica-daten/hibiscus/h2db/hibiscus.h2.db" [90031-199]
  at de.willuhn.datasource.db.DBServiceImpl.createConnection(DBServiceImpl.java:181)
  at de.willuhn.datasource.db.DBServiceImpl.getConnection(DBServiceImpl.java:124)
  at de.willuhn.jameica.hbci.server.HBCIDBServiceImpl.getConnection(HBCIDBServiceImpl.java:218)
  at de.willuhn.jameica.hbci.server.HBCIDBServiceImpl.install(HBCIDBServiceImpl.java:350)
  at de.willuhn.jameica.hbci.server.HBCIDBServiceImpl.checkConsistency(HBCIDBServiceImpl.java:156)

hibiscus

Betreff:

Re: Korrupte Datenbank wegen zweiter Instanz?

 ·  Gepostet: Heute um 07:23 Uhr  ·  #187692
Ah! Das erklärt es. Wenn die Verbindung zur Datenbank fehlschlägt, startet als Fallback die Setup-Routine, die fehlende Tabellen automatisch erstellt. Hierbei wurde in der Tat fälschlicherweise auch auf AES umgestellt. Habe das jetzt so geändert, dass die Umstellung im Fallback nicht mehr passiert.

infoman

Betreff:

Re: Korrupte Datenbank wegen zweiter Instanz?

 ·  Gepostet: Heute um 08:32 Uhr  ·  #187693
@michaeln
Zitat
... natürlich wurde jetzt alles auf den aktuellen Stand gebracht
... wäre es nicht sinnvoller sich auch von XTEA zu verabschieden und das neue, modernere AES zu verwenden?

hibiscus

Betreff:

Re: Korrupte Datenbank wegen zweiter Instanz?

 ·  Gepostet: Heute um 08:34 Uhr  ·  #187694
Das geht leider nur über einen manuellen Export und Neu-Import aller Daten. Eine integrierte automatische Migration gibt es in Hibiscus nicht.

michaeln

Betreff:

Re: Korrupte Datenbank wegen zweiter Instanz?

 ·  Gepostet: Heute um 12:28 Uhr  ·  #187701
Zitat geschrieben von hibiscus

Ah! Das erklärt es. Wenn die Verbindung zur Datenbank fehlschlägt, startet als Fallback die Setup-Routine, die fehlende Tabellen automatisch erstellt. Hierbei wurde in der Tat fälschlicherweise auch auf AES umgestellt. Habe das jetzt so geändert, dass die Umstellung im Fallback nicht mehr passiert.


Danke!

Viele Grüße

Michael