无法从 hsqldb 日志文件恢复

Posted

技术标签:

【中文标题】无法从 hsqldb 日志文件恢复【英文标题】:No recovery from hsqldb log-file 【发布时间】:2016-03-17 21:58:59 【问题描述】:

我有一个基于 Java/JSP/Hsqldb/Tomcat/Maven 的小型 Web 应用程序以及 Hsqldb 的以下问题:

目前我在应用程序中没有调用shutdowncheckpoint,所以提交的sql语句只插入到Hsqldb.log文件中.

当我想轻松测试应用程序的更新时,我通过将 war 文件替换为 tomcat 的 webapps 文件夹中较新的文件来实现。登录到我的 Web 应用程序后,从数据库中显示的数据不完整/旧,因为 .log 文件中的 sql 语句被忽略。 Hsqldb 的文档告诉如果发生崩溃,.log 文件内容的重播会自动完成,但在我的情况下并非如此。

对我来说处理这种这种崩溃的最佳方法是什么?

在每个commit 之后或至少定期调用checkpoint? 使用连接参数hsqldb.full_log_replay=true? 还有其他想法吗?

感谢您的指导。

【问题讨论】:

【参考方案1】:

首先,您必须将 WRITE DELAY 设置为 0 或低值。这可确保实际记录数据更改。检查 .script 文件的当前设置。

定期调用 CHECKPOINT 很好,但不是在每次提交之后。

为确保播放,请使用hsqldb.full_log_replay=true。如果打开数据库时出现错误,请检查 .log 文件。如果某些行没有完全写出,则会出现错误。

【讨论】:

写入延迟不是我的重点,因为我目前是该应用程序的唯一用户,默认延迟为 500 毫秒。其他方面有帮助。

以上是关于无法从 hsqldb 日志文件恢复的主要内容,如果未能解决你的问题,请参考以下文章

备份和恢复 HsqlDb 嵌入式文件(非数据库)

从损坏的 SQL Server 数据库中恢复事务日志

为啥使用mysqlbinlog无法恢复数据

如何从备份集中恢复归档日志

如何使用最近的 Oracle 备份文件(从昨天开始)和仅在线重做日志来恢复另一个位置的数据库(灾难恢复)?

通过Binlog恢复数据