Another DB just got corrupted. This time I have a bit more information.
Here is the exception with full stacktrace. Any clue?
org.h2.jdbc.JdbcSQLException: File corrupted while reading record:
"page[296100] data leaf overflow parent:296101 next:295586". Possible
solution: use the recovery tool [90030-176]
at
org.h2.message.DbException.getJdbcSQLException(DbException.java:344)
at org.h2.message.DbException.get(DbException.java:178)
at org.h2.message.DbException.get(DbException.java:154)
at org.h2.index.PageDataIndex.getPage(PageDataIndex.java:242)
at org.h2.index.PageDataNode.getLastKey(PageDataNode.java:215)
at org.h2.index.PageDataNode.getLastKey(PageDataNode.java:215)
at org.h2.index.PageDataNode.getLastKey(PageDataNode.java:215)
at org.h2.index.PageDataIndex.<init>(PageDataIndex.java:88)
at org.h2.table.RegularTable.<init>(RegularTable.java:84)
at org.h2.store.PageStore.addMeta(PageStore.java:1693)
at org.h2.store.PageStore.readMetaData(PageStore.java:1624)
at org.h2.store.PageStore.recover(PageStore.java:1406)
at org.h2.store.PageStore.openExisting(PageStore.java:368)
at org.h2.store.PageStore.open(PageStore.java:289)
at org.h2.engine.Database.getPageStore(Database.java:2366)
at org.h2.engine.Database.open(Database.java:657)
at org.h2.engine.Database.openDatabase(Database.java:260)
at org.h2.engine.Database.<init>(Database.java:254)
at org.h2.engine.Engine.openSession(Engine.java:57)
at org.h2.engine.Engine.openSession(Engine.java:164)
at org.h2.engine.Engine.createSessionAndValidate(Engine.java:142)
at org.h2.engine.Engine.createSession(Engine.java:125)
at org.h2.server.TcpServerThread.run(TcpServerThread.java:150)
at java.lang.Thread.run(Thread.java:808)
at org.h2.engine.SessionRemote.done(SessionRemote.java:606)
at org.h2.engine.SessionRemote.initTransfer(SessionRemote.java:129)
at org.h2.engine.SessionRemote.connectServer(SessionRemote.java:430)
at
org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:311)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:107)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:91)
at org.h2.Driver.connect(Driver.java:74)
at
slick.jdbc.DriverDataSource.getConnection(DriverDataSource.scala:98)
at
slick.jdbc.DataSourceJdbcDataSource.createConnection(JdbcDataSource.scala:64)
at
slick.jdbc.JdbcBackend$BaseSession.conn$lzycompute(JdbcBackend.scala:415)
at slick.jdbc.JdbcBackend$BaseSession.conn(JdbcBackend.scala:414)
at
slick.jdbc.JdbcBackend$SessionDef$class.prepareStatement(JdbcBackend.scala:297)
at
slick.jdbc.JdbcBackend$BaseSession.prepareStatement(JdbcBackend.scala:407)
at
slick.jdbc.JdbcBackend$SessionDef$class.withPreparedStatement(JdbcBackend.scala:346)
at
slick.jdbc.JdbcBackend$BaseSession.withPreparedStatement(JdbcBackend.scala:407)
at
slick.driver.JdbcActionComponent$InsertActionComposerImpl.preparedInsert(JdbcActionComponent.scala:498)
at
slick.driver.JdbcActionComponent$InsertActionComposerImpl$InsertOrUpdateAction.nativeUpsert(JdbcActionComponent.scala:557)
at
slick.driver.JdbcActionComponent$InsertActionComposerImpl$InsertOrUpdateAction.f$1(JdbcActionComponent.scala:540)
at
slick.driver.JdbcActionComponent$InsertActionComposerImpl$InsertOrUpdateAction.run(JdbcActionComponent.scala:553)
at
slick.driver.JdbcActionComponent$SimpleJdbcDriverAction.run(JdbcActionComponent.scala:32)
at
slick.driver.JdbcActionComponent$SimpleJdbcDriverAction.run(JdbcActionComponent.scala:29)
at
slick.backend.DatabaseComponent$DatabaseDef$$anon$2.liftedTree1$1(DatabaseComponent.scala:237)
at
slick.backend.DatabaseComponent$DatabaseDef$$anon$2.run(DatabaseComponent.scala:237)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:808)
On Tuesday, 19 June 2018 15:15:05 UTC+2, Noel Grandin wrote:
>
>
>
> On 2018/06/19 3:06 PM, Behroz Sikander wrote:
> > What is your opinion on the following statement that I originally
> posted?
> > "After digging into the corruption problem, we found that we use
> tcpAllowOthers and AUTO_SERVER=TRUE at the same time.
> > Due to this reason, we have sometimes "server" property in the .lock.db
> file and sometimes not. In all the corruption
> > cases, we found a .lock.db file with missing "server" property. We will
> remove this property soon."
> >
>
> Don't know. That may just mean that the crash happened during startup,
> before it became a server, but that doesn't mean
> that it correlates with the time of corruption. Corruption unfortunately
> tends to show up either during
> recovery/startup, or much later when a query touches the corrupted data.
>
> If the performance of LOBs doesn't matter to you, you could try
> synchronizing on some single application-wide lock
> object before doing any LOB work, which will minimise the chance that H2
> does something wrong.
> Also try confining LOB modifying SQL code to it's own JdbcConnection.
>
> > And also is there a way to set the trace file directory?
> > "Also, I want to enable tracing but is there a way to specify a
> directory for trace file? a property that I can set as
> > part of connection string? something similar to
> >
>
> Not to my knowledge.
> http://h2database.com/html/features.html#trace_options
>
>
--
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 https://groups.google.com/group/h2-database.
For more options, visit https://groups.google.com/d/optout.