2014-02-07 108 views
2

我想恢復被刪除的記錄,並從SQLite的數據庫文件放置的數據,我如何從sqlite中恢復已刪除的數據?

我檢查我的數據庫文件,文本編輯器,我看到丟棄的數據仍然是有..

我使用SQLite3.dll (in c#)但我can` t找到一些屬性打開分貝與丟失的數據或...

有沒有任何庫幫助我?或從sqlite數據庫文件恢復數據的簡單代碼?

編輯1:

我試圖找到一個數據恢復庫或程序源碼..許多searchs後,我發現http://www.devart.com/dotconnect/sqlite/docs/Devart.Data.SQLite~Devart.Data.SQLite.SQLiteDump.html

SQLiteConnection.Open(); 
SQLiteDump sqSqlDump = new SQLiteDump(); 
sqSqlDump.Connection = SQLiteConnection1; 
sqSqlDump.IncludeDrop = true;       //<<-- check here 
sqSqlDump.Backup(); 
StreamWriter stream = new StreamWriter("d:\\dump.dmp"); 
stream.WriteLine(sqSqlDump.DumpText); 
stream.Close(); 

,我可以使用IncludeDrop財產爲後盾數據我但這個圖書館是不是免費的,我不能使用它..我喜歡找到免費的圖書館或程序...

+1

如果你的時間比你的錢少,你必須閱讀[文件格式文檔](http://www.sqlite.org/fileformat2.html)並手工提取數據。 –

+0

@CL,tanx ..它對我很好..我的問題是我住在我沒有去過簽證卡或在線購買的國家或..我應該寫它,而不是買它..;) –

回答

0

我不認爲這是可能的,請參閱Documentation。我不知道你在文本編輯器中看到的是什麼數據。

+0

tanQ但它可能的,我可以看到在db文件中刪除的數據..請檢查編輯1 –

3

當你刪除記錄時,SQLite會刪除數據。您可以實施一種模式,在該模式下數據只被標記爲已刪除,或者可能是存儲所有版本數據的系統。您可以通過添加字段來標記這些屬性。然後,當您選擇時,將其更改爲考慮新字段功能。

像:

select * from mytable where mytable.deleted<>true and etc=etc 

的SQLite存儲在一個文件中的所有它的數據。如果您有文件系統備份服務,則可以使用舊版本的數據庫。

當SQLite刪除記錄時,可能在文件中留下了虛影數據。這些數據只是垃圾信息,不允許您在刪除之前可靠地返回到前一個點。

SQLite數據庫文件是二進制的,小心使用文本編輯器編輯它,如果你保存它將被損壞!

+0

tanx幫助我,但我需要恢復庫,我想打開db文件,我沒有寫程序..請檢查Edit1 –

+0

,因爲SQLite通過編寫新的B樹和聚簇索引記錄等來刪除。你可能會發現有些東西的碎片,但是很可能大部分數據將永遠消失。如果他們一次性刪除很大比例,那麼您更有可能看到文件中剩餘的部分。 – AnthonyLambert

+1

「大部分數據將會消失」 - 這是不正確的。我只是不小心丟下了一個〜15k行的表格,當用編輯器打開它時,幾乎所有內容都可以看到。恢復這可能是困難的,是的 – Blauhirn

3

通過僱傭一個(非常昂貴的)數據恢復公司,可以通過分析二進制文件來恢復數據,至少部分是可能的。你可能無法自己做,因爲正如其他人所說的那樣,「當你刪除記錄時SQLite會永久刪除數據」,這是真的,因爲SQLite中的數據刪除操作涉及覆蓋描述數據的位置的文件中的元數據是什麼以及它如何與其他數據相關。

部分數據可能仍然物理上的文件中,但:

  • 的指向這個數據(sqlite的使用B樹)都不見了,文件區域被標記爲在metedata
  • 「自由空間」
  • 在使用數據庫的過程中,某些空間可能已被覆蓋,並且現在包含垃圾。

如果你有沒有爲未來幾個月的做,你可以通過分析SQLite的文件結構,並運用這些知識去嘗試猜測開始在數據威力已經結束了在文件中前被刪除(意思是,其元數據被覆蓋),因此執行恢復。你需要從這裏開始:http://www.sqlite.org/fileformat.html

+0

在處理任何數據庫時,我不會依賴數據恢復公司,因爲數據庫傾向於相對快速地重用磁盤頁面。 –

相關問題