2012-10-31 19 views
5

Chúng tôi có một phiên bản beta mới của phần mềm của chúng tôi với một số thay đổi, nhưng không phải xung quanh lớp cơ sở dữ liệu của chúng tôi.Chỉ cần bắt đầu nhận được AIR SQLite Lỗi 3182 Disk I/O lỗi

Chúng tôi chỉ mới bắt đầu nhận được Lỗi 3128 được báo cáo trong các bản ghi máy chủ của chúng tôi. Dường như một khi điều đó xảy ra, nó sẽ xảy ra miễn là ứng dụng đang mở. Một phần của mã mà nó là rõ ràng nhất là nơi chúng tôi đăng nhập dữ liệu mỗi giây thông qua SQLite. Chúng tôi đã tạo ra 47k lỗi trên máy chủ của chúng tôi trong tháng này một mình.

3128  Disk I/O error occurred. Indicates that an operation could not be completed because of a disk I/O error. This can happen if the runtime is attempting to delete a temporary file and another program (such as a virus protection application) is holding a lock on the file. This can also happen if the runtime is attempting to write data to a file and the data can't be written. 

Tôi không biết điều gì có thể gây ra lỗi này. Có lẽ một chương trình chống virus? Có lẽ ứng dụng của chúng tôi đang bị nhầm lẫn và ghi dữ liệu lên đầu trang của nhau? Chúng tôi đang sử dụng kết nối không đồng bộ.

Nó gây ra rất nhiều vấn đề và chúng tôi đang ở một mất mát. Nó đã xảy ra trong phiên bản cũ của chúng tôi, nhưng có lẽ 100 lần trong một tháng thay vì 47.000 lần. Dù bằng cách nào tôi muốn làm cho nó xảy ra "0" lần.

Trả lời

0

Giải pháp là để đảm bảo cơ sở dữ liệu xóa, cập nhật, chèn chỉ xảy ra một lúc tại thời gian bằng cách quấn một chút wrapper. Trên hết, chúng tôi phải theo dõi lỗi 3128 và thử lại. Tôi nghĩ rằng điều này là bởi vì chúng tôi có một kích hoạt chạy mà có thể khóa cơ sở dữ liệu sau khi chúng tôi chèn dữ liệu.

+0

ý bạn là gói một gói nhỏ? – xiriusly

0

giải pháp có thể: Exception Message: Some kind of disk I/O error occurred

Tóm tắt: Có lẽ không phải là một vấn đề với các cơ sở dữ liệu nhưng một vấn đề tạo ra (hoặc xóa) các tập tin tạm thời một khi cơ sở dữ liệu được mở ra. AIR có thể có quyền truy cập vào cơ sở dữ liệu, nhưng không được tạo hoặc xóa các tệp trong thư mục.

Một câu trả lời đó đã làm việc đối với tôi là để sử dụng câu lệnh PRAGMA để thiết lập giá trị journal_mode một cái gì đó khác hơn DELETE. Bạn làm điều này bằng cách phát hành một tuyên bố PRAGMA giống như cách bạn đưa ra một câu lệnh truy vấn.

PRAGMA journal_mode = OFF 

Thật không may, nếu ứng dụng bị treo ở giữa một giao dịch khi OFF chế độ nhật ký được thiết lập, sau đó các tập tin cơ sở dữ liệu sẽ rất có khả năng đi tham nhũng. .

http://www.sqlite.org/pragma.html#pragma_journal_mode

Các vấn đề liên quan