【问题标题】:How can i recover deleted data from sqlite? [duplicate]如何从 sqlite 恢复已删除的数据? [复制]
【发布时间】:2014-03-04 21:27:12
【问题描述】:

我想从 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 属性为我备份数据,但是这个库不是免费的,我不能使用它。我喜欢找到免费的库或程序...

【问题讨论】:

  • 如果你的时间不如你的钱,你必须阅读file format documentation并手动提取数据。
  • @CL, tanx .. 这对我有好处.. 我的问题是我住在我无法使用签证卡或在线购买或.. 我应该写而不是购买的国家它.. ;)

标签: c# sqlite data-recovery


【解决方案1】:

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

喜欢:

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

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

当 SQLite 删除记录时,文件中可能会留下幽灵数据。这些数据只是垃圾,不会让您可靠地恢复到删除前的前一点。

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

【讨论】:

  • tanx 帮助我,但我需要恢复库,我想打开我没有编写程序的 db 文件。请检查 Edit1
  • 因为 SQLite 通过编写新的 b 树和聚集索引记录等进行删除。您可能会发现那里的一些片段,但很可能大部分数据将永远消失。如果他们一次性删除了很大一部分,那么您更有可能看到文件中剩余的部分。
  • “大部分数据都将消失”——这不是真的。我只是不小心丢弃了一个大约 15k 行的表,使用编辑器打开它时几乎仍然可以看到其中的所有内容。恢复这可能很难,是的
  • @Blauhirm 您是否完整阅读了我上面的评论?困惑!
【解决方案2】:

至少部分可以通过聘请(非常昂贵的)数据恢复公司来通过分析二进制文件来恢复数据。您可能无法自己执行此操作,因为正如其他人所说,“SQLite 会在您删除记录时永久删除数据”,这是真的,因为 SQLite 中的数据删除操作涉及覆盖文件中描述数据位置的元数据是以及它与其他数据的关系。

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

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

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

【讨论】:

  • 我真的在处理任何数据库时都不会依赖数据恢复公司,因为数据库倾向于相对较快地重用磁盘页面。
【解决方案3】:

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

【讨论】:

  • tanQ 但有可能,我可以在 db 文件中看到已删除的数据.. 请检查 Edit1
猜你喜欢
  • 1970-01-01
  • 2020-03-13
  • 2021-10-28
  • 2023-04-09
  • 2014-02-03
  • 2021-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多