Why when the disk over the place database destroyed? Why restore the database is not possible?

54 views
Skip to first unread message

konovalov

unread,
Sep 7, 2010, 7:01:58 AM9/7/10
to H2 Database
Hi!
We use h2-1.2.135.jar.

1) While the program worked on the drive over the place - got
IOException.
2) We have cleared space on the disk, run the application - we get
JdbcSQLException "java.lang.ArrayIndexOutOfBoundsException: -2766".
3) Recover database fails:
C:\>java -cp h2*.jar org.h2.tools.Recover -db "cash"
Error: java.lang.ArrayIndexOutOfBoundsException: -2766

Why when the disk over the place database destroyed? Why restore the
database is not possible?
Below under items 1 and 2 show stackTrace.

1 item:
23:41:09,044 [pool-11-thread-1] ERROR JDBCExceptionReporter - Ошибка
ввода/вывода: "java.io.IOException: No space left on device"; "/mnt/
hda3/tce/storage/crystal-cash/data/cash.h2.db"
IO Exception: "java.io.IOException: No space left on device"; "/mnt/
hda3/tce/storage/crystal-cash/data/cash.h2.db"; SQL statement:
delete from CG_Product where id=? [90031-135]
log4j:ERROR Failed to flush writer,
java.io.IOException: No space left on device
at java.io.FileOutputStream.writeBytes(Native Method)
at java.io.FileOutputStream.write(Unknown Source)
at sun.nio.cs.StreamEncoder.writeBytes(Unknown Source)
at sun.nio.cs.StreamEncoder.implFlushBuffer(Unknown Source)
at sun.nio.cs.StreamEncoder.implFlush(Unknown Source)
at sun.nio.cs.StreamEncoder.flush(Unknown Source)
at java.io.OutputStreamWriter.flush(Unknown Source)
at org.apache.log4j.helpers.QuietWriter.flush(QuietWriter.java:58)
at org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:316)
at
org.apache.log4j.RollingFileAppender.subAppend(RollingFileAppender.java:
263)
at org.apache.log4j.WriterAppender.append(WriterAppender.java:160)
at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:
251)
at
org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:
66)
at org.apache.log4j.Category.cal23:41:09,200 [pool-11-thread-1] ERROR
AbstractFlushingEventListener - Could not synchronize database state
with session
org.hibernate.exception.GenericJDBCException: Could not execute JDBC
batch update
at
org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:
126)
at
org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:
114)
at
org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:
66)
at
org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:
275)
at
org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:
114)
at
org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:
109)
at
org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:
2515)
at
org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:
2725)
at
org.hibernate.action.EntityDeleteAction.execute(EntityDeleteAction.java:
97)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:
263)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:
172)
at
org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:
321)
at
org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:
50)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365)
at
org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:
137)
at
ru.crystals.pos.check.service.ServicesImpl.deleteOldDocuments(Unknown
Source)
at ru.crystals.pos.check.service.ServicesImpl.closeShift(Unknown
Source)
at ru.crystals.pos.check.service.SyncToAsync.closeShift(Unknown
Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at ru.crystals.pos.ProxyClass$1.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown
Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: org.h2.jdbc.JdbcBatchUpdateException: Ошибка ввода/вывода:
"java.io.IOException: No space left on device"; "/mnt/hda3/tce/storage/
crystal-cash/data/cash.h2.db"
IO Exception: "java.io.IOException: No space left on device"; "/mnt/
hda3/tce/storage/crystal-cash/data/cash.h2.db"; SQL statement:
delete from CG_Product where id=? [90031-135]
at
org.h2.jdbc.JdbcPreparedStatement.executeBatch(JdbcPreparedStatement.java:
1098)
at
org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:
70)
at
org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:
268)
... 24 more

00:10:16,329 [pool-11-thread-3] ERROR JDBCExceptionReporter - Ошибка
ввода/вывода: "java.io.IOException: No space left on device"; "/mnt/
hda3/tce/storage/crystal-cash/data/cash.h2.db"
IO Exception: "java.io.IOException: No space left on device"; "/mnt/
hda3/tce/storage/crystal-cash/data/cash.h2.db"; SQL statement:
insert into CG_Product (deleted, guid, version, barCode,
barCodeToSearch, comment, id_Country, id_Group, hash, item,
id_Producer, id_Measure, name, nds, orderField, id_Price,
priceContainInDepart, shelfNum, shelfPlace, shelvingNum, statusField,
id_ProductRef, id) values
(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
[90031-135]
00:10:16,332 [pool-11-thread-3] ERROR JDBCExceptionReporter - Ошибка
ввода/вывода: "java.io.IOException: No space left on device"; "/mnt/
hda3/tce/storage/crystal-cash/data/cash.h2.db"
IO Exception: "java.io.IOException: No space left on device"; "/mnt/
hda3/tce/storage/crystal-cash/data/cash.h2.db"; SQL statement:
insert into CG_Product (deleted, guid, version, barCode,
barCodeToSearch, comment, id_Country, id_Group, hash, item,
id_Producer, id_Measure, name, nds, orderField, id_Price,
priceContainInDepart, shelfNum, shelfPlace, shelvingNum, statusField,
id_ProductRef, id) values
(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
[90031-135]
00:10:16,345 [pool-11-thread-3] ERROR AbstractFlushingEventListener -
Could not synchronize database state with session
org.hibernate.exception.GenericJDBCException: Could not execute JDBC
batch update
at
org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:
126)
at org.hibernate.

2 item:
00:21:38,140 [Thread-2] ERROR SchemaUpdate - could not get database
metadata
org.h2.jdbc.JdbcSQLException: Внутренняя ошибка:
"java.lang.ArrayIndexOutOfBoundsException: -2766"
General error: "java.lang.ArrayIndexOutOfBoundsException:
-2766" [50000-135]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:
327)
at org.h2.message.DbException.get(DbException.java:156)
at org.h2.message.DbException.convert(DbException.java:279)
at org.h2.engine.Database.openDatabase(Database.java:236)
at org.h2.engine.Database.<init>(Database.java:201)
at org.h2.engine.Engine.openSession(Engine.java:56)
at org.h2.engine.Engine.openSession(Engine.java:146)
at org.h2.engine.Engine.getSession(Engine.java:125)
at org.h2.engine.Session.createSession(Session.java:119)
at
org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:
239)
at org.h2.engine.SessionRemote.createSession(SessionRemote.java:217)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:111)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:95)
at org.h2.Driver.connect(Driver.java:58)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at
org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:
133)
at
org.hibernate.tool.hbm2ddl.SuppliedConnectionProviderConnectionHelper.prepare(SuppliedConnectionProviderConnectionHelper.java:
51)
at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:
150)
at
org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:
346)
at
org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:
1327)
at
org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:
867)
at ru.crystals.pos.check.service.ServicesImpl.start(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:
1527)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:
1468)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:
1400)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:
513)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:
450)
at org.springframework.beans.factory.support.AbstractBeanFactory
$1.getObject(AbstractBeanFactory.java:290)
at
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:
222)
at
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:
287)
at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:
189)
at
org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:
322)
at
org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:
106)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:
1308)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:
1067)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:
511)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:
450)
at org.springframework.beans.factory.support.AbstractBeanFactory
$1.getObject(AbstractBeanFactory.java:290)
at
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:
222)
at
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:
287)
at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:
189)
at
org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:
322)
at
org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:
106)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:
1308)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:
1067)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:
511)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:
450)
at org.springframework.beans.factory.support.AbstractBeanFactory
$1.getObject(AbstractBeanFactory.java:290)
at
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:
222)
at
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:
287)
at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:
189)
at
org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:
322)
at
org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:
106)
at
org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveManagedList(BeanDefinitionValueResolver.java:
355)
at
org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:
153)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:
1308)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:
1067)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:
511)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:
450)
at org.springframework.beans.factory.support.AbstractBeanFactory
$1.getObject(AbstractBeanFactory.java:290)
at
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:
222)
at
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:
287)
at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:
193)
at
org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:
699)
at
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:
408)
at
org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:
139)
at
org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:
93)
at ru.crystals.pos.loader.Loader$ThreadSpring.run(Unknown Source)
Caused by: java.lang.ArrayIndexOutOfBoundsException: -2766
at org.h2.compress.CompressLZF.expand(CompressLZF.java:255)
at org.h2.store.PageLog.recover(PageLog.java:261)
at org.h2.store.PageStore.recover(PageStore.java:1081)
at org.h2.store.PageStore.openExisting(PageStore.java:310)
at org.h2.store.PageStore.open(PageStore.java:264)
at org.h2.engine.Database.getPageStore(Database.java:2038)
at org.h2.engine.Database.open(Database.java:533)
at org.h2.engine.Database.openDatabase(Database.java:206)
... 69 more

Thomas Mueller

unread,
Sep 10, 2010, 10:02:31 AM9/10/10
to h2-da...@googlegroups.com
Hi,

This is a bug in the Recover tool, it is now fixed in the trunk. The change is:
http://code.google.com/p/h2database/source/diff?spec=svn2911&r=2911&format=side&path=/trunk/h2/src/main/org/h2/tools/Recover.java

It's strange the database got corrupt because of that - it shouldn't.
I will write test cases for this case, but so far I can't explain how
it could happen. Could you upload the database so I can test it?

Regards,
Thomas

Коновалов Евгений

unread,
Sep 10, 2010, 10:32:22 AM9/10/10
to h2-da...@googlegroups.com, Муравьев Денис
Hi,

Here is a link where you can download the archived database, which collapsed when the disk is over the place.
Which version of the H2 will be corrected Recover tool?

2010/9/10 Thomas Mueller <thomas.to...@gmail.com>

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




--
WBR,
Konovalov Evgeny
Software Engineer

Crystal Service Ltd.
phone  : +7 (812) 331-2255, ext. 7308 

mailto: kono...@crystals.ru
www.crystals.ru

Thomas Mueller

unread,
Sep 17, 2010, 5:21:20 AM9/17/10
to h2-da...@googlegroups.com
Hi,

Thanks! I fixed a problem so that the Recover tool will work in the
next release.

However I didn't have time yet to find out how the database became
corrupt. It's strange. I will have to write special test cases that
simulate out of disk space.

Regards,
Thomas

Reply all
Reply to author
Forward
0 new messages