std9.jp

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

目次 (7)
  1. 1. 発生した現象
  2. 各種バージョン
  3. 2. 原因の調査
  4. 3. 暫定対策
  5. 接続前のコマンド
  6. 切断後のコマンド
  7. 4. おわりに

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 側には反映されません。

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