【问题标题】:Undelete accidentally deleted records in Sqlite3取消删除Sqlite3中意外删除的记录
【发布时间】:2019-10-06 08:06:57
【问题描述】:

作为标题,可能吗?由于我在 FireFox 中丑陋的 html 界面,我不小心删除了另一条记录。不好的是这个记录删除是程序自动级联删除所有内容的根文件夹:(

【问题讨论】:

    标签: sqlite


    【解决方案1】:

    看看undark。我已经用过了。如果记录没有被覆盖,它可以从 SQLite db 文件中导出行(删除或不删除)。最新版本here

    SQLite-Deleted-Records-Parser 不会提供相同类型的输出,但很有用。

    还有一些产品,如SQLite Forensic ExplorerSQLite RepairSqlite Database RecoverySQLiteDoctor

    如果您是开发人员,您可以使用litereplica 避免再次遇到同样的问题。它将单主复制添加到 SQLite。

    但请记住启用时间点恢复,因为当事务被复制到副本时,DROP TABLEDELETE FROM 之类的意外命令也会被复制。使用 PITR,您将能够转到之前的时间点。

    或定期使用Backup API。虽然它会在每次备份时传输整个数据库。

    请记住:如果您在事务处于活动状态时复制 SQLite 文件或使用常规备份方法 副本可以是corrupted

    【讨论】:

    • 请注意,以防其他人尝试使用 undark 或 SQL-Deleted-Records-Parser,undark 的最后一次签入是 5 年前,我尝试使用它来恢复 sqlite DB(由 SQLite 3.11 创建),但它没有恢复任何条目。我尝试了 SQL-Deleted-Records-Parser,它也没有工作 - 没有恢复条目。
    • 你可以试试这个分叉:github.com/mlt/undark
    • undark(两个分支)和 SQL-Deleted-Records-Parser 不适用于最新的 SQLite 版本。
    【解决方案2】:

    对不起——不。备份是我所知道的唯一选择。

    以后,请考虑永远不要发出 DELETE 查询,尤其是从用户可访问的表单(如果有人的话,只让数据库管理员执行)——只需在表中包含一个将记录标记为非活动的字段,然后将其考虑在内在 WHERE 子句中加入您的查询。

    【讨论】:

      【解决方案3】:

      很遗憾,我也不知道有什么办法。但是,在您对 SQLite 数据库文件执行 VACUUM 之前,通常不会从技术上删除已删除的数据。也许您仍然可以在文件上使用某种十六进制编辑器来恢复一些数据。

      【讨论】:

        【解决方案4】:

        也许可以通过十六进制编辑器进入并查看数据。我能找到的唯一信息是元数据已经消失,所以记录不会回来,但数据本身可能仍然存在。这与数据的重要性有很大关系,我怀疑它还不够重要,您可以挖出一个十六进制编辑器。

        【讨论】:

          【解决方案5】:

          数据并不总是立即从文件中删除。如果它有很多并且你很绝望,你可以在文件上使用 UNIX 命令strings。这可能会帮助您恢复各种人类可读数据的点点滴滴,但这将是一个艰难且不准确的过程。

          【讨论】:

            【解决方案6】:

            没办法。如果没有有效的备份,您将无法恢复它。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2020-02-29
              • 2011-08-16
              • 1970-01-01
              • 2018-07-15
              • 1970-01-01
              • 1970-01-01
              • 2012-10-01
              • 2011-11-06
              相关资源
              最近更新 更多