Are there any reasons why h2 database shouldn't be used in production? Are there any reasons why h2 database shouldn't be used in production? database database

Are there any reasons why h2 database shouldn't be used in production?


The main reasons not to use H2 (or HSQLDB, or Derby) for production are:

  • Probability of critical bugs: compared to the 'big' databases Oracle, IBM DB 2, MS SQL Server, MySQL, PostgreSQL, the Java databases are relatively new and therefore possibly not as stable (have bugs). Please note this is true for all newer products, including NoSQL databases, and new releases of the 'big' databases. Generally, the more a product is tested, the less the probability of bugs. Of course it depends on your use case whether it makes sense to pay (possibly a lot of money) for this advantage. In any case you will need to backup the data, in case of hardware failure for example.

  • Missing features and optimizations: the 'big' databases have more features and optimizations for special use cases. Whether or not you need those features is up to you.

  • Commercial support: it's easier to get support for bigger databases. Please note commercial support is available for H2 as well. HSQLDB also provides commercial support. IBM used to provide support for Apache Derby (well, IBM Cloudscape), but I believe they stopped.


In my personal experience, H2 version 1.2.147 seems very reliable, 100% sucess in about 60 installations, but my clients only have relatively small databases(400 MB are the bigger sizes) and my program uses only one connection(lol), only recently I started to use more than one connection but with multi_threaded false. I had corruptions with some previous versions and I am scared to try newer versions yet.


For me me there is no reaseon not to use H2DB in production for mid sized projects. We deployed a production system for about fifteen clients all using H2DB, we experienced very easy installations and backups and yet zero problems regarding the database.