SQLiteException: disk I/O error

disk I/O error

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.SQLite.SQLiteException: disk I/O error
disk I/O error

Cái gì mà disk, rồi I/O mà error nghe ghê quá trời ghê! Thiệt, điều đầu tiên tui nghĩ tới là “xong phim, cái file s3db quá tiện dụng bị lỗi rồi và tất nhiên thì làm gì có backup!”

Vấn đề là ở chỗ mỗi lần thao tác INSERT/ UPDATE với dữ liệu thì SQLite sẽ tạo ra thêm một file dạng db_name.s3db-journal, sau đó thì vì lý do gì đó mà SQLite engine không thể xóa file này được (lý do thường gặp nhất là file s3db không được phân quyền Modify, ai xài shared hosting bị hoài). Dễ thôi, vô Plesk check Full control cho account Default Plesk application pool user (IWAM_plesk(default)) là xong!

Nhưng mà vấn đề là, không hiểu vì lý do gì đó mà lâu lâu lại mất quyền này và nó văng ra lỗi như trên nữa. Sau khi Google thì tui thấy được câu lệnh thần thánh PRAGMA journal_mode = OFF, bạn cứ cho nó chạy trước mỗi lần thực thi các query khác là xong! Tất nhiên là như vầy thì bạn sẽ không còn rollback hoặc atomic commit được và sqlite.org bảo rằng “database file will very likely go corrupt” 😀

Kiểu như vầy

SQLiteCommand cmd = new SQLiteCommand();
cmd.CommandText = "PRAGMA journal_mode = OFF; INSERT INTO tblSetupOption(...) VALUES(...);";
DatabaseConnection.Instance.Value.ExecNonQuery(cmd);

 

 

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất /  Thay đổi )

Google photo

Bạn đang bình luận bằng tài khoản Google Đăng xuất /  Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất /  Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất /  Thay đổi )

Connecting to %s