IntelliJ中Apache Derby ERROR XSDB6错误及冲突进程处理咨询
解决Apache Derby "ERROR XSDB6: Another instance of Derby may have already booted the database" 问题
问题场景
在IntelliJ 2023.1 Ultimate Edition中通过JDBC连接Apache Derby时,反复触发ERROR XSDB6: Another instance of Derby may have already booted the database错误:
- 数据库激活状态下测试连接失败,错误信息如下:
DBMS: Apache Derby (ver. 10.15.2.0 - (1873585)) Case sensitivity: plain=upper, delimited=exact Driver: Apache Derby Embedded JDBC Driver (ver. 10.15.2.0 - (1873585), JDBC4.2) [XJ040][40000] Failed to start database 'C:/Documents/java 2/baby names/babynames-derby/babynames' with class loader jdk.internal.loader.ClassLoaders$AppClassLoader@42110406, see the next exception for details.
- 数据库未激活时测试连接成功,但Java程序无法正常连接。
已尝试重启机器、删除db.lck文件、重新初始化项目、任务管理器查找进程等操作,均未解决问题。
排查与解决步骤
1. 用IntelliJ终端定位并终止冲突进程
Derby嵌入式模式下,同一数据库只能被一个Java进程占用,可通过以下命令精准定位:
Windows系统
- 打开IntelliJ终端,执行
jps -v列出所有Java进程,查看进程参数中是否包含Derby数据库路径或Derby相关标识,找到目标进程ID(PID)。 - 强制终止进程:
taskkill /PID <目标进程ID> /F
macOS/Linux系统
- 打开IntelliJ终端,执行以下命令查找关联进程:
jps -v | grep derby # 或者 ps aux | grep derby
- 强制终止进程:
kill -9 <目标进程ID>
2. 检查IntelliJ内部连接状态
- 打开IntelliJ的Database工具窗口,右键断开所有与该Derby数据库相关的激活连接。
- 切换到Run窗口,确认所有之前运行的Java程序进程已完全终止(点击红色停止按钮)。
3. 彻底清理Derby锁定文件
除了db.lck,还需检查并删除数据库目录下的dbex.lck文件。若删除时提示文件被占用,可通过以下命令定位占用进程:
Windows系统(需提前下载Sysinternals的handle工具)
handle.exe "C:\Documents\java 2\baby names\babynames-derby\babynames"
macOS/Linux系统
lsof | grep "/Documents/java 2/baby names/babynames-derby/babynames"
找到占用进程后执行对应终止命令即可。
4. 切换Derby连接模式(长期解决方案)
将嵌入式模式改为网络服务器模式,避免单进程独占限制:
- 修改JDBC连接URL为:
jdbc:derby://localhost:1527/C:/Documents/java 2/baby names/babynames-derby/babynames;create=true
- 先启动Derby网络服务器(需确保
derbyrun.jar在类路径中):
java -jar derbyrun.jar server start
完整错误栈
java.sql.SQLException: Failed to start database 'C:/Documents/java 2/baby names/babynames-derby/babynames' with class loader jdk.internal.loader.ClassLoaders$AppClassLoader@76ed5528, see the next exception for details. at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:115) at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:141) at org.apache.derby.impl.jdbc.Util.seeNextException(Util.java:252) at org.apache.derby.impl.jdbc.EmbedConnection.bootDatabase(EmbedConnection.java:2848) at org.apache.derby.impl.jdbc.EmbedConnection.(EmbedConnection.java:406) at org.apache.derby.iapi.jdbc.InternalDriver.getNewEmbedConnection(InternalDriver.java:630) at org.apache.derby.iapi.jdbc.InternalDriver.connect(InternalDriver.java:295) at org.apache.derby.iapi.jdbc.InternalDriver.connect(InternalDriver.java:922) at org.apache.derby.iapi.jdbc.AutoloadedDriver.connect(AutoloadedDriver.java:132) at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:683) at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:253) at BabyNamesQuery.main(BabyNamesQuery.java:13) Caused by: ERROR XJ040: Failed to start database 'C:/Documents/java 2/baby names/babynames-derby/babynames' with class loader jdk.internal.loader.ClassLoaders$AppClassLoader@76ed5528, see the next exception for details. at org.apache.derby.shared.common.error.StandardException.newException(StandardException.java:299) at org.apache.derby.impl.jdbc.SQLExceptionFactory.wrapArgsForTransportAcrossDRDA(SQLExceptionFactory.java:170) at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:75) ... 11 more Caused by: ERROR XSDB6: Another instance of Derby may have already booted the database C:\Documents\java 2\baby names\babynames-derby\babynames. at org.apache.derby.shared.common.error.StandardException.newException(StandardException.java:299) at org.apache.derby.shared.common.error.StandardException.newException(StandardException.java:294) at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.privGetJBMSLockOnDB(BaseDataFileFactory.java:1942) at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.run(BaseDataFileFactory.java:2900) at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.getJBMSLockOnDB(BaseDataFileFactory.java:1883) at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.boot(BaseDataFileFactory.java:339) at org.apache.derby.impl.services.monitor.BaseMonitor.boot(BaseMonitor.java:1989) at org.apache.derby.impl.services.monitor.TopService.bootModule(TopService.java:334) at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(BaseMonitor.java:527) at org.apache.derby.impl.services.monitor.FileMonitor.startModule(FileMonitor.java:45) at org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Monitor.java:460) at org.apache.derby.impl.store.raw.RawStore.bootServiceModule(RawStore.java:2880) at org.apache.derby.impl.store.raw.RawStore.boot(RawStore.java:185) at org.apache.derby.impl.services.monitor.BaseMonitor.boot(BaseMonitor.java:1989) at org.apache.derby.impl.services.monitor.TopService.bootModule(TopService.java:334) at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(BaseMonitor.java:527) at org.apache.derby.impl.services.monitor.FileMonitor.startModule(FileMonitor.java:45) at org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Monitor.java:460) at org.apache.derby.impl.store.access.RAMAccessManager.bootServiceModule(RAMAccessManager.java:1332) at org.apache.derby.impl.store.access.RAMAccessManager.boot(RAMAccessManager.java:1035) at org.apache.derby.impl.services.monitor.BaseMonitor.boot(BaseMonitor.java:1989) at org.apache.derby.impl.services.monitor.TopService.bootModule(TopService.java:334) at org.apache.derby.impl.services.monitor.BaseMonitor.startModule(BaseMonitor.java:527) at org.apache.derby.impl.services.monitor.FileMonitor.startModule(FileMonitor.java:45) at org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Monitor.java:460) at org.apache.derby.impl.db.BasicDatabase.bootServiceModule(BasicDatabase.java:945) at org.apache.derby.impl.db.BasicDatabase.bootStore(BasicDatabase.java:773) at org.apache.derby.impl.db.BasicDatabase.boot(BasicDatabase.java:182) at org.apache.derby.impl.services.monitor.BaseMonitor.boot(BaseMonitor.java:1989) at org.apache.derby.impl.services.monitor.TopService.bootModule(TopService.java:334) at org.apache.derby.impl.services.monitor.BaseMonitor.bootService(BaseMonitor.java:1817) at org.apache.derby.impl.services.monitor.BaseMonitor.startProviderService(BaseMonitor.java:1683) at org.apache.derby.impl.services.monitor.BaseMonitor.findProviderAndStartService(BaseMonitor.java:1516) at org.apache.derby.impl.services.monitor.BaseMonitor.startPersistentService(BaseMonitor.java:988) at org.apache.derby.iapi.services.monitor.Monitor.startPersistentService(Monitor.java:598) at org.apache.derby.impl.jdbc.EmbedConnection.startPersistentService(EmbedConnection.java:3994) at org.apache.derby.impl.jdbc.EmbedConnection.bootDatabase(EmbedConnection.java:2809) ... 8 more
内容的提问来源于stack exchange,提问作者new_guy91
相关产品推荐
相关产品推荐

