Hallo! Heute hat mein CCU-Historian, der in einem docker compose container läuft, plötzlich aufgehört, Daten zu speichern. Im Webinterface war folgende Meldung:
File corrupted while reading record: "/database/history.mv.db". Possible solution: use the recovery tool [90030-214]
Ich wollte ein Datenbankexport von vor ein paar Tagen, als es noch defintiv funktioniert hat, importieren. Das gab mir: FEHLER: Ungültige Importdatei (Zeile 1).
Ich weiß leider nicht, wie ich das recovery-tool innerhalb des Docker Containers ausführen kann
Ich kann auch plötzlich nicht mehr auf die Datenbank per Online-Zugriff zugreifen. Der Port gibt mir einen Timeout.
ccu-historian.config devices.historianAddress='10.0.10.3' //IP webServer.historianAddress='10.0.10.3' database.password='******************************' //Datenbank Passwort logSystem.fileLevel=Level.INFO //Log-Level database.webAllowOthers=true //Zugriff auf die Datenbank von außen database.webEnable=true //Zugriff auf die Datenbank database.dir='/database' //Verzeichnis der Datenbank devices.device1.username='Alex' //CCU-Username devices.device1.password='****************************' //CCU-Passwort devices.device1.address='10.0.20.10' //IP der CCU devices.device1.type=CCU3 //CCU-Type historian.defaultDisabled=true //Neue Einträge standardmäßig nicht loggen historian.defaultHidden=true //Neue EInträge standardmäßig verstecken logSystem.fileName='/database/logs/ccu-historian-%g.log' //Speicherort der Logs database.pgEnable=true //PostgreSQL Zugriff database.pgPort=5435 //PostgreSQL-Port database.pgAllowOthers=true //PostgreSQL-Zugriff erlauben database.backup='/database/backups/db_%Y-%M-%D.zip' //Autopmatische Backups jeden Tag um Mitternacht devices.device1.watchdogProgram='Überwachung Historian' //Warnung auf der CCU wenn Historian ausfällt devices.device1.watchdogCycle=600000 //Rufe Programm alle 10 Minuten auf historian.bufferTime=60*1000 //Einträge nur alle 1 Minuten in DB schreiben webServer.showLastValue=true //Die aktuellen Werte der Datenpunkte inkl. Zeitstempel zusätzlich in der Datenpunktliste anzeigen
Additional context
Error log:
2024-11-24 10:22:41|INFO |Connecting to database 2024-11-24 10:22:41|SEVERE |Error updating data point storage 2024-11-24 10:22:41|SEVERE |Exception: File corrupted while reading record: "/database/history.mv.db". Possible solution: use the recovery tool [90030-214] 2024-11-24 10:22:41|SEVERE |Detail: org.h2.jdbc.JdbcSQLNonTransientConnectionException: File corrupted while reading record: "/database/history.mv.db". Possible solution: use the recovery tool [90030-214] at org.h2.message.DbException.getJdbcSQLException(DbException.java:678) at org.h2.message.DbException.getJdbcSQLException(DbException.java:477) at org.h2.message.DbException.get(DbException.java:212) at org.h2.mvstore.db.Store.convertMVStoreException(Store.java:166) at org.h2.mvstore.db.Store.<init>(Store.java:145) at org.h2.engine.Database.<init>(Database.java:324) at org.h2.engine.Engine.openSession(Engine.java:92) at org.h2.engine.Engine.openSession(Engine.java:222) at org.h2.engine.Engine.createSession(Engine.java:201) at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:338) at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:122) at org.h2.Driver.connect(Driver.java:59) at mdz.ccuhistorian.Database.connect(Database.groovy:71) at mdz.ccuhistorian.Database.getDataPoint(Database.groovy:353) at mdz.ccuhistorian.ExtendedStorage.getDataPoint(ExtendedStorage.groovy:64) at mdz.ccuhistorian.eventprocessing.DataPointStorageUpdater.consume(DataPointStorageUpdater.groovy:45) at mdz.ccuhistorian.eventprocessing.DataPointStorageUpdater.consume(DataPointStorageUpdater.groovy) at mdz.eventprocessing.BasicProducer.lambda$0(BasicProducer.java:36) at mdz.Exceptions.catchToLog(Exceptions.java:74) at mdz.eventprocessing.BasicProducer.safeProduce(BasicProducer.java:36) at mdz.eventprocessing.BasicProducer.produce(BasicProducer.java:42) at mdz.eventprocessing.Buffer.purge(Buffer.java:74) at mdz.ccuhistorian.Historian$_closure2.doCall(Historian.groovy:91) at mdz.ccuhistorian.Historian$_closure2.doCall(Historian.groovy) at mdz.ccuhistorian.ExtendedStorage$_fireOnRead_closure1.doCall(ExtendedStorage.groovy:163) at mdz.ccuhistorian.ExtendedStorage.fireOnRead(ExtendedStorage.groovy:163) at mdz.ccuhistorian.ExtendedStorage.getDataPointsOfInterface(ExtendedStorage.groovy:53) at mdz.ccuhistorian.Historian.update(Historian.groovy:152) at mdz.ccuhistorian.Historian$_run_closure3$_closure12.doCall(Historian.groovy:110) at mdz.ccuhistorian.Historian$_run_closure3$_closure12.doCall(Historian.groovy) at mdz.Exceptions.lambda$0(Exceptions.java:84) at mdz.Exceptions.catchToLog(Exceptions.java:74) at mdz.Exceptions.catchToLog(Exceptions.java:84) at mdz.ccuhistorian.Historian$_run_closure3.doCall(Historian.groovy:106) at mdz.ccuhistorian.Historian.run(Historian.groovy:105) Caused by: org.h2.mvstore.MVStoreException: Double mark: 1b32/1ca [2-4a, 72-5bc, 5ca-88d, 959-ccf, fc4-1606, 1ce9-3958, 3b0a-43c0, 4719-] [2.1.214/6] at org.h2.mvstore.DataUtils.newMVStoreException(DataUtils.java:1004) at org.h2.mvstore.FreeSpaceBitSet.markUsed(FreeSpaceBitSet.java:184) at org.h2.mvstore.FileStore.markUsed(FileStore.java:344) at org.h2.mvstore.MVStore.readStoreHeader(MVStore.java:1052) at org.h2.mvstore.MVStore.<init>(MVStore.java:463) at org.h2.mvstore.MVStore$Builder.open(MVStore.java:4082) at org.h2.mvstore.db.Store.<init>(Store.java:136)
Describe the bug
Hallo! Heute hat mein CCU-Historian, der in einem docker compose container läuft, plötzlich aufgehört, Daten zu speichern. Im Webinterface war folgende Meldung:
File corrupted while reading record: "/database/history.mv.db". Possible solution: use the recovery tool [90030-214]
Ich wollte ein Datenbankexport von vor ein paar Tagen, als es noch defintiv funktioniert hat, importieren. Das gab mir:
FEHLER: Ungültige Importdatei (Zeile 1)
.Ich weiß leider nicht, wie ich das recovery-tool innerhalb des Docker Containers ausführen kann Ich kann auch plötzlich nicht mehr auf die Datenbank per Online-Zugriff zugreifen. Der Port gibt mir einen Timeout.
Ich wäre sehr dankbar für hilfe :)
Docker compose file
ccu-historian.config devices.historianAddress='10.0.10.3' //IP webServer.historianAddress='10.0.10.3' database.password='******************************' //Datenbank Passwort logSystem.fileLevel=Level.INFO //Log-Level database.webAllowOthers=true //Zugriff auf die Datenbank von außen database.webEnable=true //Zugriff auf die Datenbank database.dir='/database' //Verzeichnis der Datenbank devices.device1.username='Alex' //CCU-Username devices.device1.password='****************************' //CCU-Passwort devices.device1.address='10.0.20.10' //IP der CCU devices.device1.type=CCU3 //CCU-Type historian.defaultDisabled=true //Neue Einträge standardmäßig nicht loggen historian.defaultHidden=true //Neue EInträge standardmäßig verstecken logSystem.fileName='/database/logs/ccu-historian-%g.log' //Speicherort der Logs database.pgEnable=true //PostgreSQL Zugriff database.pgPort=5435 //PostgreSQL-Port database.pgAllowOthers=true //PostgreSQL-Zugriff erlauben database.backup='/database/backups/db_%Y-%M-%D.zip' //Autopmatische Backups jeden Tag um Mitternacht devices.device1.watchdogProgram='Überwachung Historian' //Warnung auf der CCU wenn Historian ausfällt devices.device1.watchdogCycle=600000 //Rufe Programm alle 10 Minuten auf historian.bufferTime=60*1000 //Einträge nur alle 1 Minuten in DB schreiben webServer.showLastValue=true //Die aktuellen Werte der Datenpunkte inkl. Zeitstempel zusätzlich in der Datenpunktliste anzeigen
Additional context
Error log:
2024-11-24 10:22:41|INFO |Connecting to database 2024-11-24 10:22:41|SEVERE |Error updating data point storage 2024-11-24 10:22:41|SEVERE |Exception: File corrupted while reading record: "/database/history.mv.db". Possible solution: use the recovery tool [90030-214] 2024-11-24 10:22:41|SEVERE |Detail: org.h2.jdbc.JdbcSQLNonTransientConnectionException: File corrupted while reading record: "/database/history.mv.db". Possible solution: use the recovery tool [90030-214] at org.h2.message.DbException.getJdbcSQLException(DbException.java:678) at org.h2.message.DbException.getJdbcSQLException(DbException.java:477) at org.h2.message.DbException.get(DbException.java:212) at org.h2.mvstore.db.Store.convertMVStoreException(Store.java:166) at org.h2.mvstore.db.Store.<init>(Store.java:145) at org.h2.engine.Database.<init>(Database.java:324) at org.h2.engine.Engine.openSession(Engine.java:92) at org.h2.engine.Engine.openSession(Engine.java:222) at org.h2.engine.Engine.createSession(Engine.java:201) at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:338) at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:122) at org.h2.Driver.connect(Driver.java:59) at mdz.ccuhistorian.Database.connect(Database.groovy:71) at mdz.ccuhistorian.Database.getDataPoint(Database.groovy:353) at mdz.ccuhistorian.ExtendedStorage.getDataPoint(ExtendedStorage.groovy:64) at mdz.ccuhistorian.eventprocessing.DataPointStorageUpdater.consume(DataPointStorageUpdater.groovy:45) at mdz.ccuhistorian.eventprocessing.DataPointStorageUpdater.consume(DataPointStorageUpdater.groovy) at mdz.eventprocessing.BasicProducer.lambda$0(BasicProducer.java:36) at mdz.Exceptions.catchToLog(Exceptions.java:74) at mdz.eventprocessing.BasicProducer.safeProduce(BasicProducer.java:36) at mdz.eventprocessing.BasicProducer.produce(BasicProducer.java:42) at mdz.eventprocessing.Buffer.purge(Buffer.java:74) at mdz.ccuhistorian.Historian$_closure2.doCall(Historian.groovy:91) at mdz.ccuhistorian.Historian$_closure2.doCall(Historian.groovy) at mdz.ccuhistorian.ExtendedStorage$_fireOnRead_closure1.doCall(ExtendedStorage.groovy:163) at mdz.ccuhistorian.ExtendedStorage.fireOnRead(ExtendedStorage.groovy:163) at mdz.ccuhistorian.ExtendedStorage.getDataPointsOfInterface(ExtendedStorage.groovy:53) at mdz.ccuhistorian.Historian.update(Historian.groovy:152) at mdz.ccuhistorian.Historian$_run_closure3$_closure12.doCall(Historian.groovy:110) at mdz.ccuhistorian.Historian$_run_closure3$_closure12.doCall(Historian.groovy) at mdz.Exceptions.lambda$0(Exceptions.java:84) at mdz.Exceptions.catchToLog(Exceptions.java:74) at mdz.Exceptions.catchToLog(Exceptions.java:84) at mdz.ccuhistorian.Historian$_run_closure3.doCall(Historian.groovy:106) at mdz.ccuhistorian.Historian.run(Historian.groovy:105) Caused by: org.h2.mvstore.MVStoreException: Double mark: 1b32/1ca [2-4a, 72-5bc, 5ca-88d, 959-ccf, fc4-1606, 1ce9-3958, 3b0a-43c0, 4719-] [2.1.214/6] at org.h2.mvstore.DataUtils.newMVStoreException(DataUtils.java:1004) at org.h2.mvstore.FreeSpaceBitSet.markUsed(FreeSpaceBitSet.java:184) at org.h2.mvstore.FileStore.markUsed(FileStore.java:344) at org.h2.mvstore.MVStore.readStoreHeader(MVStore.java:1052) at org.h2.mvstore.MVStore.<init>(MVStore.java:463) at org.h2.mvstore.MVStore$Builder.open(MVStore.java:4082) at org.h2.mvstore.db.Store.<init>(Store.java:136)