数据库可能已在使用 - H2 问题
Posted
技术标签:
【中文标题】数据库可能已在使用 - H2 问题【英文标题】:Database may be already in use - H2 issue 【发布时间】:2015-08-25 10:41:49 【问题描述】:在使用 H2 数据库时有时会出现以下异常。如果我将数据库文件的路径更改为另一个位置,这个问题将得到解决。这个问题有没有永久的解决方案。我的数据库现在是 19.5MB。
org.h2.jdbc.JdbcSQLException: Database may be already in use: "/opt/new/mockdata_db.mv.db". Possible solutions: close all other connection(s
); use the server mode [90020-178]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:344) ~[h2-1.4.178.jar:1.4.178]
at org.h2.message.DbException.get(DbException.java:167) ~[h2-1.4.178.jar:1.4.178]
at org.h2.mvstore.db.MVTableEngine.init(MVTableEngine.java:104) ~[h2-1.4.178.jar:1.4.178]
at org.h2.engine.Database.getPageStore(Database.java:2355) ~[h2-1.4.178.jar:1.4.178]
at org.h2.engine.Database.open(Database.java:659) ~[h2-1.4.178.jar:1.4.178]
at org.h2.engine.Database.openDatabase(Database.java:262) ~[h2-1.4.178.jar:1.4.178]
at org.h2.engine.Database.<init>(Database.java:256) ~[h2-1.4.178.jar:1.4.178]
at org.h2.engine.Engine.openSession(Engine.java:57) ~[h2-1.4.178.jar:1.4.178]
at org.h2.engine.Engine.openSession(Engine.java:164) ~[h2-1.4.178.jar:1.4.178]
at org.h2.engine.Engine.createSessionAndValidate(Engine.java:142) ~[h2-1.4.178.jar:1.4.178]
at org.h2.engine.Engine.createSession(Engine.java:125) ~[h2-1.4.178.jar:1.4.178]
at org.h2.engine.Engine.createSession(Engine.java:27) ~[h2-1.4.178.jar:1.4.178]
at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:335) ~[h2-1.4.178.jar:1.4.178]
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:107) ~[h2-1.4.178.jar:1.4.178]
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:91) ~[h2-1.4.178.jar:1.4.178]
at org.h2.Driver.connect(Driver.java:74) ~[h2-1.4.178.jar:1.4.178]
at org.h2.jdbcx.JdbcDataSource.getJdbcConnection(JdbcDataSource.java:191) ~[h2-1.4.178.jar:1.4.178]
at org.h2.jdbcx.JdbcDataSource.getXAConnection(JdbcDataSource.java:354) ~[h2-1.4.178.jar:1.4.178]
at org.h2.jdbcx.JdbcDataSource.getPooledConnection(JdbcDataSource.java:386) ~[h2-1.4.178.jar:1.4.178]
at org.h2.jdbcx.JdbcConnectionPool.getConnectionNow(JdbcConnectionPool.java:228) ~[h2-1.4.178.jar:1.4.178]
at org.h2.jdbcx.JdbcConnectionPool.getConnection(JdbcConnectionPool.java:200) ~[h2-1.4.178.jar:1.4.178]
【问题讨论】:
【参考方案1】:堆栈跟踪中的一个永久解决方案是:使用服务器模式而不是嵌入式模式。这意味着更改代码中的 JDBC url 并在 JDBC 中使用 tcp 模式。
一个有趣的选择是以自动混合模式打开:第一个连接是嵌入的,所有后续连接都处于 tcp 模式。这也改变了 JDBC url,但看起来更自然,我个人在 1.3 和 1.4 版本中系统地将其与 H2 一起使用。
只需将";AUTO_SERVER=TRUE"
附加到您之前的 JDBC url 即可使用自动混合模式。
【讨论】:
以上是关于数据库可能已在使用 - H2 问题的主要内容,如果未能解决你的问题,请参考以下文章
JdbcSQLNonTransientConnectionException:数据库可能已在使用中:“等待数据库关闭时间超过 1 分钟”
HHH000431:无法确定 H2 数据库版本,某些功能可能无法使用