Hi,

I'm not sure (well, I don't think) the problem here is the limit on the
number of LOBs per result set. It might be something completely different.

Is it reproducible with a newly created database? If it's an existing
database, could you find out which version was used to create the database?
To find out, run

SELECT * FROM INFORMATION_SCHEMA.SETTINGS
where name='CREATE_BUILD'

> "cant truncate the transaction log"

I know this error message is written to the log sometimes, even thought the
transaction log could be truncated. I'm currently investigating that. I
think it's also not related to the problem - it's just an bug this message
is logged.

> the connection has not been closed

Well, maybe it was closed / has closed, but since you are using
AUTO_RECONNECT=TRUE is might have been re-opened automatically. Could you
try not using the auto-reconnect feature? Just to reduce the complexity of
the problem... The auto re-connect might have an influence.

I'm not sure if it could be related to MVCC. If you can reproduce the
problem (with a fresh database), but only with MVCC enabled, then we need
to investigate in that.

Regards,
Thomas





On Thu, Jun 14, 2012 at 8:35 AM, Noel Grandin
<[email protected]<javascript:;>>
wrote:
> This is a known issue.
> Pretty much all you can do right now is to limit the number LOBs per
> ResultSet that you try and fetch.
>
> I have a fix in mind that involves HMAC and cryptographic cookies, but I
> won't have time to fix it in the near future.
>
>
> On 2012-06-13 08:33, Eoin Byrne wrote:
>>
>> Hi
>>
>> I'm getting an Exception during a very long set of tests - the issue
>> sometimes doesn't happen and sometimes happens in different places but
>> the end result is always the same.
>>
>> The setup:
>>
>> H2 is started programatically by a host process in server mode, this
>> process does the buulk of the access.  We have other processes that
>> connect and disconnect through out the tests for various different
>> reasons and an application server that also uses the DB.
>>
>> One of the processes is a bulk load process that makes a number of
>> inserts into H2 and this process seesm to be the issue.  It runs
>> without issue but afterwards the host process can no longer access the
>> DB.
>>
>> We generally get 1 or 2 instances of:
>>
>> org.h2.message.DbException: IO Exception: "java.io.IOException:
>> org.h2.jdbc.JdbcSQLException: IO Exception: ""Missing lob:
>> 6008"" [90028-167]" [90028-167]
>>        at org.h2.message.DbException.convert(DbException.java:269)
>>        at org.h2.engine.SessionRemote.done(SessionRemote.java:572)
>>        at org.h2.engine.SessionRemote.readLob(SessionRemote.java:701)
>>        at org.h2.store.LobStorage$RemoteInputStream.read(LobStorage.java:
>> 318)
>>        at java.io.BufferedInputStream.read1(BufferedInputStream.java:256)
>>        at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
>>        at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
>>        at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
>>        at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
>>        at java.io.InputStreamReader.read(InputStreamReader.java:167)
>>        at java.io.BufferedReader.read1(BufferedReader.java:185)
>>        at java.io.BufferedReader.read(BufferedReader.java:261)
>>        at java.io.BufferedReader.fill(BufferedReader.java:136)
>>        at java.io.BufferedReader.read1(BufferedReader.java:187)
>>        at java.io.BufferedReader.read(BufferedReader.java:261)
>>        at java.io.Reader.read(Reader.java:123)
>> .....
>> Caused by: org.h2.jdbc.JdbcSQLException: IO Exception:
>> "java.io.IOException: org.h2.jdbc.JdbcSQLException: IO Exception:
>> ""Missing lob: 6008"" [90028-167]" [90028-167]
>>        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:273)
>>        at
>> org.h2.server.TcpServerThread.sendError(TcpServerThread.java:211)
>>        at org.h2.server.TcpServerThread.run(TcpServerThread.java:151)
>>        at java.lang.Thread.run(Thread.java:619)
>> Caused by: java.io.IOException: org.h2.jdbc.JdbcSQLException: IO
>> Exception: "Missing lob: 6008" [90028-167]
>>        at
>> org.h2.message.DbException.convertToIOException(DbException.java:
>> 348)
>>        at org.h2.store.LobStorage.getInputStream(LobStorage.java:571)
>>        at org.h2.server.TcpServerThread.process(TcpServerThread.java:407)
>>        at org.h2.server.TcpServerThread.run(TcpServerThread.java:149)
>>        ... 1 more
>> Caused by: org.h2.jdbc.JdbcSQLException: IO Exception: "Missing lob:
>> 6008" [90028-167]
>>        at
org.h2.message.DbException.getJdbcSQLException(DbException.java:
>> 329)
>>        at org.h2.message.DbException.get(DbException.java:169)
>>        at org.h2.message.DbException.get(DbException.java:146)
>>        at org.h2.store.LobStorage.getInputStream(LobStorage.java:566)
>>        ... 3 more
>>
>> Followed by this everytime we try to access H2:
>>
>> rg.h2.jdbc.JdbcSQLException: Database is already closed (to disable
>> automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the
>> db URL) [90121-167]
>>        at
org.h2.message.DbException.getJdbcSQLException(DbException.java:
>> 329)
>>        at org.h2.message.DbException.get(DbException.java:169)
>>        at org.h2.message.DbException.get(DbException.java:146)
>>        at org.h2.message.DbException.get(DbException.java:135)
>>        at
org.h2.jdbc.JdbcConnection.checkClosed(JdbcConnection.java:1386)
>>        at org.h2.jdbc.JdbcStatement.checkClosed(JdbcStatement.java:927)
>>        at
>> org.h2.jdbc.JdbcPreparedStatement.checkClosed(JdbcPreparedStatement.java:
>> 1523)
>>        at org.h2.jdbc.JdbcStatement.checkClosed(JdbcStatement.java:901)
>>        at
>>
org.h2.jdbc.JdbcPreparedStatement.executeQuery(JdbcPreparedStatement.java:
>> 102)
>>
>> The host process lives on for a few hours and every access gets the DB
>> closed message.
>>
>> There are a few other things worth mentioning - the host process uses
>> only a single connection so I guess the missing lob issue is causing
>> the connection to get closed or at least the session object to get
>> marked as closed, I could reset the connection when I've gotten the
>> above error but thats just working around the real problem.
>>
>> Some other info:
>>
>> There is some info in the trace log:
>> 06-13 01:09:38 pageStore: Transaction log could not be truncated;
>> size: 16 MB
>> So - on to my questions :)
>>
>> And saving the best for last:
>>
>> The issue only happens on one of the 2 test machines we are using, one
>> is a Solaris X86 box which has no issues the other is a RHL x86 box
>> that is showing the issue.  The DB file size on the problem box is
>> just under 500MB while the healthy one is 71 MB.  This isn't really
>> comparing like with like because the healthy box has had more tests
>> run on it because it didn't fail early but its definitley worth
>> mentioning.  The log entries on both boxes have the same "cant
>> truncate the transaction log" errors.
>>
>> I'm not aware of any client differences caused by the different envs
>> and while there is some C code in play here all the code I suspect
>> (all the inserting clients and the host process itself) is all java.
>>
>> Both systems are using local hard disks for the DB and the connection
>> string we are using is:
>>
>> jdbc:h2:tcp://host:port//file
>> path;AUTO_RECONNECT=TRUE;MVCC=TRUE;JMX=TRUE;LOCK_TIMEOUT=10000;
>>
>>
>> Has anyone any idea how to fix the missing lob issue or what kind of
>> application behaviour might be causing the problem?  This code is from
>> a very large project being ported over from Oracle so we are certain
>> it works but obviously there need to be a few more changes made.
>>
>> In addition to this - from a H2 perspective it might be worth
>> considering changing the error message a little, the JVM is definitley
>> not shutting down in the above case and afaik the connection has not
>> been closed by the application although I havn't had a chance to 100%
>> confirm that.
>>
>> If you made it this far - thanks for reading :)
>>
>
> --
> 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]<javascript:;>
.
> To unsubscribe from this group, send email to
> [email protected] <javascript:;>.
> 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