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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 02:59:53