2012-10-31 70 views
5

我們有一個測試版本的軟件,但有一些變化,但不在我們的數據庫層附近。剛剛開始獲取AIR SQLite錯誤3182發生磁盤I/O錯誤

我們剛剛開始在我們的服務器日誌中報告錯誤3128。它似乎一旦發生,只要應用程序打開就會發生。代碼中最明顯的部分是我們每秒鐘通過SQLite記錄數據的位置。我們這個月僅在我們的服務器上產生了47k個錯誤。

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. 

我不知道什麼可能導致此錯誤。也許是一個反病毒程序?也許我們的應用程序變得困惑,並且將數據寫在彼此之上?我們正在使用異步連接。

這是造成很多問題,我們處於虧損狀態。它發生在我們的舊版本,但可能是一個月100次而不是47,000次。無論哪種方式,我想使它發生「0」次。

回答

0

的解決方案是,以確保數據庫中刪除,更新,插入只有通過包裝一個小包裝發生在一個時刻。最重要的是,我們必須注意錯誤3128並重試。我認爲這是因爲我們有一個觸發器正在運行,可能會在我們插入數據後鎖定數據庫。

+0

你是什麼意思包裝一個小包裝? – xiriusly

0

可能的解決辦法:Exception Message: Some kind of disk I/O error occurred

摘要:有可能是不與數據庫,但問題一旦打開數據庫創建(或刪除)臨時文件的問題。 AIR可能有權訪問數據庫,但不能創建或刪除目錄中的文件。已經爲我工作

答案之一是使用PRAGMA語句設置journal_mode值比DELETE以外的東西。您可以通過發出PRAGMA語句來執行此操作,方法與發出查詢語句的方式相同。

PRAGMA journal_mode = OFF 

不幸的是,如果在一個事務中的應用程序崩潰時設置關閉日誌模式,則數據庫文件將很可能去腐敗。 。

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

相關問題