hi Thomas and Team,

why the recovery step is creating table names with O_NUMBER pattern, 
instead of actual table name?

On Tuesday, January 13, 2015 at 10:47:45 PM UTC-8 [email protected] 
wrote:

> Hi,
>
> As why the database is so large:
>
> I got the large database and ran the Recover tool on it. The main problem 
> seems to be a huge number of references to a small LOB (130 bytes). Such 
> small LOBs should be inlined, which means there would be no reference. I'm 
> not quite sure, but I think I fixed this / changed the behavior in version 
> 1.4.184 such that LOBs are always inlined now. Could you try again with 
> version 1.4.184 if the database still gets that big? If yes, we would need 
> to know LOBs are created. Are you using anything special, for example the 
> JDBC API Connection.createBlob / createClob?
>
>
> Details:
>
> > CREATE_BUILD 182
> So, the database was created with version 1.4.182.
>
> > grep "INSERT INTO O_" ecall.h2.sql | wc -l
> > 33'057'364
>
> The number of "insert" statements: 33 millions.
>
> Those are the LOB tables:
>
> > INSERT INTO INFORMATION_SCHEMA.LOBS SELECT * FROM O_2;
> > INSERT INTO INFORMATION_SCHEMA.LOB_MAP SELECT * FROM O_6;
> > INSERT INTO INFORMATION_SCHEMA.LOB_DATA SELECT * FROM O_10;
>
> > grep "INSERT INTO O_10 " ecall.h2.sql | wc -l
> > 3269
>
> So, actually not much LOB_DATA.
>
> > grep "INSERT INTO O_6 " ecall.h2.sql | wc -l
> > 16'471'645
> > grep "INSERT INTO O_2 " ecall.h2.sql | wc -l
> > 16'456'153
>
> Those are references to LOBs: a huge number (16 million references). It 
> looks like most of those LOBs are very very small (130 bytes I think), and 
> are temporary LOBs (type = -3).
>
> ------------
>
> As for the ArrayIndexOutOfBoundsException: the root cause is:
>
> Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
> at org.h2.index.PageDataLeaf.getRowAt(PageDataLeaf.java:332)
> at org.h2.index.PageDataCursor.nextRow(PageDataCursor.java:101)
> at org.h2.index.PageDataCursor.next(PageDataCursor.java:67)
> at org.h2.result.ResultTempTable.next(ResultTempTable.java:271)
> at org.h2.result.LocalResult.next(LocalResult.java:242)
> at org.h2.jdbc.JdbcResultSet.nextRow(JdbcResultSet.java:3231)
> at org.h2.jdbc.JdbcResultSet.next(JdbcResultSet.java:122)
>
> There seems to be a a corruption in the database file (PageStore). I 
> didn't further analyze this yet, I think the "large database file" issue is 
> more urgent in this case.
>
>
> Regards,
> Thomas
>
> On Sun, Jan 4, 2015 at 11:15 AM, Thomas Mueller <[email protected]> 
> wrote:
>
>> Hi,
>>
>> I think part of the exception stack trace is missing (after the last 
>> "caused by"). Could you post it as well?
>>
>> > Unfortunally I see that now the db is 1.3GB
>>
>> Did you try using the Recover tool? Could you run it, and post the last 
>> 20 lines of the resulting *.sql file please?
>>
>> Regards,
>> Thomas
>>
>>
>>
>>
>>
>> On Wed, Dec 31, 2014 at 12:09 PM, Daniele Renda <[email protected]> 
>> wrote:
>>
>>> Hi,
>>> I'm using h2 db with my application. 
>>> This is the connection string:
>>>
>>>
>>> jdbc:h2:{database};AUTO_SERVER=TRUE;MV_STORE=FALSE;MVCC=TRUE;DEFRAG_ALWAYS=TRUE;
>>>
>>> I'm using this approach to avoid problems I had in the past with mv 
>>> store as you suggested me.
>>> All worked fine in this 3 weeks; my db has 56 tables and now there are 
>>> many rows (about 125.000).
>>>
>>> Unfortunally I see that now the db is 1.3GB!!!! I'm sure that data 
>>> inside are not so big, so I think there is some problem with lob in h2.
>>>
>>> To make a test I run 'SCRIPT TO 'C:\backup.sql'. The first time the 
>>> command worked and I get a sql file of about 75Mb. Because it was just a 
>>> test I removed that file and I repeated the comman but now I've this 
>>> Exception:
>>>
>>>
>>> Caused by: java.lang.ArrayIndexOutOfBoundsException
>>>> 12-31 11:54:04 jdbc[3]: exception
>>>> org.h2.jdbc.JdbcSQLException: IO Exception: "java.io.IOException: 
>>>> java.lang.ArrayIndexOutOfBoundsException"; "lob: null table: 62 id: 
>>>> 753781"; SQL statement:
>>>> SCRIPT TO 'C:\backup.sql' [90031-184]
>>>>     at org.h2.message.DbException.getJdbcSQLException(DbException.java:
>>>> 345)
>>>>     at org.h2.message.DbException.get(DbException.java:168)
>>>>     at org.h2.message.DbException.convertIOException(DbException.java:
>>>> 330)
>>>>     at org.h2.value.ValueLobDb.getInputStream(ValueLobDb.java:394)
>>>>     at org.h2.value.ValueLobDb.getReader(ValueLobDb.java:377)
>>>>     at org.h2.value.ValueLobDb.getString(ValueLobDb.java:292)
>>>>     at org.h2.value.ValueLobDb.getSQL(ValueLobDb.java:416)
>>>>     at org.h2.command.dml.ScriptCommand.generateInsertValues(
>>>> ScriptCommand.java:426)
>>>>     at org.h2.command.dml.ScriptCommand.query(ScriptCommand.java:300)
>>>>     at org.h2.command.CommandContainer.query(CommandContainer.java:90)
>>>>     at org.h2.command.Command.executeQuery(Command.java:197)
>>>>     at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:179
>>>> )
>>>>     at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:158)
>>>>     at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCStatementImpl.execute
>>>> (JDBCStatementImpl.java:369)
>>>>     at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCStatementImpl.
>>>> executeStatement(JDBCStatementImpl.java:155)
>>>>     at org.jkiss.dbeaver.runtime.sql.SQLQueryJob.executeSingleQuery(
>>>> SQLQueryJob.java:363)
>>>>     at org.jkiss.dbeaver.runtime.sql.SQLQueryJob.extractData(
>>>> SQLQueryJob.java:633)
>>>>     at org.jkiss.dbeaver.ui.editors.sql.SQLEditor$QueryResultsProvider.
>>>> readData(SQLEditor.java:1169)
>>>>     at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataPumpJob.run
>>>> (ResultSetDataPumpJob.java:132)
>>>>     at org.jkiss.dbeaver.runtime.AbstractJob.run(AbstractJob.java:91)
>>>>     at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
>>>> Caused by: java.io.IOException: java.lang.
>>>> ArrayIndexOutOfBoundsException
>>>>     at org.h2.message.DbException.convertToIOException(DbException.java
>>>> :364)
>>>>     at org.h2.store.LobStorageBackend.getInputStream(LobStorageBackend.
>>>> java:345)
>>>>     at org.h2.value.ValueLobDb.getInputStream(ValueLobDb.java:392)
>>>>     ... 17 more
>>>> Caused by: java.lang.ArrayIndexOutOfBoundsException
>>>>
>>>>
>>>>
>>>>
>>> At this point I've 2 questions:
>>>
>>>
>>>    1. There is a way to make a sql backup of the actual db?
>>>    2. Why the db is 1.3Gb and the first sql backup was only 75Mb? 
>>>
>>> Thanks very much
>>>
>>>
>>> Daniele Renda
>>>
>>> -- 
>>> You received this message because you are subscribed to the Google 
>>> Groups "H2 Database" group.
>>> To unsubscribe from this group and stop receiving emails from it, send 
>>> an email to [email protected].
>>> To post to this group, send email to [email protected].
>>> Visit this group at http://groups.google.com/group/h2-database.
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>>
>

-- 
You received this message because you are subscribed to the Google Groups "H2 
Database" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/h2-database/dcd398ad-1ad3-4b19-81df-c72a8b1a85bdn%40googlegroups.com.

Reply via email to