如何从sqlite恢复已删除的数据?

时间:2014-02-07 12:49:08

标签: c# sqlite data-recovery

我希望恢复已删除的记录并从SQLite db文件中删除数据

我用文本编辑器检查我的db文件,我看到丢弃的数据仍在那里..

我正在使用SQLite3.dll (in c#)但是我找不到具有删除数据的开放数据库的属性或...

有没有帮助我的图书馆?或者从sqlite db文件中恢复数据的简单代码?

修改1:

我尝试为sqlite找到数据恢复库或程序..经过多次搜索后我发现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属性来支持数据,但这个库不是免费的,我无法使用它..我想找到免费的图书馆或程序...

3 个答案:

答案 0 :(得分:3)

删除记录时,SQLite会永久删除数据。由您来实现一个模型,其中数据仅标记为已删除,或者可能是存储所有数据版本的系统。您可以通过添加字段来标记这些属性。然后,当您选择更改它们以考虑新字段功能时。

像:

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

SQLite将所有数据存储在一个文件中。如果您有文件系统备份服务,则可以获得旧版本的数据库。

当SQLite删除记录时,文件中可能还有重影数据。这些数据只是垃圾,不允许您在删除之前可靠地回到之前的位置。

SQLite db文件是二进制文件,如果保存它,请小心使用文本编辑器进行编辑,否则会损坏!

答案 1 :(得分:3)

至少可以通过雇用(非常昂贵的)数据恢复公司来实现,该公司将通过分析二进制文件来恢复数据。您可能无法自己做,因为正如其他人所说的那样,“SQLite在删除记录时会永久删除数据”,这是事实,因为SQLite中的数据删除操作涉及覆盖文件中的元数据,描述数据的位置是和它如何与其他数据相关。

部分数据可能仍然存在于文件中,但是:

  • 指向此数据的指针(sqlite使用btree)消失,文件区域在metedata中标记为“可用空间”
  • 在使用数据库的过程中,某些空间可能已被覆盖,现在包含垃圾。

如果您在接下来的几个月内无所事事,您可以先分析SQLite文件结构并应用该知识来尝试猜测数据可能最终在文件中的位置在它被删除之前(意思是,它的元数据被覆盖)然后执行恢复。您需要从这里开始:http://www.sqlite.org/fileformat.html

答案 2 :(得分:0)

我认为不可能,请参阅Documentation。我不知道你在文本编辑器中看到了什么数据。