遇到h2 db数据库文件被锁住了该怎么办?

H2 DB 是一种轻量级的文件型数据库,还提供 Web Console 可视化操作数据库,支持标准的JDBC API。

因是文件型数据库,在使用的时候经常会遇到如下问题:

Error Message:

Database may be already in use: "Locked by another process"

Detail Stack:

Exception in thread "main" org.h2.jdbc.JdbcSQLException: Database may be already in use: "Locked by another process". Possible solutions: close all other connection(s); use the server mode [90020-161]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:329)
    at org.h2.message.DbException.get(DbException.java:169)
    at org.h2.message.DbException.get(DbException.java:146)
    at org.h2.store.FileLock.getExceptionAlreadyInUse(FileLock.java:435)
    at org.h2.store.FileLock.lockFile(FileLock.java:332)
    at org.h2.store.FileLock.lock(FileLock.java:128)
    at org.h2.engine.Database.open(Database.java:539)
    at org.h2.engine.Database.openDatabase(Database.java:219)
    at org.h2.engine.Database.<init>(Database.java:214)
    at org.h2.engine.Engine.openSession(Engine.java:56)
    at org.h2.engine.Engine.openSession(Engine.java:159)
    at org.h2.engine.Engine.createSessionAndValidate(Engine.java:138)
    at org.h2.engine.Engine.createSession(Engine.java:121)
    at org.h2.server.TcpServerThread.run(TcpServerThread.java:124)
    at java.lang.Thread.run(Unknown Source)

    at org.h2.engine.SessionRemote.done(SessionRemote.java:538)
    at org.h2.engine.SessionRemote.initTransfer(SessionRemote.java:109)
    at org.h2.engine.SessionRemote.connectServer(SessionRemote.java:373)
    at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:267)
    at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:110)
    at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:94)
    at org.h2.Driver.connect(Driver.java:72)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at org.h2.tools.RunScript.process(RunScript.java:312)
    at org.h2.tools.RunScript.runTool(RunScript.java:140)
    at org.h2.tools.RunScript.main(RunScript.java:68)

在工程里面会生成 “dbname.lock.db” , 怎么删除都删不掉。 原因可想而知,某个进程占用了该文件,必须先关闭该进程。

解决办法:

打开“终端“ | “命令行“,输入指令 : ps aux | grep java

找到带有关键字 h2的进程,例如进程编号是:356322, 输入命令kill 之

kill 356322

之后,就可以删除 lock住的文件了

rm -f dbname.lock.db

重启 h2 db 服务就不会报错了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值