You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-user@db.apache.org by Phil <ph...@vodafone.ie> on 2010/08/10 20:04:52 UTC

What to do with XSDG0 error?

Hi,

I've been getting the following error in my Java application with Derby
10.4.2 in embedded mode on Windows XP (Java 1.6.0_20)

XSDG0 : Page Page(1541,Container(0, 2209)) could not be read from disk. 

Here's what I've found from my application logs:

- Thread A gets the following exception: Failed to recover corrupt cache
entry
- Threads B, C, D etc. successfully query the database
- Thread A tries to query the database and gets the XSDG0 error

As an aside, the cache error message comes from the JVM itself. I
thought it might relate to this bug:
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6898702 but it's
happening on machines that have only ever run 1.6.0_20 so it may be a
previously unreported bug or else something weird in my environment.


So, my three questions are:

1. Based on the above, it looks like I can blame the Derby error
condition on the fact that Thread A was interrupted. Is this correct? 

2. If I know in advance that threads which access the database are going
to be prone to interruption, is there any configuration option that I
can apply to the connection to mitigate the effect of the interruption?

3. I have naively tried to check for XSDG0 and recreate the connection
whenever this occurs. This didn't work, I got the following error when I
tried to reconnect:

Failed to start database 'c:\myapp\mydb', see the next exception for
details.

and the next exception was:

[08003] : No current connection.

which was thrown by the line:

conn = DriverManager.getConnection(url, jdbcProps);

So, is there something I need to do to clean up the old connection
before I can create any new ones? (the current clean procedure consists
of trying to commit the old connection which fails and then, closing it
which doesn't report any errors).

Thanks,
 -Phil