H2 SCRIPT 命令是不是像快照一样工作?

Posted

技术标签:

【中文标题】H2 SCRIPT 命令是不是像快照一样工作?【英文标题】:Does the H2 SCRIPT command work like a snapshot?H2 SCRIPT 命令是否像快照一样工作? 【发布时间】:2011-05-26 18:29:50 【问题描述】:

H2 数据库有一个名为 SCRIPT 的命令来备份内容和/或结构。它可以在数据库运行时执行。

我的问题是:SCRIPT 是否像快照一样工作?在发出 SCRIPT 命令之前,它是否只占用语句和数据库内容?还是在执行 SCRIPT 时尝试考虑其他进程执行的附加语句?

编辑

为了澄清这个问题,关于 SCRIPT 的使用有两个歧义:

SCRIPT 在数据库运行时是否保证事务安全/一致性? SCRIPT 产生的输出是否比 BACKUP 小?

我问这个问题是为了知道在执行数据库备份时是否应该中断一些查询。

【问题讨论】:

【参考方案1】:

SCRIPT 命令在开始时锁定每个表(用于读取)。所以生成的 SQL 脚本在事务上是一致的。请注意,在操作完成之前,其他操作会被阻止(即使使用多线程选项也是如此)。

SCRIPT 产生的输出是否比 BACKUP 小?

这取决于数据。通常 SQL 脚本会小一些,但不会太多。使用压缩时它要小得多。该脚本的主要优点是您有一个人类可读的备份,它与软件没有太多关联(H2 的文件格式可能会改变,但 SQL 不会改变)。

【讨论】:

【参考方案2】:

“recommended way to backup a database 用于创建一个压缩的 SQL 脚本文件。这可以使用 Script 工具来完成。”不幸的是,在使用数据库时确保事务一致性的唯一方法是使用 SQL 命令BACKUP,它也会复制事务日志。

【讨论】:

"在使用数据库时不建议这样做。" > 在您提供的链接中,此评论与复制文件的想法有关,而不是使用 SCRIPT。 @Thomas Mueller 是 SO 的作者和定期撰稿人。他不止一次地帮助了我,我会听从他的意见。 是的,我知道,这就是为什么我没有结束这个问题,哈哈。我正在阅读文档和 Javadoc。如果我理解得很好,有2个工具:备份工具和SQL备份命令。当且仅当数据库关闭时,备份工具似乎是安全的。另一方面,似乎可以在数据库启动时安全地执行 SQL 备份命令。最后一个问题是,如果它不是事务安全的,那么允许在数据库运行时运行 SCRIPT 有什么意义!?!! SCRIPT 备份似乎更节省空间,这将允许在安静时间进行更频繁的备份。我仍然想要一个定期的BACKUP @Thomas Mueller 我已经更新了我的问题以澄清它。 Trashgod提到你可能会有所帮助。谢谢。

以上是关于H2 SCRIPT 命令是不是像快照一样工作?的主要内容,如果未能解决你的问题,请参考以下文章

什么是虚拟机的快照?

Git 版本回退

Spring-Boot / H2 将数据库快照写入文件系统

快照备份定义

快照备份定义

Redis的快照