我不小心删除了一条记录,该记录是根文件夹,程序会自动级联删除所有内容。如何恢复误删除的记录?
看看undark。我已经用过了。如果记录未被覆盖,它可以从 SQLite 数据库文件中导出行(删除或未删除)。最新版本在这里。
SQLite-Deleted-Records-Parser 不会提供相同类型的输出,但可能很有用。
还有一些产品,例如 SQLite Forensic Explorer、SQLite Repair、Sqlite Database Recovery 和 SQLiteDoctor。
如果您是开发人员,您可以使用 litereplica 避免再次遇到同样的问题。它为 SQLite 添加了单主复制。
但请记住启用时间点恢复,因为当事务被复制到副本时,像
DROP TABLE
或 DELETE FROM
这样的意外命令也会被复制。通过 PITR,您将能够转到之前的时间点。
或定期使用备份 API。尽管它在每次备份时都会传输整个数据库。
请记住:如果您在事务处于活动状态时复制 SQLite 文件或使用常规备份方法 副本可能会已损坏。
不幸的是我也不知道有什么办法。 但是,在对 SQLite 数据库文件执行 VACUUM 之前,删除的数据通常不会从技术上删除。 也许您仍然可以使用文件上的某种十六进制编辑器恢复一些数据。
抱歉——不。备份是我所知道的唯一选择。
将来,考虑永远不要发出 DELETE 查询,尤其是从用户可访问的表单中发出(只有数据库管理员才能执行此操作,如果有的话)——只需在表中包含一个将记录标记为非活动的字段,然后将其考虑到您在 WHERE 子句中的查询。
也许可以通过十六进制编辑器查看数据。我能找到的唯一信息说元数据已经消失,因此记录不会回来,但数据本身可能仍然存在。这与数据的重要性有很大关系,我怀疑它还没有重要到让你挖出一个十六进制编辑器。
数据并不总是立即从文件中删除。如果文件太多而您又绝望了,您可以对文件使用 UNIX 命令
strings
。这可能会帮助您恢复人类可读数据的各种位和片段,但这将是一个艰难且不准确的过程。
我能够按照从损坏的 SQLite 数据库恢复数据的说明恢复丢失的数据。
$ sqlite3 databasename.sqlite .recovery > recovered.sql
输出文件包含一个名为
lost_and_found
的表。通过查看数据,我能够找出每行最初来自哪些表。每个恢复的行有四列与 sqlite 相关,其余的是数据。由于每个源表的列数不同,因此恢复的数据将添加 NULL
。
没办法。如果没有有效的备份,您将无法恢复它。
如果您不小心删除了根文件夹及其内容:
Check the Recycle Bin or Trash for possible recovery.
If you have a recent backup, restore the data from that backup.
Look for an "undo" feature within the application.
Contact the application's support team for assistance.
In critical cases, consider professional data recovery services.
Learn from the incident and implement safeguards to prevent future accidental deletions.