首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从sqlite中恢复已删除的数据?

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

Stack Overflow用户
提问于 2014-02-07 12:49:08
回答 3查看 8K关注 0票数 3

我要从SQLite db文件恢复已删除的记录和删除的数据,

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

我使用的是SQLite3.dll (in c#),但是我找不到打开数据库的属性,删除数据或.

有图书馆可以帮我吗?还是从sqlite文件中恢复数据的简单代码?

编辑1:

我试图为sqlite找到一个数据恢复库或程序。经过多次搜索,我找到了http://www.devart.com/dotconnect/sqlite/docs/Devart.Data.SQLite~Devart.Data.SQLite.SQLiteDump.html

代码语言:javascript
复制
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属性将数据备份给我,但是这个库不是免费的,我不能使用它。我喜欢找免费的图书馆或程序..。

EN

回答 3

Stack Overflow用户

发布于 2014-02-07 13:12:18

当您删除记录时,SQLite会临时删除数据。您应该实现一个只将数据标记为已删除的模型,或者是存储所有版本数据的系统。您可以通过添加字段来标记这些属性来做到这一点。然后,当您选择时,您可以更改它们以说明新字段的功能。

比如:

代码语言:javascript
复制
select * from mytable where mytable.deleted<>true and etc=etc

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

当SQLite删除记录时,可能是文件中留下的鬼数据。这些数据都是垃圾,不会让您在删除之前可靠地回到前一点。

SQLite db文件是二进制文件,如果保存它将被破坏,请小心使用文本编辑器编辑它!

票数 3
EN

Stack Overflow用户

发布于 2014-02-07 13:38:37

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

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

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

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

票数 3
EN

Stack Overflow用户

发布于 2014-02-07 12:55:17

我认为这是不可能的,见文档。我不知道你在文本编辑器中看到了什么数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21628240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档