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 側には反映されません。
とりあえず、運用上事足りるので問題ないと判断し、このような対策を取ることとしました~