Cannot start up Metabase - DB Corrupt?

We started having difficulties saving new questions on Metabase 0.19, so I restarted the system. Now I can’t seem to get past initialization due to a DB issue (I think). I tried to upgrade to 0.19.3 to see if that would remedy the problem, but have the same error on startup. Is there a tool that would allow me to run table checks or other diagnostics on the H2 config DB? I think we will be moving the MB config DB to MYSQL after I resolve the issue.

org.h2.jdbc.JdbcSQLException: General error: “java.lang.ArrayIndexOutOfBoundsException: 69”; SQL statement:
INSERT INTO INFORMATION_SCHEMA.LOB_MAP(LOB, SEQ, POS, HASH, BLOCK) SELECT ?, SEQ, POS, HASH, BLOCK FROM INFORMATION_SCHEMA.LOB_MAP WHERE LOB = ? [50000-192]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
at org.h2.message.DbException.get(DbException.java:168)
at org.h2.message.DbException.convert(DbException.java:295)
at org.h2.command.Command.executeUpdate(Command.java:266)
at org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(JdbcPreparedStatement.java:160)
at org.h2.jdbc.JdbcPreparedStatement.executeUpdate(JdbcPreparedStatement.java:146)
at org.h2.store.LobStorageBackend.copyLob(LobStorageBackend.java:465)
at org.h2.value.ValueLobDb.copyToResult(ValueLobDb.java:486)
at org.h2.value.ValueLobDb.copyToResult(ValueLobDb.java:39)
at org.h2.result.LocalResult.cloneLobs(LocalResult.java:260)
at org.h2.result.LocalResult.addRow(LocalResult.java:285)
at org.h2.command.dml.Select.queryFlat(Select.java:553)
at org.h2.command.dml.Select.queryWithoutCache(Select.java:654)
at org.h2.command.dml.Query.query(Query.java:341)
at org.h2.command.dml.Query.query(Query.java:309)
at org.h2.command.dml.Query.query(Query.java:36)
at org.h2.command.CommandContainer.query(CommandContainer.java:110)
at org.h2.command.Command.executeQuery(Command.java:201)
at org.h2.jdbc.JdbcPreparedStatement.executeQuery(JdbcPreparedStatement.java:110)
at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:76)
at clojure.java.jdbc$db_query_with_resultset$run_query_with_params__2797.invoke(jdbc.clj:831)
at clojure.java.jdbc$db_query_with_resultset.invokeStatic(jdbc.clj:850)
at clojure.java.jdbc$db_query_with_resultset.invoke(jdbc.clj:818)
at clojure.java.jdbc$query.invokeStatic(jdbc.clj:874)
at clojure.java.jdbc$query.invoke(jdbc.clj:854)
at metabase.db$query.invokeStatic(db.clj:368)
at metabase.db$query.doInvoke(db.clj:364)
at clojure.lang.RestFn.invoke(RestFn.java:410)
at metabase.db$simple_select.invokeStatic(db.clj:427)
at metabase.db$simple_select.invoke(db.clj:419)
at metabase.db$select.invokeStatic(db.clj:673)
at metabase.db$select.doInvoke(db.clj:666)
at clojure.lang.RestFn.invoke(RestFn.java:410)
at clojure.lang.AFn.applyToHelper(AFn.java:154)
at clojure.lang.RestFn.applyTo(RestFn.java:132)
at clojure.core$apply.invokeStatic(core.clj:648)
at clojure.core$apply.invoke(core.clj:641)
at metabase.db$select_field__GT_field.invokeStatic(db.clj:700)
at metabase.db$select_field__GT_field.doInvoke(db.clj:693)
at clojure.lang.RestFn.invoke(RestFn.java:445)
at metabase.models.setting$restore_cache_if_needed_BANG_.invokeStatic(setting.clj:89)
at metabase.models.setting$restore_cache_if_needed_BANG_.invoke(setting.clj:87)
at metabase.models.setting$db_value.invokeStatic(setting.clj:117)
at metabase.models.setting$db_value.invoke(setting.clj:114)
at metabase.models.setting$get_string.invokeStatic(setting.clj:131)
at metabase.models.setting$get_string.invoke(setting.clj:121)
at clojure.core$partial$fn__4759.invoke(core.clj:2514)
at metabase.models.setting$get.invokeStatic(setting.clj:168)
at metabase.models.setting$get.invoke(setting.clj:164)
at metabase.metabot$start_metabot_BANG_.invokeStatic(metabot.clj:255)
at metabase.metabot$start_metabot_BANG_.invoke(metabot.clj:250)
at metabase.core$init_BANG_.invokeStatic(core.clj:173)
at metabase.core$init_BANG_.invoke(core.clj:126)
at metabase.core$start_normally.invokeStatic(core.clj:226)
at metabase.core$start_normally.invoke(core.clj:220)
at metabase.core$_main.invokeStatic(core.clj:260)
at metabase.core$_main.doInvoke(core.clj:255)
at clojure.lang.RestFn.invoke(RestFn.java:397)
at clojure.lang.AFn.applyToHelper(AFn.java:152)
at clojure.lang.RestFn.applyTo(RestFn.java:132)
at metabase.core.main(Unknown Source)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 69
at org.h2.index.PageDataLeaf.getRowAt(PageDataLeaf.java:331)
at org.h2.index.PageDataLeaf.getRowWithKey(PageDataLeaf.java:454)
at org.h2.index.PageDataNode.getRowWithKey(PageDataNode.java:280)
at org.h2.index.PageDataIndex.getRowWithKey(PageDataIndex.java:426)
at org.h2.index.PageDataIndex.getRow(PageDataIndex.java:415)
at org.h2.table.RegularTable.getRow(RegularTable.java:106)
at org.h2.index.PageBtreeIndex.getRow(PageBtreeIndex.java:303)
at org.h2.index.PageBtreeCursor.get(PageBtreeCursor.java:45)
at org.h2.index.IndexCursor.get(IndexCursor.java:288)
at org.h2.table.TableFilter.getValue(TableFilter.java:1068)
at org.h2.expression.ExpressionColumn.getValue(ExpressionColumn.java:186)
at org.h2.command.dml.Select.queryFlat(Select.java:548)
at org.h2.command.dml.Select.queryWithoutCache(Select.java:654)
at org.h2.command.dml.Query.query(Query.java:341)
at org.h2.command.dml.Query.query(Query.java:309)
at org.h2.command.dml.Insert.insertRows(Insert.java:169)
at org.h2.command.dml.Insert.update(Insert.java:114)
at org.h2.command.CommandContainer.update(CommandContainer.java:98)
at org.h2.command.Command.executeUpdate(Command.java:258)
… 57 more
08-16 18:44:22 ERROR metabase.core :: Metabase Initialization FAILED: General error: “java.lang.ArrayIndexOutOfBoundsException: 69”; SQL statement:
INSERT INTO INFORMATION_SCHEMA.LOB_MAP(LOB, SEQ, POS, HASH, BLOCK) SELECT ?, SEQ, POS, HASH, BLOCK FROM INFORMATION_SCHEMA.LOB_MAP WHERE LOB = ? [50000-192]

Ugh. Really sucks that you’re hitting that. Let me do a bit of digging.

Do you have any backups of the H2 database laying around?

Unfortunately not. We just added MB recently and the installation path was not in the backup script. Thanks for looking in to it!

Would you be able to share the H2 file? Happy to sign an NDA if necessary. We’re having a hard time re-producing this, and it would be useful to be able to inspect that file and try to figure out how it got corrupted.

Sure. I will get an NDA. Who do I need to send it to?