[ https://issues.apache.org/jira/browse/DERBY-7158?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Yuliana Ganchevska resolved DERBY-7158. --------------------------------------- Fix Version/s: 10.14.2.0 Resolution: Resolved Thank you! The additional tool RawDBReader helped and I was able to recover the data. I'm closing the issue. > ArrayIndexOutOfBoundsException when connecting to Embedded Derby > ---------------------------------------------------------------- > > Key: DERBY-7158 > URL: https://issues.apache.org/jira/browse/DERBY-7158 > Project: Derby > Issue Type: Bug > Affects Versions: 10.14.2.0 > Reporter: Yuliana Ganchevska > Priority: Major > Fix For: 10.14.2.0 > > > Hello, > our project is using Embedded Derby 10.14.2 with Java 11. A client recently > complained they can't connect to the DB and it seems the DB is corrupted. At > the time the issue happened they said the only change they made was to > increase the memory. When the application is trying to connect to the DB, it > throws the following exception: > {code:java} > Caused by: java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds > for length 28 > at org.apache.derby.impl.store.raw.data.BasePage.getHeaderAtSlot(Unknown > Source) ~[derby-10.14.2.jar:?] > at org.apache.derby.impl.store.raw.data.BasePage.setDeleteStatus(Unknown > Source) ~[derby-10.14.2.jar:?] > at > org.apache.derby.impl.store.raw.data.CachedPage.setDeleteStatus(Unknown > Source) ~[derby-10.14.2.jar:?] > at > org.apache.derby.impl.store.raw.data.StoredPage.setDeleteStatus(Unknown > Source) ~[derby-10.14.2.jar:?] > at org.apache.derby.impl.store.raw.data.InsertOperation.undoMe(Unknown > Source) ~[derby-10.14.2.jar:?] > at org.apache.derby.impl.store.raw.data.LogicalUndoOperation.doMe(Unknown > Source) ~[derby-10.14.2.jar:?] > at org.apache.derby.impl.store.raw.log.FileLogger.logAndUndo(Unknown > Source) ~[derby-10.14.2.jar:?] > at org.apache.derby.impl.store.raw.xact.Xact.logAndUndo(Unknown Source) > ~[derby-10.14.2.jar:?] > at org.apache.derby.impl.store.raw.log.FileLogger.undo(Unknown Source) > ~[derby-10.14.2.jar:?] > at org.apache.derby.impl.store.raw.xact.Xact.abort(Unknown Source) > ~[derby-10.14.2.jar:?] > at > org.apache.derby.impl.store.raw.xact.XactFactory.rollbackAllTransactions(Unknown > Source) ~[derby-10.14.2.jar:?] > at org.apache.derby.impl.store.raw.log.LogToFile.recover(Unknown Source) > ~[derby-10.14.2.jar:?] > at org.apache.derby.impl.store.raw.RawStore.boot(Unknown Source) > ~[derby-10.14.2.jar:?] > at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown > Source) ~[derby-10.14.2.jar:?] > at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown > Source) ~[derby-10.14.2.jar:?] > at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown > Source) ~[derby-10.14.2.jar:?] > at org.apache.derby.impl.services.monitor.FileMonitor.startModule(Unknown > Source) ~[derby-10.14.2.jar:?] > at > org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown > Source) ~[derby-10.14.2.jar:?] > at org.apache.derby.impl.store.access.RAMAccessManager$5.run(Unknown > Source) ~[derby-10.14.2.jar:?] > at java.security.AccessController.doPrivileged(Native Method) ~[?:?] > at > org.apache.derby.impl.store.access.RAMAccessManager.bootServiceModule(Unknown > Source) ~[derby-10.14.2.jar:?] > at org.apache.derby.impl.store.access.RAMAccessManager.boot(Unknown > Source) ~[derby-10.14.2.jar:?] > at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown > Source) ~[derby-10.14.2.jar:?] > at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown > Source) ~[derby-10.14.2.jar:?] > at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown > Source) ~[derby-10.14.2.jar:?] > at org.apache.derby.impl.services.monitor.FileMonitor.startModule(Unknown > Source) ~[derby-10.14.2.jar:?] > at > org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown > Source) ~[derby-10.14.2.jar:?] > at org.apache.derby.impl.db.BasicDatabase$5.run(Unknown Source) > ~[derby-10.14.2.jar:?] > at java.security.AccessController.doPrivileged(Native Method) ~[?:?] > at org.apache.derby.impl.db.BasicDatabase.bootServiceModule(Unknown > Source) ~[derby-10.14.2.jar:?] > at org.apache.derby.impl.db.BasicDatabase.bootStore(Unknown Source) > ~[derby-10.14.2.jar:?] > at org.apache.derby.impl.db.BasicDatabase.boot(Unknown Source) > ~[derby-10.14.2.jar:?] > at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown > Source) ~[derby-10.14.2.jar:?] > at org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown > Source) ~[derby-10.14.2.jar:?] > at org.apache.derby.impl.services.monitor.BaseMonitor.bootService(Unknown > Source) ~[derby-10.14.2.jar:?] > at > org.apache.derby.impl.services.monitor.BaseMonitor.startProviderService(Unknown > Source) ~[derby-10.14.2.jar:?] > at > org.apache.derby.impl.services.monitor.BaseMonitor.findProviderAndStartService(Unknown > Source) ~[derby-10.14.2.jar:?] > at > org.apache.derby.impl.services.monitor.BaseMonitor.startPersistentService(Unknown > Source) ~[derby-10.14.2.jar:?] > at > org.apache.derby.iapi.services.monitor.Monitor.startPersistentService(Unknown > Source) ~[derby-10.14.2.jar:?] > at org.apache.derby.impl.jdbc.EmbedConnection$4.run(Unknown Source) > ~[derby-10.14.2.jar:?] > at org.apache.derby.impl.jdbc.EmbedConnection$4.run(Unknown Source) > ~[derby-10.14.2.jar:?] > at java.security.AccessController.doPrivileged(Native Method) ~[?:?] > at > org.apache.derby.impl.jdbc.EmbedConnection.startPersistentService(Unknown > Source) ~[derby-10.14.2.jar:?] > at org.apache.derby.impl.jdbc.EmbedConnection.bootDatabase(Unknown > Source) ~[derby-10.14.2.jar:?] > at org.apache.derby.impl.jdbc.EmbedConnection.<init>(Unknown Source) > ~[derby-10.14.2.jar:?] > at org.apache.derby.jdbc.InternalDriver$1.run(Unknown Source) > ~[derby-10.14.2.jar:?] > at org.apache.derby.jdbc.InternalDriver$1.run(Unknown Source) > ~[derby-10.14.2.jar:?] > at java.security.AccessController.doPrivileged(Native Method) ~[?:?] > at org.apache.derby.jdbc.InternalDriver.getNewEmbedConnection(Unknown > Source) ~[derby-10.14.2.jar:?] > at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source) > ~[derby-10.14.2.jar:?] > at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source) > ~[derby-10.14.2.jar:?] > at org.apache.derby.jdbc.EmbeddedDriver.connect(Unknown Source) > ~[derby-10.14.2.jar:?] > at > org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:346) > ~[org.apache.tomcat.jdbc_8.5.85.jar:?] > at > org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:227) > ~[org.apache.tomcat.jdbc_8.5.85.jar:?] > at > org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:763) > ~[org.apache.tomcat.jdbc_8.5.85.jar:?] > at > org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:691) > ~[org.apache.tomcat.jdbc_8.5.85.jar:?] > at > org.apache.tomcat.jdbc.pool.ConnectionPool.getConnection(ConnectionPool.java:197) > ~[org.apache.tomcat.jdbc_8.5.85.jar:?] > at > org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:134) > ~[org.apache.tomcat.jdbc_8.5.85.jar:?] > at > org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:138) > ~[eclipselink-2.7.10.jar:2.7.10.v20211216-fe64cd39c3] > at > org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:172) > ~[eclipselink-2.7.10.jar:2.7.10.v20211216-fe64cd39c3] > at > org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.setOrDetectDatasource(DatabaseSessionImpl.java:225) > ~[eclipselink-2.7.10.jar:2.7.10.v20211216-fe64cd39c3] > at > org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:809) > ~[eclipselink-2.7.10.jar:2.7.10.v20211216-fe64cd39c3] > at > org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:261) > ~[eclipselink-2.7.10.jar:2.7.10.v20211216-fe64cd39c3] > at > org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:773) > ~[eclipselink-2.7.10.jar:2.7.10.v20211216-fe64cd39c3] > ... 23 more {code} > Using the shared Java class from > https://issues.apache.org/jira/browse/DERBY-5201 with option "-v" I was able > to see there are two .dat files with INVALID_PAGE flag in the page header. > One of them is for our custom table and the other is for SYSSTATISTICS. > I saw in the documentation that if backup is created and with logs, the DB > could be restored, but unfortunately we don't have backup. > > Is it still possible to connect to the DB somehow? > Also could increasing the memory interfere with the Derby DB and corrupt it? > Regards, > Yuliana -- This message was sent by Atlassian Jira (v8.20.10#820010)