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>强制结束。
- Windows:打开命令提示符,执行
删除H2锁文件
找到数据库目录下的deploy_center.lck文件(H2的锁标识文件),直接删除后重启程序。操作前务必确认没有任何进程在访问该数据库,避免数据损坏。调整文件权限
检查C:/test/deploy_center.mv.db文件及所在目录的读写权限,确保运行Java程序的用户拥有完全控制权限,权限不足可能导致锁文件无法正常释放。切换为H2服务器模式
嵌入式模式下H2会独占文件,切换为服务器模式可支持多进程访问:- 启动H2服务器:执行
java -cp h2-2.1.212.jar org.h2.tools.Server(替换为你的H2版本jar包) - 修改JDBC连接URL:将原嵌入式URL(如
jdbc:h2:file:C:/test/deploy_center)改为服务器模式URL(如jdbc:h2:tcp://localhost/~/test/deploy_center)
- 启动H2服务器:执行
排查代码连接泄漏
代码中未正确关闭数据库资源(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
相关产品推荐
相关产品推荐

