68

我有 H2DB 数据库,它将数据存储在文件中。我有 3 个文件:test.18.log.dbtest.data.dbtest.index.db.

我想像使用mysqldump. 可能吗?

4

3 回答 3

178

是的,有多种解决方案。一种是运行SCRIPT SQL 语句

SCRIPT TO 'fileName'

另一种是使用脚本工具

java org.h2.tools.Script -url <url> -user <user> -password <password>

然后,还有RUNSCRIPT 语句和 RunScript 工具。

顺便说一句,您应该考虑升级到更新版本的 H2。对于较新的版本,.data.db 和 .index.db 这两个文件被合并到一个 .h2.db 文件中。

于 2010-07-15T19:23:14.713 回答
8

如果要获取架构数据,可以使用

SCRIPT TO 'dump.sql';

如果您只想获取模式,您可以使用

SCRIPT SIMPLE TO 'dump.txt';
于 2020-06-25T06:42:07.840 回答
2

你的捷径:

$ ls
foo.mv.db

$ wget -O h2.jar https://search.maven.org/remotecontent?filepath=com/h2database/h2/1.4.200/h2-1.4.200.jar

$ ls
foo.mv.db
h2.jar

$ java -cp h2.jar org.h2.tools.Script -url "jdbc:h2:file:./foo" -user sa -password ""

$ ls
backup.sql
foo.mv.db
h2.jar

$ cat backup.sql | head -n 20
;
CREATE USER IF NOT EXISTS "SA" SALT 'bbe17...redacted...' HASH 'a24b84f1fe898...redacted...' ADMIN;
CREATE SEQUENCE "PUBLIC"."HIBERNATE_SEQUENCE" START WITH 145;
CREATE CACHED TABLE "PUBLIC"."...redacted..."(
    "ID" INTEGER NOT NULL SELECTIVITY 100,
    [...redacted...]
    "...redacted..." VARCHAR(255) SELECTIVITY 100
);
ALTER TABLE "PUBLIC"."...redacted..." ADD CONSTRAINT "PUBLIC"."CONSTRAINT_8" PRIMARY KEY("ID");
-- 102 +/- SELECT COUNT(*) FROM PUBLIC.[...redacted...];
INSERT INTO "PUBLIC"."...redacted..." VALUES
([...redacted...]),
于 2021-01-22T14:03:40.110 回答