Hi Everyone,
I am having an issue with the SYSCS_UTIL.SYSCS_COMPRESS_TABLE operation on a
large table in Derby 10.8.2.2.
Statement stmt = null;
CallableStatement cs = null;
try {
String sql = "select schemaname, tablename from sys.sysschemas s, "
+ "sys.systables t where s.schemaid=t.schemaid and
t.tabletype='T'";
stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(sql);
cs = con.prepareCall("call SYSCS_UTIL.SYSCS_COMPRESS_TABLE(?, ?,
?)");
while (rs.next()) {
String schema = rs.getString(1).trim();
String table = rs.getString(2).trim();
log("Compressing " + schema + "." + table + "...");
cs.setString(1, schema);
cs.setString(2, table);
cs.setShort(3, (short) 1);
cs.execute();
}
}
finally {
if (stmt != null) {
stmt.close();
}
if (cs != null) {
cs.close();
}
}
The above code, successfully runs over 3 of 20 some tables, then hits the
4th table with over 2 million records. After working on this table for
about 5 minutes, the process terminates with an SQLException wrapping a NPE.
This happened in a production instance and I have not yet set up a
reproduction in a development environment. I'm wondering if anyone has any
thoughts based on the stacktrace below?
com.linoma.gaservices.upgrader.UpgradeException: Java exception: ':
java.lang.NullPointerException'.
at
com.linoma.gaservices.upgrader.DefaultUpgrader.upgrade(DefaultUpgrader.java:
227)
at
com.linoma.gaservices.upgrader.UnixUpgrader.upgrade(UnixUpgrader.java:32)
at
com.linoma.gaservices.upgrader.UpgradeStarter.startUpgrade(UpgradeStarter.ja
va:25)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79
)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl
.java:43)
at java.lang.reflect.Method.invoke(Method.java:618)
at my.app.upgrader.Startup.main(Startup.java:72)
Caused by: java.sql.SQLException: Java exception: ':
java.lang.NullPointerException'.
at
org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown
Source)
at
org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.Util.javaException(Unknown
Source)
at
org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknow
n Source)
at
org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown
Source)
at
org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedConnection.<init>(Unknown
Source)
at
org.apache.derby.jdbc.Driver30.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(DriverManager.java:572)
at
java.sql.DriverManager.getConnection(DriverManager.java:218)
at
my.app.upgrader.db.DerbyDatabaseUpgrader.closeDB(DerbyDatabaseUpgrader.java:
99)
at
my.app.upgrader.DefaultUpgrader.upgrade(DefaultUpgrader.java:223)
... 7 more
Caused by: java.lang.NullPointerException
at
org.apache.derby.impl.store.raw.data.BaseDataFileFactory.openContainer(Unkno
wn Source)
at
org.apache.derby.impl.store.raw.data.BaseDataFileFactory.openContainer(Unkno
wn Source)
at
org.apache.derby.impl.store.raw.xact.Xact.openContainer(Unknown Source)
at
org.apache.derby.impl.store.access.conglomerate.OpenConglomerate.init(Unknow
n Source)
at org.apache.derby.impl.store.access.heap.Heap.open(Unknown
Source)
at
org.apache.derby.impl.store.access.RAMTransaction.openConglomerate(Unknown
Source)
at
org.apache.derby.impl.store.access.RAMTransaction.openConglomerate(Unknown
Source)
at
org.apache.derby.impl.sql.catalog.DataDictionaryImpl.getDescriptorViaIndexMi
nion(Unknown Source)
at
org.apache.derby.impl.sql.catalog.DataDictionaryImpl.getDescriptorViaIndex(U
nknown Source)
at
org.apache.derby.impl.sql.catalog.DataDictionaryImpl.locateSchemaRow(Unknown
Source)
at
org.apache.derby.impl.sql.catalog.DataDictionaryImpl.getSchemaDescriptor(Unk
nown Source)
at
org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.initDefaultS
chemaDescriptor(Unknown Source)
at
org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.initialize(U
nknown Source)
at
org.apache.derby.impl.db.BasicDatabase.setupConnection(Unknown Source)
at
org.apache.derby.impl.jdbc.TransactionResourceImpl.startTransaction(Unknown
Source)
at
org.apache.derby.impl.jdbc.EmbedConnection.checkUserIsNotARole(Unknown
Source)
at
org.apache.derby.impl.jdbc.EmbedConnection.checkUserCredentials(Unknown
Source)
... 15 more
Regards,
Erick