2014-02-12 11 views
0

沒有關於底層結構的太多細節,有沒有人經歷過類似的事情?SQLITE查詢在添加訂單子句時會產生不同的(更多)結果

我做了一個選擇*在一個表,導致1187行 我做同樣的選擇和添加一個訂單從句(任何字段),並得到1195行 編輯:這是不正確的!只有在displayname和id上訂購纔會帶來缺失的結果。這些顯然是索引!

我可以重現行爲與此特定的數據庫,它打亂了我的軟件的一些功能,其中i運行一些查詢沒有排序的結果(因爲順序並不重要)

什麼都可以這樣做的原因?我會提供進一步的信息作爲祕密,但底層結構相當複雜。

編輯:好的,表看起來是這樣的:

id GUID PRIMARY KEY NOT NULL, 
tag TEXT, 
displayname TEXT, 
create_user GUID, 
create_time INTEGER, 
key_date DATETIME, 
change_time INTEGER 

我已經看過了「失蹤」線,看到什麼特別之處他們。

這裏北京時間的INTEGRITY_CHECK結果:

*** in database main *** 
On tree page 1974 cell 8: 2nd reference to page 62381 
On tree page 1974 cell 8: Child page depth differs 
On tree page 1973 cell 1: Child page depth differs 
On tree page 1973 cell 2: Child page depth differs 
On tree page 8931 cell 5: 2nd reference to page 57003 
On tree page 8931 cell 5: Child page depth differs 
On tree page 8931 cell 6: Child page depth differs 
On tree page 1981 cell 8: 2nd reference to page 62380 
On tree page 1981 cell 8: Child page depth differs 
On tree page 1976 cell 1: Child page depth differs 
On tree page 1976 cell 2: Child page depth differs 
On tree page 8927 cell 5: 2nd reference to page 57001 
On tree page 8927 cell 5: Child page depth differs 
On tree page 8927 cell 6: Child page depth differs 
On tree page 62331 cell 5: 2nd reference to page 57915 
On tree page 62331 cell 5: Child page depth differs 
On page 62331 at right child: 2nd reference to page 57828 
On tree page 26340 cell 3: Child page depth differs 
On tree page 26340 cell 4: Child page depth differs 
On tree page 26341 cell 4: 2nd reference to page 49345 
On tree page 26341 cell 4: Child page depth differs 
On tree page 26341 cell 5: Child page depth differs 
On tree page 58249 cell 0: 2nd reference to page 57717 
On tree page 58249 cell 1: 2nd reference to page 57711 
On tree page 58249 cell 2: 2nd reference to page 57700 
On tree page 58249 cell 3: 2nd reference to page 5941 
On tree page 58249 cell 4: Child page depth differs 
On tree page 59501 cell 3: 2nd reference to page 56719 
On tree page 59501 cell 3: Child page depth differs 
On tree page 59501 cell 4: Child page depth differs 
On tree page 54755 cell 1: Rowid 11 out of order (max larger than parent max of 10) 
On tree page 54852 cell 1: Rowid 11 out of order (min less than parent min of 11) 
On tree page 60653 cell 0: 2nd reference to page 58668 
On tree page 60653 cell 1: Child page depth differs 
On tree page 3834 cell 6: 2nd reference to page 62279 
On tree page 3834 cell 6: Child page depth differs 
On tree page 3834 cell 7: Child page depth differs 
On tree page 60737 cell 4: 2nd reference to page 58694 
On tree page 60737 cell 4: Child page depth differs 
On tree page 4632 cell 9: Child page depth differs 
On tree page 33958 cell 1: Child page depth differs 
On tree page 7205 cell 0: 2nd reference to page 7204 
On tree page 7205 cell 1: 2nd reference to page 7256 
On tree page 7205 cell 2: Child page depth differs 
Page 5033 is never used 
Page 54385 is never used 
Page 54481 is never used 
Page 54582 is never used 
Page 54639 is never used 
Page 54687 is never used 
Page 54785 is never used 
Page 54848 is never used 
Page 54849 is never used 
Page 54850 is never used 
Page 54873 is never used 
Page 55669 is never used 
Page 55762 is never used 
Page 55871 is never used 
Page 55920 is never used 
Page 55979 is never used 
Page 56178 is never used 
Page 56223 is never used 
Page 56224 is never used 
Page 56227 is never used 
Page 56237 is never used 
Page 56243 is never used 
Page 56245 is never used 
Page 56248 is never used 
Page 56261 is never used 
Page 56377 is never used 
Page 56824 is never used 
Page 57261 is never used 
Page 57266 is never used 
Page 57303 is never used 
Page 57325 is never used 
Page 57393 is never used 
Page 57424 is never used 
Page 57473 is never used 
Page 57835 is never used 
Page 57847 is never used 
Page 57874 is never used 
Page 57875 is never used 
Page 57887 is never used 
Page 57893 is never used 
Page 57917 is never used 
Page 57918 is never used 
Page 57919 is never used 
Page 57923 is never used 
Page 57932 is never used 
Page 59220 is never used 
Page 59224 is never used 
Page 59226 is never used 
Page 59228 is never used 
Page 59229 is never used 
Page 59230 is never used 
Page 59231 is never used 
Page 59232 is never used 
Page 59235 is never used 
Page 59238 is never used 
Page 59249 is never used 
+0

「沒有關於底層結構的太多細節」。這將是必要的。 – 2014-02-12 13:12:44

+0

我猜一個或多個指標已經變得腐敗。嘗試在sqlite3中打開數據庫並執行以下語句:'pragma integrity_check;',告訴我們它的響應。 –

+0

添加了對原始問題的回覆。 – themightylc

回答

0

數據庫文件已損壞。

這可能以各種方式發生,但電源故障或類似的未寫入緩衝區的災難性故障可能會發生。

你需要建立一個新的數據庫文件。

遵循以下步驟:

  1. 使當前數據庫的備份副本(所以如果你搞砸了,你可以隨時恢復到損壞狀態不如它目前是)
  2. 轉儲當前數據庫的內容:

    sqlite3 test.db 
    > .mode insert 
    > .output test.sql 
    > .dump 
    

    這可能需要一段時間

  3. 創建一個新的數據庫並導入轉儲:

    sqlite3 new.db 
    > .read test.sql 
    
  4. 驗證新數據庫的完整性:

    > pragma integrity_check; 
    ok 
    
  5. 使用新的數據庫,而不是舊的

請注意,您可能會在此過程中丟失數據,但數據庫 corrup t,你不應該繼續使用它

+0

謝謝。我會盡我所能。數據庫通過.NET API(system.data.sqlite)進行加密,這使得處理起來有些麻煩。 – themightylc

相關問題