Sqlite

從 SQLite .db 文件數據中恢復數據

  • August 28, 2019

為了提供一些背景知識,我正在從多個 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 編輯器執行查詢以提取已刪除的數據。希望這個建議對你有用。

引用自:https://dba.stackexchange.com/questions/168205