2016-11-03

【備忘録】sqlite3 で attempt to write a readonly database エラー

Linux で sqlite3 を使っていたらすぐに判ったことだったと思うのですが、Windows 上での操作で出たエラーでしたので、もしやデータベースが壊れたかと焦ってしまいました。

Windows 2008 サーバ上で稼働している、とあるシステムが使っている SQLite のデータベースを一部更新するため、コマンドプロンプト上で sqlite3 を起動して、SQL の update 文を実行した時に下記のエラーが出たのです。

SQL error: attempt to write a readonly database.

Administrator アカウントでインストールしたシステムが使っている SQLite のデータベースを、管理者権限を持つ別のアカウントで操作しようとしたこと、要するに permission が無かったことがエラー発生の原因です。しかしそのことを認識するのに時間がかかってしまいました。

今回は permission をあれこれ変更することせずに Administrator でログインし直すことであっさり問題解消でした。しかし、Administrator アカウントであれこれデータベースを操作するのは安全とは言えません、なんとかしないと…(これは別な問題です)。

SQLite は、データベースがファイルとして存在するので簡単にデータベース環境を構築して利用することができますが、サーバ・クライアントモデルのデータベースに比べると、更新処理の競合の対処については弱い処理系であると言われています。そのため稼働しているシステムのデータベースを手作業で一部更新するときは、いつも怖々と SQL 文を実行しています。しかし、ジャーナリングファイルシステムが備わっているようですから、SQL 文をひとつひとつ手作業で実行するぐらいであれば、競合が原因でデータベースが壊れることを恐れる必要はあまりないのかもしれません [1][2]

参考サイト

  1. SQLite - SQLiteの同時書き込みを解決する現実的な方法は?(5099)|teratail
  2. パフォーマンスを追求するためのSQLite設定 | ITハンドブック

 

ブログランキング・にほんブログ村へ
にほんブログ村

0 件のコメント: