将 h2 数据库从 h2.db 转换为 mv.db

Posted

技术标签:

【中文标题】将 h2 数据库从 h2.db 转换为 mv.db【英文标题】:Converting h2 database from h2.db to mv.db 【发布时间】:2015-06-13 10:29:45 【问题描述】:

我正在将旧的 h2 数据库(带有 h2.db 扩展名)转换为新的 mv 数据库引擎。 在数据库的某些表中,我遇到了更严格的引擎的问题。

只是一个 SELECT * FROM 确实会出错,所以使用最新的 h2-1.4.187.jar...我什至无法再打开数据...

错误在 TimeStampValue 中:

General error: "java.lang.IllegalArgumentException: timeNanos out of range 86400656000000"; SQL statement:
SELECT * FROM PURCHASES_DIVIDED [50000-187]

我使用的是嵌入式方式。

现在我尝试使用旧 jar (h2-1.3.173.jar) 查找行

但不能完全解决如何找到有问题的行..因为我在旧数据库中查询的所有内容似乎都可以正常工作,并且没有捕获任何错误...

有人知道如何解决这个问题吗?

我想用 db 表中的旧 jar 选择有问题的行,并在那里修复时间戳字段....然后用新 jar 打开....

但我需要找到一种方法来选择它们......

【问题讨论】:

【参考方案1】:

我找到了一个“最好的最坏的”解决方案:

当您使用恢复功能时,您可以创建一个 sql 转储文件,并加载到一个新的数据库中。 (以及新版本的 jar)。

它将在它无法读取的行上产生错误,但其余的已经完成。 所以损坏的行只会生成一条错误消息。 从 sql 转储文件中,我什至可以修复它.... 很多手工工作,但要完成。

仍然希望其他人提供更好的解决方案。

【讨论】:

以上是关于将 h2 数据库从 h2.db 转换为 mv.db的主要内容,如果未能解决你的问题,请参考以下文章

使用 mongoDB 启动 H2 DB

H2 DB CSVWRITE 字符串中的重复双引号

查看test.h2.db(H2数据库)的工具[关闭]

H2数据库如何根据表拆分成多个文件

重复删除和加载相同数据后,H2 db 大小持续增加

CrudRepository 无法在 h2 db 上执行任何查询