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

H2数据库文件锁定错误求助:无法找到进程ID且已关闭所有连接

解决H2数据库文件锁定问题(错误90020-212)

针对你遇到的H2数据库文件锁定报错(Caused by: org.h2.mvstore.MVStoreException: The file is locked: C:/test/deploy_center.mv.db [2.1.212/7),可以按以下步骤排查解决:

  • 强制定位并终止占用进程
    有些Java进程可能在后台隐藏运行,用系统工具精准查找:

    • Windows:打开命令提示符,执行tasklist | findstr java列出所有Java进程,用taskkill /F /PID <进程ID>逐个强制终止;如果仍找不到,使用Sysinternals的handle.exe deploy_center.mv.db命令定位占用文件的进程,再终止。
    • Linux/macOS:执行lsof | grep deploy_center.mv.db获取进程ID,用kill -9 <进程ID>强制结束。
  • 删除H2锁文件
    找到数据库目录下的deploy_center.lck文件(H2的锁标识文件),直接删除后重启程序。操作前务必确认没有任何进程在访问该数据库,避免数据损坏。

  • 调整文件权限
    检查C:/test/deploy_center.mv.db文件及所在目录的读写权限,确保运行Java程序的用户拥有完全控制权限,权限不足可能导致锁文件无法正常释放。

  • 切换为H2服务器模式
    嵌入式模式下H2会独占文件,切换为服务器模式可支持多进程访问:

    1. 启动H2服务器:执行java -cp h2-2.1.212.jar org.h2.tools.Server(替换为你的H2版本jar包)
    2. 修改JDBC连接URL:将原嵌入式URL(如jdbc:h2:file:C:/test/deploy_center)改为服务器模式URL(如jdbc:h2:tcp://localhost/~/test/deploy_center)
  • 排查代码连接泄漏
    代码中未正确关闭数据库资源(Connection、Statement、ResultSet)会导致连接残留,引发文件锁定。确保用try-with-resources自动释放资源:

    try (Connection conn = DriverManager.getConnection(jdbcUrl, username, password);
         Statement stmt = conn.createStatement()) {
        // 执行数据库操作逻辑
    } catch (SQLException e) {
        // 异常处理
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 11:33:25