This looks like a bug to me. From the information posted it looks like
the error is coming from the internal split code of the btree. The bug
is very likely to be very data dependent and order of data insert
dependent.
I would be interested in debugging this problem if you are interested in
posting more information about it.
The best case would be to just post the old bad db, and insert that
reproduces the problem. Along with some info on what version you are
using. Even the "un-bootable" db would be a big help.
If you can't do that, I could ask some more questions.
My guess is that you have index keys that are very large when compared
to page size of the index. Even if this problem is fixed you may still
have insert problems if your key's get too big. You may want to
increase the page size of your index.
BALDWIN, ALAN J [AG-Contractor/1000] wrote:
Hi all,
I'm wondering if anyone knows a resolution for the below problem:
We are getting the "ERROR XSDA3 (Record cannot be updated or inserted due to
lack of space on the page)" when we try to execute an INSERT statement on a
cloudscape table via our Java Application. The table that we are inserting
into has 4128 rows before the insert.
(Stack trace is at the end of this email). After that any database access
from the application causes the following error:
"Could not open XXXXX database: java.sql.SQLException: Java exception: ':
java.lang.ArrayIndexOutOfBoundsException'."
If we exit out of the application, we are no longer able to connect to the
database. We get the following exception:
java.sql.SQLException: Failed to start database 'SeedTrakDB', see the next
exception for details.
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.newEmbedSQLException(Unknown
Source)
at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown
Source)
at
org.apache.derby.impl.jdbc.EmbedConnection.newSQLException(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.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:512)
at java.sql.DriverManager.getConnection(DriverManager.java:193)
We tried adding the following two properties in the service.properties file
of the database but that did not help:
derby.storage.pageSize=32768
derby.storage.pageReservedSpace=80
Stack Trace:
ERROR XSDA3: Limitation: Record cannot be updated or inserted due to lack of
space on the page. Use the parameters derby.storage.pageSize and/or
derby.storage.pageReservedSpace to work around this limitation.
at
org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
at
org.apache.derby.impl.store.raw.data.CopyRowsOperation.writeOptionalDataToBu
ffer(Unknown Source)
at
org.apache.derby.impl.store.raw.data.CopyRowsOperation.<init>(Unknown
Source)
at
org.apache.derby.impl.store.raw.data.LoggableActions.actionCopyRows(Unknown
Source)
at org.apache.derby.impl.store.raw.data.BasePage.copyInto(Unknown
Source)
at
org.apache.derby.impl.store.raw.data.BasePage.copyAndPurge(Unknown Source)
at
org.apache.derby.impl.store.access.btree.LeafControlRow.splitFor(Unknown
Source)
at
org.apache.derby.impl.store.access.btree.BranchControlRow.splitFor(Unknown
Source)
at
org.apache.derby.impl.store.access.btree.BTreeController.start_xact_and_dosp
lit(Unknown Source)
at
org.apache.derby.impl.store.access.btree.BTreeController.doIns(Unknown
Source)
at
org.apache.derby.impl.store.access.btree.BTreeController.insert(Unknown
Source)
at
org.apache.derby.impl.store.access.btree.index.B2IController.insert(Unknown
Source)
at
org.apache.derby.impl.sql.execute.IndexChanger.insertAndCheckDups(Unknown
Source)
at org.apache.derby.impl.sql.execute.IndexChanger.doInsert(Unknown
Source)
at org.apache.derby.impl.sql.execute.IndexChanger.insert(Unknown
Source)
at org.apache.derby.impl.sql.execute.IndexSetChanger.insert(Unknown
Source)
at
org.apache.derby.impl.sql.execute.RowChangerImpl.insertRow(Unknown Source)
at
org.apache.derby.impl.sql.execute.InsertResultSet.normalInsertCore(Unknown
Source)
at org.apache.derby.impl.sql.execute.InsertResultSet.open(Unknown
Source)
at
org.apache.derby.impl.sql.GenericPreparedStatement.execute(Unknown Source)
at
org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(Unknown Source)
at
org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(Unknown
Source)
at
org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeUpdate(Unknown
Source)
Regards,
-Alan Baldwin-
---------------------------------------------------------------------------------------------------------
This e-mail message may contain privileged and/or confidential information, and
is intended to be received only by persons entitled to receive such
information. If you have received this e-mail in error, please notify the
sender immediately. Please delete it and all attachments from any servers, hard
drives or any other media. Other use of this e-mail by you is strictly
prohibited.
All e-mails and attachments sent and received are subject to monitoring, reading and archival by
Monsanto. The recipient of this e-mail is solely responsible for checking for the presence of
"Viruses" or other "Malware". Monsanto accepts no liability for any damage
caused by any such code transmitted by or accompanying this e-mail or any attachment.
---------------------------------------------------------------------------------------------------------