korrekter Restore - defekte Buchungen

Hier können die JVerein-Frischlinge ihre Fragen stellen.

Moderator: heiner

Antworten
ooloha
Beiträge: 8
Registriert: Sonntag 9. Oktober 2016, 03:51
Mitglieder: 300
JVerein-Version: 2.8.13
Betriebssystem: unixoid

korrekter Restore - defekte Buchungen

Beitrag von ooloha »

Stichwortliste für die Suche: Backup, Restore, java.rmi.RemoteException: unable to init iterator. statement:, File corrupted while reading record,

Hallo zusammen,

mein Datenbanstand ist defekt. Wenn ich im linken Baum das Element

* Start -> JVerein -> Buchführung -> Buchungen

aufrufe, erhalte ich

Code: Alles auswählen

java.rmi.RemoteException: unable to init iterator. statement: prep144: select BUCHUNG.* from BUCHUNG where datum >= ?  and datum <= ?  and konto = ?  and buchungsart = ?  ORDER BY umsatzid DESC {1: TIMESTAMP '2016-01-01 00:00:00.0', 2: TIMESTAMP '2016-12-31 00:00:00.0', 3: '1', 4: '1'}; nested exception is: 
	org.h2.jdbc.JdbcSQLException: Datei fehlerhaft beim Lesen des Datensatzes: "[542] stream data key:1211 pos:11 remaining:0". Mögliche Lösung: Recovery Werkzeug verwenden
File corrupted while reading record: "[542] stream data key:1211 pos:11 remaining:0". Possible solution: use the recovery tool; SQL statement:
select BUCHUNG.* from BUCHUNG where datum >= ?  and datum <= ?  and konto = ?  and buchungsart = ?  ORDER BY umsatzid DESC [90030-172]
	at de.willuhn.datasource.db.DBIteratorImpl.init(DBIteratorImpl.java:230)
	at de.willuhn.datasource.db.DBIteratorImpl.hasNext(DBIteratorImpl.java:245)
	at de.willuhn.datasource.pseudo.PseudoIterator.asList(PseudoIterator.java:68)
	at de.jost_net.JVerein.Queries.BuchungQuery.get(BuchungQuery.java:245)
	at de.jost_net.JVerein.gui.control.BuchungsControl.getBuchungsList(BuchungsControl.java:936)
	at de.jost_net.JVerein.gui.view.BuchungslisteView.bind(BuchungslisteView.java:89)
	at de.willuhn.jameica.gui.GUI$5.run(GUI.java:699)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(Unknown Source)
	at de.willuhn.jameica.gui.GUI$6.run(GUI.java:896)
	at org.eclipse.swt.widgets.Synchronizer.syncExec(Unknown Source)
	at org.eclipse.swt.widgets.Display.syncExec(Unknown Source)
	at de.willuhn.jameica.gui.GUI.startSync(GUI.java:892)
	at de.willuhn.jameica.gui.GUI.startView(GUI.java:590)
	at de.willuhn.jameica.gui.GUI.startView(GUI.java:525)
	at de.willuhn.jameica.gui.GUI.startView(GUI.java:562)
	at de.jost_net.JVerein.gui.action.BuchungsListeAction.handleAction(BuchungsListeAction.java:28)
	at de.willuhn.jameica.gui.Navigation.start(Navigation.java:385)
	at de.willuhn.jameica.gui.Navigation.access$500(Navigation.java:52)
	at de.willuhn.jameica.gui.Navigation$MyActionListener.handleEvent(Navigation.java:480)
	at org.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source)
	at org.eclipse.swt.widgets.Display.sendEvent(Unknown Source)
	at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Unknown Source)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)
	at de.willuhn.jameica.gui.GUI.loop(GUI.java:913)
	at de.willuhn.jameica.gui.GUI.init(GUI.java:324)
	at de.willuhn.jameica.system.Application.init(Application.java:148)
	at de.willuhn.jameica.system.Application.newInstance(Application.java:90)
	at de.willuhn.jameica.Main.main(Main.java:78)
Caused by: org.h2.jdbc.JdbcSQLException: Datei fehlerhaft beim Lesen des Datensatzes: "[542] stream data key:1211 pos:11 remaining:0". Mögliche Lösung: Recovery Werkzeug verwenden
File corrupted while reading record: "[542] stream data key:1211 pos:11 remaining:0". Possible solution: use the recovery tool; SQL statement:
select BUCHUNG.* from BUCHUNG where datum >= ?  and datum <= ?  and konto = ?  and buchungsart = ?  ORDER BY umsatzid DESC [90030-172]
	at org.h2.message.DbException.getJdbcSQLException(DbException.java:329)
	at org.h2.message.DbException.get(DbException.java:169)
	at org.h2.message.DbException.get(DbException.java:146)
	at org.h2.index.PageDataIndex.getPage(PageDataIndex.java:239)
	at org.h2.index.PageDataNode.getRowWithKey(PageDataNode.java:278)
	at org.h2.index.PageDataIndex.getRowWithKey(PageDataIndex.java:421)
	at org.h2.index.PageDataIndex.getRow(PageDataIndex.java:410)
	at org.h2.table.RegularTable.getRow(RegularTable.java:111)
	at org.h2.index.PageBtreeIndex.getRow(PageBtreeIndex.java:305)
	at org.h2.index.PageBtreeCursor.get(PageBtreeCursor.java:46)
	at org.h2.index.IndexCursor.get(IndexCursor.java:224)
	at org.h2.table.TableFilter.getValue(TableFilter.java:892)
	at org.h2.expression.ExpressionColumn.getValue(ExpressionColumn.java:183)
	at org.h2.expression.Comparison.getValue(Comparison.java:209)
	at org.h2.expression.ConditionAndOr.getValue(ConditionAndOr.java:87)
	at org.h2.expression.Expression.getBooleanValue(Expression.java:180)
	at org.h2.command.dml.Select.queryFlat(Select.java:520)
	at org.h2.command.dml.Select.queryWithoutCache(Select.java:625)
	at org.h2.command.dml.Query.query(Query.java:314)
	at org.h2.command.dml.Query.query(Query.java:284)
	at org.h2.command.dml.Query.query(Query.java:36)
	at org.h2.command.CommandContainer.query(CommandContainer.java:91)
	at org.h2.command.Command.executeQuery(Command.java:195)
	at org.h2.jdbc.JdbcPreparedStatement.executeQuery(JdbcPreparedStatement.java:106)
	at de.willuhn.datasource.db.DBIteratorImpl.init(DBIteratorImpl.java:217)
	... 28 more
Ich würde gern mein Backup zusammenpuzzeln. Der aktuelle

* Datenbestand mit korrekten Buchungen ist 2017-12-20, der aktuelle
* Datenbestand der Mitgliedsdatenbank und Zusatzbeträgen ist 2018-04-28

Gibt es die Chance, dass ich beim Restore die Mitgliedsdatenbank von heute behalte und die Buchungen aus dem letzten Backup einspiele?
Welche Werkzeuge (Linux Debian) erlauben mir auf der h2db SQL-Statements abzusetzen um den defekten Datenteil zu erkennen und zu überschreiben?

Danke und Gruß
Benutzeravatar
heiner
Administrator
Beiträge: 4510
Registriert: Freitag 30. Oktober 2009, 16:44
JVerein-Version: aktuelle Entwicklerversion
Betriebssystem: W10
Kontaktdaten:

Re: korrekter Restore - defekte Buchungen

Beitrag von heiner »

Hallo,

im Stacktrace wird bereits auf die Lösung hingewiesen: Mögliche Lösung: Recovery Werkzeug verwenden

Das würde ich als erstes versuchen. Für das zusammenschieben der Datenbanken aus 2 unterschiedlichen Ständen musst du tief in die Datenstruktur von JVerein eindringen. Das ist nicht mal eben so gemacht.

Heiner
PS: Denkt daran, eure Vereine unter viewforum.php?f=3 vorzustellen.
ooloha
Beiträge: 8
Registriert: Sonntag 9. Oktober 2016, 03:51
Mitglieder: 300
JVerein-Version: 2.8.13
Betriebssystem: unixoid

Re: korrekter Restore - defekte Buchungen

Beitrag von ooloha »

Ich habe die Recovery erfolgreich geschafft und mag den Weg sowie meine Schlüsselerlebnisse aufschreiben.

Das habe ich ausgeführt:

Code: Alles auswählen

mkdir tmp;
cd tmp;
wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/h2database/h2-2014-01-18.zip
unzip h2-2014-01-18.zip
cd h2/bin
cp ~/.jameica/jverein/h2db/jverein.h2.db .
java -cp h2/bin/h2-1.3.175.jar org.h2.tools.Recover #erzeugt jverein.h2.sql
java -cp h2-1.3.175.jar org.h2.tools.RunScript -user jverein -password jverein -url jdbc:h2:./jverein_recovered -script ./jverein.h2.sql #erzeugt jverein_recovered.h2.db 
cp ./jverein_recovered.h2.db ~/.jameica/jverein/h2/jverein.h2.db 
Schlüsselerlebnisse:

Es liegen mehrere Sicherungskopien der Datenbank in unterschiedlichen Pfaden. Der korrekte Pfad der defekten Datenbank im Dateisystem ist ~/.jameica/jverein/h2db/jverein.h2.db

H2-Recovery erzeugt von allen Datenbanken im Current Working Directory SQL-Dateien. H2-RunScript (org.h2.tools.RunScript) kann aus dem SQL eine neue Datenbank erzeugen, es wird nicht auf eine existierende Datenbank angewandt.

Im SQL-Interpreter der h2-db (h2.sh + Browser) wird eine JDBC-URL abgefragt. Der korrekte Pfad ist

Code: Alles auswählen

jdbc:h2:~/.jameica/jverein/h2db/jverein
und ist nicht

Code: Alles auswählen

jdbc:h2:~/.jameica/jverein/h2db/jverein.h2.db
Die letzte jdbc-URL führt auf die datenbankinterne Verwaltungsstruktur und enthält keine Anwendungsdaten. Benutzername und Passwort sind "jverein" und "jverein"
Antworten