Hi,

If you get such problems, it's typically a database corruption. There
are some known reasons to get such problems, for example by disabling
the transaction log; it's also possible that there is still a bug in
the database engine in this area. To recover the data, use the tool
org.h2.tools.Recover to create the SQL script file, and then re-create
the database using this script.

Some known causes are:

With version 1.3.162 and older: on out of disk space, the database can
get corrupt sometimes, if later write operations succeed. The same
problem happens on other kinds of I/O exceptions (where one or some of
the writes fail, but subsequent writes succeed). Now the file is
closed on the first unsuccessful write operation, so that later
requests fail consistently.

Important corruption problems were fixed in version 1.2.135 and
version 1.2.140 (see the change log). Known causes for corrupt
databases are: if the database was created or used with a version
older than 1.2.135, and the process was killed while the database was
closing or writing a checkpoint. Using the transaction isolation level
READ_UNCOMMITTED (LOCK_MODE 0) while at the same time using multiple
connections. Disabling database file protection using (setting
FILE_LOCK to NO in the database URL). Some other areas that are not
fully tested are: Platforms other than Windows XP, Linux, Mac OS X, or
JVMs other than Sun 1.5 or 1.6; the feature MULTI_THREADED; the
features AUTO_SERVER and AUTO_RECONNECT; the file locking method
'Serialized'.

If this is not the problem, I am very interested in analyzing and
solving this problem. Corruption problems have top priority for me.
The questions I typically ask is:

- Did the system ever run out of disk space?
- Could you send the full stack trace of the exception including message text?
- Did you use SHUTDOWN DEFRAG or the database setting DEFRAG_ALWAYS
with H2 version 1.3.159 or older?
- What is your database URL?
- How many connections does your application use concurrently?
- Do you use temporary tables?
- Did you use LOG=0 or LOG=1?
- With which version of H2 was this database created?
    You can find it out using:
    select * from information_schema.settings where name='CREATE_BUILD'
    or have a look in the SQL script created by the recover tool.
- Did the application run out of memory (once, or multiple times)?
- Do you use any settings or special features (for example cache settings,
    two phase commit, linked tables)?
- Do you use any H2-specific system properties?
- Is the application multi-threaded?
- What operating system, file system, and virtual machine
    (java -version) do you use?
- How did you start the Java process (java -Xmx... and so on)?
- Is it (or was it at some point) a networked file system?
- How big is the database (file sizes)?
- How much heap memory does the Java process have?
- Is the database usually closed normally, or is process terminated
    forcefully or the computer switched off?
- Is it possible to reproduce this problem using a fresh database
    (sometimes, or always)?
- Are there any other exceptions (maybe in the .trace.db file)?
    Could you send them please?
- Do you still have any .trace.db files, and if yes could you send them?
- Could you send the .h2.db file where this exception occurs?

Regards,
Thomas



On Tue, Mar 20, 2012 at 10:26 PM, Vasco Visser <[email protected]> wrote:
> I wanted to run a debugger over the H2 source today but haven't been
> able to reproduce this bug. Seems like something undeterministic is
> going on. This is also corroborated by the fact that the problem last
> week occurred with different selections for different database
> instances. So, Last week I had the problem three times in a row, each
> time starting a DB from scratch and now I can't reproduce it. I
> realise this is probably to vague for anyone in the group to says
> something useful about, nevertheless, I want to ask if anyone has any
> input?
>
> regards, Vasco
>
>
> On Sat, Mar 17, 2012 at 8:23 PM, Vasco Visser <[email protected]> wrote:
>> Hi,
>>
>> I'm getting an ArrayIndexOutOfBoundsException in both 1.3.162 and 1.3.164:
>>
>> 03-17 19:33:32 jdbc[2]: exception
>> org.h2.jdbc.JdbcSQLException: General error:
>> "java.lang.ArrayIndexOutOfBoundsException: 0"; SQL statement:
>> SELECT * FROM "SYS_2003652629_mc" ORDER BY "p_T1_ORG_NAME_edi" DESC 
>> [50000-164]
>>        at 
>> org.h2.message.DbException.getJdbcSQLException(DbException.java:329)
>>        at org.h2.message.DbException.get(DbException.java:158)
>>        at org.h2.message.DbException.convert(DbException.java:281)
>>        at org.h2.command.Command.executeQuery(Command.java:191)
>>        at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:173)
>>        at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:152)
>>        at org.h2.server.web.WebApp.getResult(WebApp.java:1311)
>>        at org.h2.server.web.WebApp.query(WebApp.java:1001)
>>        at org.h2.server.web.WebApp$1.next(WebApp.java:964)
>>        at org.h2.server.web.WebApp$1.next(WebApp.java:967)
>>        at org.h2.server.web.WebThread.process(WebThread.java:166)
>>        at org.h2.server.web.WebThread.run(WebThread.java:93)
>>        at java.lang.Thread.run(Thread.java:662)
>> Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
>>        at org.h2.index.PageDataLeaf.getRowAt(PageDataLeaf.java:327)
>>        at org.h2.index.PageDataCursor.nextRow(PageDataCursor.java:97)
>>        at org.h2.index.PageDataCursor.next(PageDataCursor.java:49)
>>        at org.h2.index.IndexCursor.next(IndexCursor.java:238)
>>        at org.h2.table.TableFilter.next(TableFilter.java:353)
>>        at org.h2.command.dml.Select.queryFlat(Select.java:513)
>>        at org.h2.command.dml.Select.queryWithoutCache(Select.java:618)
>>        at org.h2.command.dml.Query.query(Query.java:297)
>>        at org.h2.command.dml.Query.query(Query.java:267)
>>        at org.h2.command.dml.Query.query(Query.java:36)
>>        at org.h2.command.CommandContainer.query(CommandContainer.java:82)
>>        at org.h2.command.Command.executeQuery(Command.java:187)
>>        ... 9 more
>>
>>
>> I haven't been able to reproduce on simple data. The table has 1
>> million rows and about 160 cols. About fifty cols are varchar(255), 10
>> cols Integer and the rest is tinyint (at this point all null values).
>> There is a one field auto increment primary key.
>>
>> I noticed that the reducing the size of the selection enough makes
>> that the problem does not occur. I also noticed that the actual size
>> of the selection starting from which the problem occurs various for
>> different instances of the database (building the table multiple
>> times, each time with the same content). Also important is that the
>> order by seems not relevant at all, that is, the problem also occurs
>> when selecting without ordering (I used a query with an order by
>> because the web interface has an implicit limit which makes the
>> problem not occur without the order by). The data I use cannot be
>> posted in the group. If this is a bug in H2 and you need anything from
>> me wrt the data used, then please contact me directly.
>>
>> Kind regards,
>>
>> Vasco Visser
>
> --
> You received this message because you are subscribed to the Google Groups "H2 
> Database" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> For more options, visit this group at 
> http://groups.google.com/group/h2-database?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups "H2 
Database" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/h2-database?hl=en.

Reply via email to