You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

H2文件型数据库删除DB文件后仍可读写?技术咨询

问题

本地运行基于H2文件型数据库的Spring Boot服务,启动时会正常生成DB文件,且可通过H2控制台查询数据库。其application.properties配置如下:

spring.datasource.url=jdbc:h2:file:~/.AppData/[path to DB file]

在服务运行期间删除DB文件后,仍可通过H2控制台或服务正常查询数据库;甚至新增记录后也能被持久化查询,请问这一现象的原因是什么?

原因分析

  • 内存缓存+延迟写入机制:H2的文件模式默认会把数据库数据加载到内存中运行,并且不会实时将所有操作同步写入磁盘文件。删除磁盘上的DB文件后,服务和控制台的所有操作其实都是基于内存中的数据副本进行的,新增的记录也暂时存在内存里,直到触发磁盘写入逻辑(比如事务提交、定时刷盘或者服务关闭前)。
  • 操作系统文件句柄特性:当Spring Boot服务启动后,H2进程会持有DB文件的文件句柄。此时在文件系统中删除该文件,操作系统并不会立刻真正删除文件内容,而是会保留文件的inode数据,直到持有该文件句柄的进程完全关闭。这意味着H2依然可以通过持有的句柄访问到文件的实际内容,新增的记录也会正常写入到这个“隐形”的文件中,所以查询时能看到这些数据。

内容的提问来源于stack exchange,提问作者ThCollignon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 10:32:34