从磁盘恢复已删除的SQLite记录

60次阅读
没有评论

问题描述

在尝试访问安卓设备(例如OnePlus 7 Pro)上由Wellbeing应用跟踪的屏幕时间数据时,遇到的问题是该数据库仅保存最近一个月的数据,并且旧记录被定期删除以节省空间。现有工具可能无法轻松地从硬盘恢复这些已删除的SQL记录。
由于SQLite文件频繁更新,并且每次更新都只添加新记录并删除旧记录,传统的磁盘备份和恢复方法可能并不适用。本文将探讨恢复已删除记录的方法及可用工具。

解决方案

一、了解原理与限制

  • 每次对数据库进行更新时(如新增记录或删除旧记录),SQLite会更新其内部结构。
  • SQLite数据库文件本身不会保存已被删除的记录,因为这些记录的数据空间会被系统重新利用或覆盖。

二、尝试现有方法

  1. 手动备份
    即使用命令行工具提取当前数据库内容进行手动备份。

sh
sqlite3 /data/data/com.google.android.apps.wellbeing/databases/app_usage <backup_script.sql>

其中<backup_script.sql>是导出所有数据的SQL脚本。

  1. Undark工具
    Undark是一个专门用于恢复SQLite文件内部结构的工县。但是,由于记录被频繁更新和删除,其效果有限。

三、尝试其他选项

  • 使用DBLayOutSQLite Browser等数据库浏览工具,手动尝试恢复数据。

sql
.header on
select * from app_usage;

  • 尝试Hex编辑器
    利用二进制格式查找被删除记录的位置,此方法较为复杂且不常用。

四、进一步的探索与开发

  1. 自定义脚本
    使用Python编写自定义读取和解析SQLite文件的方法。这种方法涉及到解析SQLite数据库的实际结构以恢复被删除的数据。

  2. 使用第三方工具帮助

  3. 检查是否有开源项目或社区维护的类似功能模块,如libsqlite等。

五、最后建议

尽管有多种方法可以尝试,但考虑到记录被频繁更新并重新利用数据空间的情况,恢复已删除的具体记录比较困难。在没有备份的情况下,这种方法可能只能部分还原数据,或者根本无法得到完整的记录。因此,最可靠的方法是确保在重要历史数据产生时进行定期手动或自动化备份。

希望以上信息能帮助你更好地了解如何处理此类问题,并找到适合的解决方案。如果需要进一步的帮助,请提供更多详细信息以便我们能够提供针对性的支持。

正文完