@Thomas Mueller - You mentioned that file corruption may take place if "copy the database file while it is in use, without using the online backup command". Can you please elaborate?
Do note that we do make a file copy while DB is in use, but we make a call to "SET EXCLUSIVE 1" before. What would be "online backup command" ? We want to have a full copy of the DB "as is", ready to go for backup/restore and even replicate it for HA. Is there a better way to achieve this? I am hitting the same corruption issue. We were using 1.4.96 and not upgraded to 1.4.99. With 1.4.96, once hit, all threads failed and database was unusable. See exception we're hitting below: org.hibernate.exception.GenericJDBCException: could not execute statement at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54) ~[factory.jar:1.4] at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126) ~[factory.jar:1.4] at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112) ~[factory.jar:1.4] at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:211) ~[factory.jar:1.4] at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:3285) ~[factory.jar:1.4] at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:3183) ~[factory.jar:1.4] at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:3525) ~[factory.jar:1.4] at org.hibernate.action.internal.EntityUpdateAction.execute(EntityUpdateAction.java:159) ~[factory.jar:1.4] at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:465) ~[factory.jar:1.4] at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:351) ~[factory.jar:1.4] at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:350) ~[factory.jar:1.4] at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:56) ~[factory.jar:1.4] at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1258) ~[factory.jar:1.4] at com.shieldxnetworks.factory.util.db.TransactionRunner.commit(TransactionRunner.java:129) ~[factory.jar:1.4] at com.shieldxnetworks.factory.util.db.TransactionRunner.commitIntent(TransactionRunner.java:202) ~[factory.jar:1.4] at com.shieldxnetworks.factory.manager.chassis.task.vmware.VmwareCreateMicroSegmentNetworkTask.executeTransaction(VmwareCreateMicroSegmentNetworkTask.java:98) ~[factory.jar:1.4] at com.shieldxnetworks.factory.job.task.TransactionalTask$1.run(TransactionalTask.java:48) ~[factory.jar:1.4] at com.shieldxnetworks.factory.util.db.TransactionRunner.exec(TransactionRunner.java:81) ~[factory.jar:1.4] at com.shieldxnetworks.factory.util.db.TransactionRunner.exec(TransactionRunner.java:73) ~[factory.jar:1.4] at com.shieldxnetworks.factory.job.task.TransactionalTask.lambda$execute$0(TransactionalTask.java:53) ~[factory.jar:1.4] at com.shieldxnetworks.factory.util.db.TransactionRetrier.tryAttempts(TransactionRetrier.java:49) ~[factory.jar:1.4] at com.shieldxnetworks.factory.util.db.TransactionRetrier.tryAttempts(TransactionRetrier.java:42) ~[factory.jar:1.4] at com.shieldxnetworks.factory.job.task.TransactionalTask.execute(TransactionalTask.java:41) ~[factory.jar:1.4] at com.shieldxnetworks.factory.job.TaskNode.run(TaskNode.java:270) [factory.jar:1.4] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_152] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_152] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_152] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_152] at java.lang.Thread.run(Thread.java:748) [?:1.8.0_152] Caused by: org.h2.jdbc.JdbcSQLNonTransientException: IO Exception: "retry:/var/lib/factory/shieldxdb.mv.db"; SQL statement: update port set version=?, cloud_object_id=?, connected=?, inspection_port_type=?, lb_fk=?, mac_address=?, micro_segment_network_fk=?, name=?, network_fk=?, original_network_fk=?, type=?, vm_fk=? where id=? and version=? [90028-199] at org.h2.message.DbException.getJdbcSQLException(DbException.java:502) ~[factory.jar:1.4] at org.h2.message.DbException.getJdbcSQLException(DbException.java:427) ~[factory.jar:1.4] at org.h2.message.DbException.get(DbException.java:194) ~[factory.jar:1.4] at org.h2.mvstore.db.MVTableEngine$Store.convertIllegalStateException(MVTableEngine.java:197) ~[factory.jar:1.4] at org.h2.mvstore.db.MVTable.convertException(MVTable.java:725) ~[factory.jar:1.4] at org.h2.mvstore.db.MVSecondaryIndex.remove(MVSecondaryIndex.java:239) ~[factory.jar:1.4] at org.h2.mvstore.db.MVTable.removeRow(MVTable.java:514) ~[factory.jar:1.4] at org.h2.table.Table.updateRows(Table.java:506) ~[factory.jar:1.4] at org.h2.command.dml.Update.update(Update.java:203) ~[factory.jar:1.4] at org.h2.command.CommandContainer.update(CommandContainer.java:133) ~[factory.jar:1.4] at org.h2.command.Command.executeUpdate(Command.java:267) ~[factory.jar:1.4] at org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(JdbcPreparedStatement.java:200) ~[factory.jar:1.4] at org.h2.jdbc.JdbcPreparedStatement.executeUpdate(JdbcPreparedStatement.java:154) ~[factory.jar:1.4] at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:208) ~[factory.jar:1.4] ... 25 more Caused by: java.lang.IllegalStateException: Reading from retry:/var/lib/factory/shieldxdb.mv.db failed; file length 607985664 read length 192 at 523398200 [1.4.199/1] at org.h2.mvstore.DataUtils.newIllegalStateException(DataUtils.java:883) ~[factory.jar:1.4] at org.h2.mvstore.DataUtils.readFully(DataUtils.java:420) ~[factory.jar:1.4] at org.h2.mvstore.FileStore.readFully(FileStore.java:98) ~[factory.jar:1.4] at org.h2.mvstore.MVStore.readBufferForPage(MVStore.java:1048) ~[factory.jar:1.4] at org.h2.mvstore.MVStore.readPage(MVStore.java:2186) ~[factory.jar:1.4] at org.h2.mvstore.MVMap.readPage(MVMap.java:554) ~[factory.jar:1.4] at org.h2.mvstore.Page$NonLeaf.getChildPage(Page.java:1086) ~[factory.jar:1.4] at org.h2.mvstore.MVMap.traverseDown(MVMap.java:1877) ~[factory.jar:1.4] at org.h2.mvstore.MVMap.operate(MVMap.java:1664) ~[factory.jar:1.4] at org.h2.mvstore.tx.TransactionMap.set(TransactionMap.java:306) ~[factory.jar:1.4] at org.h2.mvstore.tx.TransactionMap.set(TransactionMap.java:289) ~[factory.jar:1.4] at org.h2.mvstore.tx.TransactionMap.remove(TransactionMap.java:209) ~[factory.jar:1.4] at org.h2.mvstore.db.MVSecondaryIndex.remove(MVSecondaryIndex.java:232) ~[factory.jar:1.4] at org.h2.mvstore.db.MVTable.removeRow(MVTable.java:514) ~[factory.jar:1.4] at org.h2.table.Table.updateRows(Table.java:506) ~[factory.jar:1.4] at org.h2.command.dml.Update.update(Update.java:203) ~[factory.jar:1.4] at org.h2.command.CommandContainer.update(CommandContainer.java:133) ~[factory.jar:1.4] at org.h2.command.Command.executeUpdate(Command.java:267) ~[factory.jar:1.4] at org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(JdbcPreparedStatement.java:200) ~[factory.jar:1.4] at org.h2.jdbc.JdbcPreparedStatement.executeUpdate(JdbcPreparedStatement.java:154) ~[factory.jar:1.4] at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:208) ~[factory.jar:1.4] ... 25 more Caused by: java.io.EOFException at org.h2.mvstore.DataUtils.readFully(DataUtils.java:408) ~[factory.jar:1.4] at org.h2.mvstore.FileStore.readFully(FileStore.java:98) ~[factory.jar:1.4] at org.h2.mvstore.MVStore.readBufferForPage(MVStore.java:1048) ~[factory.jar:1.4] at org.h2.mvstore.MVStore.readPage(MVStore.java:2186) ~[factory.jar:1.4] at org.h2.mvstore.MVMap.readPage(MVMap.java:554) ~[factory.jar:1.4] at org.h2.mvstore.Page$NonLeaf.getChildPage(Page.java:1086) ~[factory.jar:1.4] at org.h2.mvstore.MVMap.traverseDown(MVMap.java:1877) ~[factory.jar:1.4] at org.h2.mvstore.MVMap.operate(MVMap.java:1664) ~[factory.jar:1.4] at org.h2.mvstore.tx.TransactionMap.set(TransactionMap.java:306) ~[factory.jar:1.4] at org.h2.mvstore.tx.TransactionMap.set(TransactionMap.java:289) ~[factory.jar:1.4] at org.h2.mvstore.tx.TransactionMap.remove(TransactionMap.java:209) ~[factory.jar:1.4] at org.h2.mvstore.db.MVSecondaryIndex.remove(MVSecondaryIndex.java:232) ~[factory.jar:1.4] at org.h2.mvstore.db.MVTable.removeRow(MVTable.java:514) ~[factory.jar:1.4] at org.h2.table.Table.updateRows(Table.java:506) ~[factory.jar:1.4] at org.h2.command.dml.Update.update(Update.java:203) ~[factory.jar:1.4] at org.h2.command.CommandContainer.update(CommandContainer.java:133) ~[factory.jar:1.4] at org.h2.command.Command.executeUpdate(Command.java:267) ~[factory.jar:1.4] at org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(JdbcPreparedStatement.java:200) ~[factory.jar:1.4] at org.h2.jdbc.JdbcPreparedStatement.executeUpdate(JdbcPreparedStatement.java:154) ~[factory.jar:1.4] at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:208) ~[factory.jar:1.4] ... 25 more We do actually make a copy of the file, but we call SET EXCLUSIVE 1 before we do that. On Monday, May 4, 2015 at 10:45:59 PM UTC-7, Thomas Mueller wrote: > > Hi, > > That's strange. The last part of the file is missing. > > Looking at the H2 source code, the file truncate code is very simple and > conservative (MVStore.shrinkFileIfPossible, which is calling > getFileLengthInUse). It looks unlikely that there is a bug in this area. > > Could you describe what you did to get into this state? One possible way > to get into this situation is to copy the database file while it is in use, > without using the online backup command. Or truncate the file in some other > way. Other than that, I wouldn't know a way. Do you have a reproducible > test case? > > Regards > Thomas > > On Thursday, April 30, 2015, Osvaldas Ziukas <[email protected] > <javascript:>> wrote: > >> Hello here is db file >>> >>> -- >> You received this message because you are subscribed to the Google Groups >> "H2 Database" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To post to this group, send email to [email protected]. >> Visit this group at http://groups.google.com/group/h2-database. >> For more options, visit https://groups.google.com/d/optout. >> > -- You received this message because you are subscribed to the Google Groups "H2 Database" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/h2-database/35429ef9-75aa-428d-b141-ad79e7647b84%40googlegroups.com.
