Corrupt database: ArrayIndexOutOfBoundsException on connect
Hi, I have a derby database that I am unable to connect to; when I try I get java.lang.ArrayIndexOutOfBoundsException. The full stack trace is shown below. Firstly, some background: - I'm using derby 10.8.2.2 with a Java Webstart application that connects in embedded mode. The clients are using Java 7u45 on Windows 7, 32 bit - The application is configured to run SYSCS_UTIL.SYSCS_COMPRESS_TABLE() every 5 days on each table on startup - The client was running SYSCS_UTIL.SYSCS_COMPRESS_TABLE() on a particular table and based on the application logs, it looks like either the JVM crashed or the application was ended via task manager. - On subsequent attempts to start the application, the client was unable to connect to the database as per the stack trace below. I have made a copy of the database and I get this error reliably on accessing the copy. I have two questions: 1. Is there anything that I can do to recover from this kind of scenario automatically? 2. Is there any debugging or other investigation that I can do that will help reduce the severity of this kind of problem? Thanks, Phil java.sql.SQLException: Failed to start database 'C:\Users\Administrator\.myapp\myapp_db' with class loader com.sun.jnlp.JNLPClassLoader@1bef5e8, see the next exception for details. at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source) at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source) at org.apache.derby.impl.jdbc.Util.seeNextException(Unknown Source) at org.apache.derby.impl.jdbc.EmbedConnection.bootDatabase(Unknown Source) at org.apache.derby.impl.jdbc.EmbedConnection.init(Unknown Source) at org.apache.derby.impl.jdbc.EmbedConnection30.init(Unknown Source) at org.apache.derby.impl.jdbc.EmbedConnection40.init(Unknown Source) at org.apache.derby.jdbc.Driver40.getNewEmbedConnection(Unknown Source) at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source) at org.apache.derby.jdbc.AutoloadedDriver.connect(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at com.mycompany.database.DbInitializer.runScript(DbInitializer.java:143) at com.mycompany.myapp.ApplicationRunner.initialiseDb(ApplicationRunner.java:817) at com.mycompany.myapp.ApplicationRunner.startApplication(ApplicationRunner.java:945) at com.mycompany.myapp.ApplicationRunner.run(ApplicationRunner.java:581) at com.mycompany.myapp.ApplicationRunner.main(ApplicationRunner.java:552) at com.mycompany.myapp.ApplicationLoader.main(ApplicationLoader.java:90) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.sun.javaws.Launcher.executeApplication(Unknown Source) at com.sun.javaws.Launcher.executeMainClass(Unknown Source) at com.sun.javaws.Launcher.doLaunchApp(Unknown Source) at com.sun.javaws.Launcher.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Caused by: java.sql.SQLException: Failed to start database 'C:\Users\Administrator\.myapp\myapp_db' with class loader com.sun.jnlp.JNLPClassLoader@1bef5e8, see the next exception for details. at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source) at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown Source) ... 27 more Caused by: java.sql.SQLException: Java exception: ': java.lang.ArrayIndexOutOfBoundsException'. at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source) at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown Source) at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source) at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source) at org.apache.derby.impl.jdbc.Util.javaException(Unknown Source) ... 24 more Caused by: java.lang.ArrayIndexOutOfBoundsException at java.lang.System.arraycopy(Native Method) at org.apache.derby.impl.store.raw.data.AllocPage.ReadContainerInfo(Unknown Source) at org.apache.derby.impl.store.raw.data.FileContainer.readHeader(Unknown Source) at org.apache.derby.impl.store.raw.data.RAFContainer.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at
Re: Corrupt database: ArrayIndexOutOfBoundsException on connect
Although Derby has transaction control and a recovery mechanism, if a JVM crashes or gets interrupted, the normal transaction steps might be interrupted in unfortunate places, especially during compress. Was the database shutdown before compress? Do you have a backup? But perhaps there is something of use to you on this page: https://wiki.apache.org/db-derby/DatabaseCorruption HTH Myrna On Mon, Mar 10, 2014 at 4:49 AM, Phil Bradley ph...@tower.ie wrote: Hi, I have a derby database that I am unable to connect to; when I try I get java.lang.ArrayIndexOutOfBoundsException. The full stack trace is shown below. Firstly, some background: - I'm using derby 10.8.2.2 with a Java Webstart application that connects in embedded mode. The clients are using Java 7u45 on Windows 7, 32 bit - The application is configured to run SYSCS_UTIL.SYSCS_COMPRESS_TABLE() every 5 days on each table on startup - The client was running SYSCS_UTIL.SYSCS_COMPRESS_TABLE() on a particular table and based on the application logs, it looks like either the JVM crashed or the application was ended via task manager. - On subsequent attempts to start the application, the client was unable to connect to the database as per the stack trace below. I have made a copy of the database and I get this error reliably on accessing the copy. I have two questions: 1. Is there anything that I can do to recover from this kind of scenario automatically? 2. Is there any debugging or other investigation that I can do that will help reduce the severity of this kind of problem? Thanks, Phil java.sql.SQLException: Failed to start database 'C:\Users\Administrator\.myapp\myapp_db' with class loader com.sun.jnlp.JNLPClassLoader@1bef5e8, see the next exception for details. at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source) at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source) at org.apache.derby.impl.jdbc.Util.seeNextException(Unknown Source) at org.apache.derby.impl.jdbc.EmbedConnection.bootDatabase(Unknown Source) at org.apache.derby.impl.jdbc.EmbedConnection.init(Unknown Source) at org.apache.derby.impl.jdbc.EmbedConnection30.init(Unknown Source) at org.apache.derby.impl.jdbc.EmbedConnection40.init(Unknown Source) at org.apache.derby.jdbc.Driver40.getNewEmbedConnection(Unknown Source) at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source) at org.apache.derby.jdbc.AutoloadedDriver.connect(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at com.mycompany.database.DbInitializer.runScript(DbInitializer.java:143) at com.mycompany.myapp.ApplicationRunner.initialiseDb(ApplicationRunner.java:817) at com.mycompany.myapp.ApplicationRunner.startApplication(ApplicationRunner.java:945) at com.mycompany.myapp.ApplicationRunner.run(ApplicationRunner.java:581) at com.mycompany.myapp.ApplicationRunner.main(ApplicationRunner.java:552) at com.mycompany.myapp.ApplicationLoader.main(ApplicationLoader.java:90) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.sun.javaws.Launcher.executeApplication(Unknown Source) at com.sun.javaws.Launcher.executeMainClass(Unknown Source) at com.sun.javaws.Launcher.doLaunchApp(Unknown Source) at com.sun.javaws.Launcher.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Caused by: java.sql.SQLException: Failed to start database 'C:\Users\Administrator\.myapp\myapp_db' with class loader com.sun.jnlp.JNLPClassLoader@1bef5e8, see the next exception for details. at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source) at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown Source) ... 27 more Caused by: java.sql.SQLException: Java exception: ': java.lang.ArrayIndexOutOfBoundsException'. at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source) at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown Source) at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source) at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source) at org.apache.derby.impl.jdbc.Util.javaException(Unknown Source) ... 24 more Caused by:
Re: Corrupt database: ArrayIndexOutOfBoundsException on connect
Just a reminder to do backups and run the database with log archiving. Everything is built in Derby. I know for you it is too late for you :( Peter On 10 Mar 2014, at 17:20, Myrna van Lunteren m.v.lunte...@gmail.com wrote: Although Derby has transaction control and a recovery mechanism, if a JVM crashes or gets interrupted, the normal transaction steps might be interrupted in unfortunate places, especially during compress. Was the database shutdown before compress? Do you have a backup? But perhaps there is something of use to you on this page: https://wiki.apache.org/db-derby/DatabaseCorruption HTH Myrna On Mon, Mar 10, 2014 at 4:49 AM, Phil Bradley ph...@tower.ie wrote: Hi, I have a derby database that I am unable to connect to; when I try I get java.lang.ArrayIndexOutOfBoundsException. The full stack trace is shown below. Firstly, some background: - I'm using derby 10.8.2.2 with a Java Webstart application that connects in embedded mode. The clients are using Java 7u45 on Windows 7, 32 bit - The application is configured to run SYSCS_UTIL.SYSCS_COMPRESS_TABLE() every 5 days on each table on startup - The client was running SYSCS_UTIL.SYSCS_COMPRESS_TABLE() on a particular table and based on the application logs, it looks like either the JVM crashed or the application was ended via task manager. - On subsequent attempts to start the application, the client was unable to connect to the database as per the stack trace below. I have made a copy of the database and I get this error reliably on accessing the copy. I have two questions: 1. Is there anything that I can do to recover from this kind of scenario automatically? 2. Is there any debugging or other investigation that I can do that will help reduce the severity of this kind of problem? Thanks, Phil java.sql.SQLException: Failed to start database 'C:\Users\Administrator\.myapp\myapp_db' with class loader com.sun.jnlp.JNLPClassLoader@1bef5e8, see the next exception for details. at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source) at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source) at org.apache.derby.impl.jdbc.Util.seeNextException(Unknown Source) at org.apache.derby.impl.jdbc.EmbedConnection.bootDatabase(Unknown Source) at org.apache.derby.impl.jdbc.EmbedConnection.init(Unknown Source) at org.apache.derby.impl.jdbc.EmbedConnection30.init(Unknown Source) at org.apache.derby.impl.jdbc.EmbedConnection40.init(Unknown Source) at org.apache.derby.jdbc.Driver40.getNewEmbedConnection(Unknown Source) at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source) at org.apache.derby.jdbc.AutoloadedDriver.connect(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at com.mycompany.database.DbInitializer.runScript(DbInitializer.java:143) at com.mycompany.myapp.ApplicationRunner.initialiseDb(ApplicationRunner.java:817) at com.mycompany.myapp.ApplicationRunner.startApplication(ApplicationRunner.java:945) at com.mycompany.myapp.ApplicationRunner.run(ApplicationRunner.java:581) at com.mycompany.myapp.ApplicationRunner.main(ApplicationRunner.java:552) at com.mycompany.myapp.ApplicationLoader.main(ApplicationLoader.java:90) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.sun.javaws.Launcher.executeApplication(Unknown Source) at com.sun.javaws.Launcher.executeMainClass(Unknown Source) at com.sun.javaws.Launcher.doLaunchApp(Unknown Source) at com.sun.javaws.Launcher.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Caused by: java.sql.SQLException: Failed to start database 'C:\Users\Administrator\.myapp\myapp_db' with class loader com.sun.jnlp.JNLPClassLoader@1bef5e8, see the next exception for details. at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source) at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown Source) ... 27 more Caused by: java.sql.SQLException: Java exception: ': java.lang.ArrayIndexOutOfBoundsException'. at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source) at
Re: Corrupt database: ArrayIndexOutOfBoundsException on connect
Hi Myrna, Thanks, the data in question is really just an offline cache so there's no issue with data loss (and it's kind of understandable that killing the process in the middle of compressing a table might not be best practice:) My second question was really is a database in this state of use to the derby developers? I'm not authorised to upload the database as part of a bug report since it belongs to a client but if there are any Derby developers out there that would like me to run some diagnostics then I'm happy to do so. Regards, Phil On Mon, Mar 10, 2014, at 16:20, Myrna van Lunteren wrote: Although Derby has transaction control and a recovery mechanism, if a JVM crashes or gets interrupted, the normal transaction steps might be interrupted in unfortunate places, especially during compress. Was the database shutdown before compress? Do you have a backup? But perhaps there is something of use to you on this page: [1]https://wiki.apache.org/db-derby/DatabaseCorruption HTH Myrna On Mon, Mar 10, 2014 at 4:49 AM, Phil Bradley [2]ph...@tower.ie wrote: Hi, I have a derby database that I am unable to connect to; when I try I get java.lang.ArrayIndexOutOfBoundsException. The full stack trace is shown below. Firstly, some background: - I'm using derby 10.8.2.2 with a Java Webstart application that connects in embedded mode. The clients are using Java 7u45 on Windows 7, 32 bit - The application is configured to run SYSCS_UTIL.SYSCS_COMPRESS_TABLE() every 5 days on each table on startup - The client was running SYSCS_UTIL.SYSCS_COMPRESS_TABLE() on a particular table and based on the application logs, it looks like either the JVM crashed or the application was ended via task manager. - On subsequent attempts to start the application, the client was unable to connect to the database as per the stack trace below. I have made a copy of the database and I get this error reliably on accessing the copy. I have two questions: 1. Is there anything that I can do to recover from this kind of scenario automatically? 2. Is there any debugging or other investigation that I can do that will help reduce the severity of this kind of problem? Thanks, Phil java.sql.SQLException: Failed to start database 'C:\Users\Administrator\.myapp\myapp_db' with class loader com.sun.jnlp.JNLPClassLoader@1bef5e8, see the next exception for details. at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknow n Source) at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source) at org.apache.derby.impl.jdbc.Util.seeNextException(Unknown Source) at org.apache.derby.impl.jdbc.EmbedConnection.bootDatabase(Unknown Source) at org.apache.derby.impl.jdbc.EmbedConnection.init(Unknown Source) at org.apache.derby.impl.jdbc.EmbedConnection30.init(Unknown Source) at org.apache.derby.impl.jdbc.EmbedConnection40.init(Unknown Source) at org.apache.derby.jdbc.Driver40.getNewEmbedConnection(Unknown Source) at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source) at org.apache.derby.jdbc.AutoloadedDriver.connect(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at com.mycompany.database.DbInitializer.runScript(DbInitializer.java:143) at com.mycompany.myapp.ApplicationRunner.initialiseDb(ApplicationRunner.ja va:817) at com.mycompany.myapp.ApplicationRunner.startApplication(ApplicationRunne r.java:945) at com.mycompany.myapp.ApplicationRunner.run(ApplicationRunner.java:581) at com.mycompany.myapp.ApplicationRunner.main(ApplicationRunner.java:552) at com.mycompany.myapp.ApplicationLoader.main(ApplicationLoader.java:90) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.sun.javaws.Launcher.executeApplication(Unknown Source) at com.sun.javaws.Launcher.executeMainClass(Unknown Source) at com.sun.javaws.Launcher.doLaunchApp(Unknown Source) at com.sun.javaws.Launcher.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Caused by: java.sql.SQLException: Failed to start database 'C:\Users\Administrator\.myapp\myapp_db' with class loader com.sun.jnlp.JNLPClassLoader@1bef5e8, see the next exception for details. at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source) at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAc rossDRDA(Unknown Source) ... 27