在 H2DB 中如何像在 MySql 中一样获得 sql 转储?

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

我想得到 SQL 转储文件,当我使用 mysqldump。这是可能的吗?

57102 次浏览

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

SCRIPT TO 'fileName'

另一种方法是使用 脚本工具:

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

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

顺便说一下,您应该考虑升级到 H2的最新版本。对于更新的版本,这两个文件。数据库和。Db 合并为一个。H2.db 文件。

如果你想得到 模式数据,,你可以使用

SCRIPT TO 'dump.sql';

如果只想得到 模式,可以使用

SCRIPT SIMPLE TO 'dump.txt';

你的捷径:

$ 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...]),