2012-10-31 3 views
5

Mamy nową wersję beta naszego oprogramowania z pewnymi zmianami, ale nie wokół naszej warstwy bazy danych.Po prostu zaczął się AIR SQLite Error 3182 Wystąpił błąd dysku I/O

Właśnie zaczęliśmy uzyskiwać błąd 3128 zgłaszany w naszych dziennikach serwera. Wygląda na to, że gdy to się stanie, dzieje się tak długo, jak aplikacja jest otwarta. Część kodu, w której jest najbardziej widoczne, to miejsce, w którym rejestrujemy dane co sekundę za pomocą SQLite. W tym miesiącu wygenerowaliśmy błędy 47k na naszym serwerze.

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. 

Nie wiem, co może być przyczyną tego błędu. Może program antywirusowy? Może nasza aplikacja jest zdezorientowana i zapisuje dane jeden na drugim? Używamy połączeń asynchronicznych.

Powoduje to wiele problemów i nie mamy nic do roboty. Stało się to w naszej starszej wersji, ale może 100 razy w ciągu miesiąca, a nie 47 000 razy. Tak czy inaczej chciałbym, aby stało się to "0" razy.

Odpowiedz

0

Rozwiązaniem było upewnić bazie usuwać, aktualizować, włóż tylko się pojedynczo w czasie owijając trochę opakowanie. Ponadto musieliśmy sprawdzić błąd 3128 i spróbować ponownie. Myślę, że dzieje się tak dlatego, że uruchamiamy wyzwalacz, który może zablokować bazę danych po wprowadzeniu danych.

+0

co to znaczy owijanie małej owijki? – xiriusly

0

Możliwe rozwiązanie: Exception Message: Some kind of disk I/O error occurred

Podsumowanie: Nie ma chyba problem z bazą danych, ale problem tworzenia (lub usunięcie) plik tymczasowy kiedy zostanie otwarta baza danych. Środowisko AIR może mieć uprawnienia do bazy danych, ale nie tworzyć ani usuwać plików w katalogu.

Jedną z odpowiedzi, który pracował dla mnie jest użycie oświadczenie PRAGMA, aby ustawić wartość na coś innego niż DELETEjournal_mode. Robi się to, wydając oświadczenie w ten sam sposób, w jaki wydałeś instrukcję zapytania.

PRAGMA journal_mode = OFF 

Niestety, jeśli awarii aplikacji w środku transakcji, gdy tryb dziennika OFF jest ustawiony, to plik bazy danych będzie bardzo prawdopodobne pójść uszkodzony. .

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

Powiązane problemy