如何从终端将持久数据库导出到 h2 中的内存数据库

How to export persistent database to in-memory databse in h2 from terminal

编辑:修复了错误的命令。 我在磁盘上有一个 h2 数据库。 如何将其导出到内存中?我尝试了以下方法:-

java -cp h2/bin/h2*.jar org.h2.tools.Server -tcp
java -cp h2/bin/h2*.jar org.h2.tools.RunScript -url jdbc:h2:$(pwd)/restapi -user sa -script export.sql
java -cp h2/bin/h2*.jar org.h2.tools.RunScript -tcp -url jdbc:h2:mem:testdb -user sa -script db-dump.sql &

其中 export.sql 包含:-

SCRIPT TO 'db-dump.sql

但是当我尝试通过 Web 控制台连接到 jdbc:h2:mem:testdb 时,出现以下错误:-

Database "mem:testdb" not found, either pre-create it or allow remote database creation (not recommended in secure environments) [90149-200] 90149/90149 (Help)

Server工具没有连接参数,不能用来新建数据库;您的第一个命令无效。你检查它的输出了吗?

RunScript 工具可以创建一个新的数据库,但是没有理由用它创建一个嵌入式内存数据库,这样的数据库将只对这个工具可用,而且只有当这个过程是 运行.

您需要采取其他步骤。

  1. 使用 SCRIPT TO 'db-dump.sql'(如果您在某处有打开的连接)或
  2. 将您的数据库导出到 SQL 脚本
java -cp h2/bin/h2*.jar org.h2.tools.Script -url jdbc:h2:~/test -user sa -script db-dump.sql

如果这个持久性数据库没有在任何地方打开。

  1. 启动正常的H2 Server进程;它为 H2 控制台提供透明身份验证,允许您使用它创建新数据库:
java -jar h2/bin/h2*.jar

它应该使用 H2 控制台打开 Web 浏览器 window。

在此 window 中将 jdbc:h2:mem:1;INIT=RUNSCRIPT FROM 'db-dump.sql' 指定为 JDBC URL。

您可以通过双击系统托盘中的 H2 控制台图标重新打开此类 window,您可以使用其上下文菜单中的其他命令。

注意,如果直接在浏览器中输入localhost:8082,将无法在其中新建数据库;你真的需要从 H2 打开它(或者你可以从托盘图标的上下文菜单中可用的状态 window 复制 URL 和临时安全密钥)。