Blog

HSQLDB "Datenbank wird bereits von einem anderen Prozess verwendet"-Ausnahmen auf UNIX

Andrew Phillips

Aktualisiert Oktober 23, 2025
2 Minuten

Die Installation einer einfachen Grails-Anwendung in Tomcat unter Linux hätte eigentlich eine ganz einfache Aufgabe sein sollen. Stattdessen verbrachte ich einen zunehmend frustrierenden Vormittag damit, eine "hilfreiche" Funktion von HSQLDB aufzuspüren, die dazu führte, dass das Starten mit

org.hsqldb.HsqlException: Die Datenbank wird bereits von einem anderen Prozess verwendet:
org.hsqldb.persist.NIOLockFile@6b67bdbe[file =/myDb.lck, exists=true, locked=false, valid=false,
fl=null]

Ausnahmen. Um anderen eine ähnliche Zeitverschwendung zu ersparen, finden Sie hier die Ursache und eine Abhilfe:

Ursache

Zwischen den Versionen 1.7.2. und 1.8.0.10. versucht HSQLDB, die Dateien für dateibasierte DBs zu sperren, um "[den] Benutzer davor zu schützen, den Prozess zweimal mit denselben Dateien auszuführen und seine Daten zu beschädigen", wie es heißt. Wenn Ihre DB-Dateien auf NFS liegen, das diese Sperren nicht unterstützt, wird HSQLDB leider mit der oben genannten Ausnahme in die Luft gehen. Es scheint, dass es genug Probleme damit gab, so dass HSQLDB in 1.8.0.10. wieder dazu übergegangen ist, standardmäßig keine Sperren zu verwenden, obwohl dies in zukünftigen Versionen wieder geändert werden könnte.

Abhilfe(n)

  • Verschieben Sie Ihre DB-Dateien an einen Nicht-NFS-Speicherort
  • Aktualisieren Sie auf Version 1.8.0.10. (oder eine Version vor 1.7.2.)
  • Verwenden Sie eine Mem- statt einer Datei-DB

Die Details sind in diesem Thread aus den HSQLDB-Foren beschrieben. Nach dem, was dort erwähnt wird, scheint es möglich zu sein, das File Locking irgendwie zu deaktivieren. Ich habe es mit hsqldb.nio_data_file=false versucht, aber das scheint nicht zu klappen. Wenn jemand herausfindet, wie man das macht, bitte einen Kommentar hinzufügen! Geändert am 13. Juni 2012, um hinzuzufügen: Wie in den Kommentaren erwähnt, scheint es, dass ich eine etwas zu alte Version verwendet habe und die Option hsqldb.lock_file=false fehlte. Vielen Dank!

Verfasst von

Andrew Phillips

Contact

Let’s discuss how we can support your journey.