建议的从H2 1.3.175迁移到1.4.195

时间:2017-05-04 08:35:03

标签: java database migration h2

既然H2 1.4已经完成测试版,那么我想将旧的1.3.175数据库迁移到1.4.195。

背景资料:

  • 在文档中,database upgrade尚未提及1.4。
  • roadmap仍列出"从1.3数据库自动迁移到1.4。" as"计划改变"。
  • MVStore的current state仍标记为" experimental"。

那么,推荐的迁移方式是什么?

其他方面/奖金问题:

我应该启用MVStore还是坚持使用PageStore(优点/缺点)?哪一个提供更好的性能(多线程对我来说并不重要),哪一个更好的稳定性,特别是对OutOfMemoryErrors的弹性?

2 个答案:

答案 0 :(得分:6)

使用1.3.175创建的数据库可以使用1.4.195读取和打开,无需任何额外的工作。 H2会自动检测到它正在使用Page Store并对其进行处理。这样做没有问题。

这样做的好处是,在开发MVStore的同时,Page Store继续获得性能改进和错误修复。因此,使用Page Store的H2已经成为一个非常稳定的数据库存储。

目前还没有将数据库从使用Page Store转换为使用MVStore的自动升级过程。如果您确实想这样做,则需要手动完成。使用最新的H2 Jar,使用H2的SCRIPT命令从1.3数据库导出SQL,然后将RUNSCRIPT用于新创建的1.4.195数据库。

如果您的H2 JDBC URL没有明确指定;mv_store=false,请注意H2将首先查看页面存储数据库是否已存在。如果它没有,那么它将创建一个MVStore数据库。这对您,您的应用和您的用户来说都是无缝的。您注意到的唯一肤浅差异是磁盘上的数据库文件具有不同的文件扩展名。

最后,一个建议。如果您的客户数据库很大,请考虑仅使用页面存储。我是H2的重度用户。 (我在H2上构建的商业产品有成千上万的用户,通常拥有数千兆字节的数据库。)即使我使用最新的H2 Jar,我仍然会为所有客户使用页面存储。 MVStore仍然存在一些性能问题,这些问题随着数据库变大而开始出现。随着时间的推移,我希望能够确定并解决问题的原因。

答案 1 :(得分:0)

@Steve McLeod的答案很明确。为了完整起见,以下是确切的命令:

//Do a backup of current .h2.db file
//Connect to current DB with same URL as always

SCRIPT TO 'fileName'

//Rename the .h2.db to something else, possibly another backup
//Connect to database with same URL as before. The new MVStore engine will be chosen by default, and the .mv.db file will be created

RUNSCRIPT FROM 'fileName'

Documentation, H2 Grammar

此外,如果您更喜欢使用H2 jar,请参阅Thomas的答案(12)。具体而言,相应的类是org.h2.tools.Scriptorg.h2.tools.RunScript