Hi,

I have a Java application that uses a H2Database with Hibernate. The
problem is, sometimes this database gets corrupted.  Probably the
problem is mine, because sometimes there are power failures so the
application is not properly closed. It cannot be avoided.

But after accepting that the database will be sometimes corrupted, is
there any way to recover it as much as posible?

I have read that the recovery tool will be helpful, but on
http://www.h2database.com/html/advanced.html it says that "The recover
tool can be used to extract the contents of a data file[...]". As data
file it means the whole database? If I run the recovery tool and then
do a runscript, the database will be recovered? Should I delete the
lock file first?

In case the type of corruption is relevant, the exception trace is
this:

org.hibernate.exception.GenericJDBCException: Cannot open connection
        at
org.hibernate.exception.SQLStateConverter.handledNonSpecificException
(SQLStateConverter.java:126)
        at org.hibernate.exception.SQLStateConverter.convert
(SQLStateConverter.java:114)
[...]
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: org.h2.jdbc.JdbcSQLException: General error:
java.lang.RuntimeException: rowcount remaining=-49 SYS [50000-100]
        at org.h2.message.Message.getSQLException(Message.java:103)
        at org.h2.message.Message.convert(Message.java:257)
        at org.h2.engine.Database.<init>(Database.java:231)
        at org.h2.engine.Engine.openSession(Engine.java:57)
        at org.h2.engine.Engine.openSession(Engine.java:126)
        at org.h2.engine.Engine.getSession(Engine.java:109)
        at org.h2.server.TcpServerThread.run(TcpServerThread.java:111)
        at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.RuntimeException: rowcount remaining=-49 SYS
        at org.h2.message.Message.getInternalError(Message.java:179)
        at org.h2.table.TableData.addIndex(TableData.java:202)
        at org.h2.engine.Database.open(Database.java:582)
        at org.h2.engine.Database.<init>(Database.java:212)
        ... 5 more

        at org.h2.engine.SessionRemote.done(SessionRemote.java:493)
        at org.h2.engine.SessionRemote.initTransfer(SessionRemote.java:
111)
        at org.h2.engine.SessionRemote.connectServer
(SessionRemote.java:316)
        at org.h2.engine.SessionRemote.connectEmbeddedOrServer
(SessionRemote.java:227)
        at org.h2.engine.SessionRemote.createSession
(SessionRemote.java:221)
        at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:103)
        at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:87)
        at org.h2.Driver.connect(Driver.java:57)
        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.jdbc.ConnectionManager.openConnection
(ConnectionManager.java:446)
        ... 24 more



Thanks :)

--~--~---------~--~----~------------~-------~--~----~
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