Sqlite
從 SQLite .db 文件數據中恢復數據
為了提供一些背景知識,我正在從多個 SQLite DB 文件中尋找特定文本的出現。我最初嘗試對多個文件中的文本進行簡單的 grep,然後 grep 在其中一個 .db 文件中找到匹配項。
# grep "mytext" *.db Binary file sqlite.db matches
所以我使用十六進制(注意十六進制)編輯器打開了 sqlite.db 文件並蒐索了相同的文本。它在多個位置和 HEX 編輯器中被發現,並且我可以看到文本字元串,我能夠真正看到我正在尋找的文本。
所以我然後使用 SQLite 打開了 .db 文件。該文件大約有三打桌子。所以我首先嘗試(從 SQLite 內部):
sqlite> .output sqlite.dbdump.sql sqlite> .dump
…然後…
# grep "mytext" sqlite.dbdump.sql
…沒有找到結果…很奇怪。
我更進一步嘗試:
# echo ".tables" | sqlite3 sqlite.db | while read tablez # do # echo "select * from $tablez" | sqlite3 sqlite.db # done | grep -i "mytext"
…沒有找到結果…又奇怪了。
任何人都可以闡明此匹配文本在 SQLite DB 文件中的位置嗎?我的 .dump 和 table 選擇的隱藏表是否可能沒有搜尋到?
自從發布此消息以來,我相信這些都是已刪除的記錄。我現在需要找到最好的方法來嘗試恢復而不是吸塵。
文本是否可能出現在磁碟空間尚未“回收”或“垃圾收集”的*已刪除行中。*如果你清理數據庫並使用 grep 再次檢查,文本應該消失了。
我現在需要找到最好的方法來嘗試恢復而不是吸塵。
要恢復數據,而不是清理數據,請照原樣製作數據庫副本,尋找十六進制編輯器,然後查看可以手動挽救的內容。
另請參閱Stack Overflow 上的取消刪除意外刪除的 Sqlite3 中的記錄。
要從 SQLite .db 文件中恢復已刪除的數據,您可以嘗試使用此 SQL Forensic Explorer 實用程序。您可以從此連結下載展示版本。
您甚至可以使用內置 SQL 編輯器執行查詢以提取已刪除的數據。希望這個建議對你有用。