category icon
2023-01-20
Linux

DBeaverで『[SQLITE_BUSY] The database file is locked (database is locked)』エラーが発生してWSL内のSQLiteファイルが読み込めない

WSL
2
DBeaver
22.3.2
profile
hikaru
Software Developer / DIY'er

1. 発生した現象

DBeaverで [SQLITE_BUSY] The database file is locked (database is locked) というエラーが発生し、WSL内のSQLiteファイルが読み込めない現象が発生しました。

なお、接続テストは成功していた。

各種バージョン

wslのバージョン
> wsl -l -v
  NAME                   STATE           VERSION
* Ubuntu                 Running         2
  • WSLのバージョンは v2
  • DBeaver のバージョンは 22.3.2.202301060755

2. 原因の調査

色々調べたり試したけど原因不明。

  • WSL 内のファイルである、\\wsl.localhost\Ubuntu\home\user1\sqlite.db などはエラーが発生した。
  • 通常の共有フォルダ内にある sqlite ファイル、例えば \\nas\foo\bar\sqlite.db などは正常に動作した。

3. 暫定対策

暫定的な対策として、接続前に WSL 内のファイルを Windows 側にコピーし、コピーした sqlite ファイルを DBeaver で開いて運用するようにしました。

なお、DBeaver には接続前と切断後にコマンドを実行する機能があるため、それを活用することもできます。

接続前のコマンド

接続前コマンド
# 接続時にWSL内のsqliteファイルをWindows側にコピーする
cmd /c "xcopy \\wsl.localhost\Ubuntu\home\<ユーザー名>\sqlite.dev.db C:\Users\<ユーザー名>\Desktop /R /Y"

切断後のコマンド

切断後コマンド
# 接続時にコピーしたsqliteファイルを削除する
cmd /c "del C:\Users\<ユーザー名>\Desktop\sqlite.dev.db"

4. おわりに

DBeaver で WSL 内からコピーした sqlite ファイルを開くことができるようになりました。ただし、コピーしたファイルであるため、DBeaver で編集した内容は WSL 側には反映されません。

とりあえず、運用上事足りるので問題ないと判断し、このような対策を取ることとしました~