Saya punya beberapa masalah dengan RAM saya (bluescreen beberapa kali, Windows XP) dan sekarang database Firefox saya rusak. Firefox berfungsi, tetapi riwayat saya tidak ada dan melaporkan beberapa inkonsistensi dan kesalahan saat dijalankan pragma integrity_check
pada places.sqlite
:
citra disk basis data salah
Sekarang pertanyaannya, bagaimana cara saya memperbaiki Database-SQLite?
Jawaban:
Catatan
Karena Firefox harus ditutup untuk melakukan prosedur ini, pastikan untuk membuka halaman ini di browser web lain atau cetak sebelum melanjutkan.
Setelah berjam-jam bekerja berusaha memulihkan basis data Places, bahkan membaca kode sumber Firefox, saya sudah berhasil. Begini cara saya melakukannya:
C:\Users\<username>\AppData\Roaming\Mozilla\Firefox\Profiles\<code>.default
folder.places.sqlite
file. Jika file diganti karena korupsi, gunakanplaces.sqlite.corrupt
file untuk pemulihan. Buat salinan cadangan file, bernamaplaces.sqlite.bak
atauplaces.sqlite.corrupt.bak
.sqlite3 places.sqlite
atausqlite3 places.sqlite.corrupt
), lalu masukkan:Karena database rusak, dump database yang dihasilkan tidak lengkap, dan tidak semua data yang dapat dipulihkan telah diambil. Untuk menentukan di mana kesalahan terjadi, cari kata
ERROR
(semua huruf besar) dalam komentar SQL di dalam file dumpdump.sql
(saya menggunakan Notepad ++ untuk melakukan ini), dan bacaINSERT
perintah SQL di atasnya untuk menentukan tabel yang dimaksud. Dalam kasus saya, tabel yang rusak adalahmoz_places
. (Deskripsi tabel yang ditemukan di database Places dapat ditemukan di sini , yang mencakup diagram ER yang sudah usang.) Saya akan menjelaskan cara memulihkan data tambahan dari tabel ini saja; prosedur berikut ini mungkin tidak berlaku untuk tabel lainnya, jadi lewati sub-langkah ini jika tabel selainmoz_places
terlibat.)moz_places
tabel memiliki ID. Baris dibuang dari tabel mengikuti urutan ID ini. 1 ID adalah nilai pertama setelah tanda kurung pembukaan dalamINSERT
pernyataan. Area di mana database rusak kemungkinan merupakan blok kecil baris dalam tabel ini; ide di sini adalah untuk melewati area yang rusak ini dan memulihkan data sebanyak mungkin. Area awal dari blok tersebut diwakili dalam dump sebagai baris sebelumERROR
komentar muncul. Dengan menggunakan ID untuk baris ini, kita dapat menentukan di mana basis data rusak. Kami melakukannya dengan menggunakanSELECT
pernyataan dengan ID sebagai syarat; proses ini membutuhkan beberapa trial and error. Misalnya, jika ID terakhir sebelum kesalahan adalah 49999, dan kesalahan berikut, blok yang rusak dimulai pada ID 50000. Gunakan pernyataan seperti:id >=
dan ulangiSELECT
perintah di atas sampai Anda menemukan nilai terkecil yang tidak menyebabkan SQLite menghasilkan kesalahan. Ini adalah ID yang merujuk pada baris mulai dari mana kita dapat memulihkan data tambahan. Anggap ID ini adalah 50200. Untuk membuang data ini, masukkan:INSERT
pernyataan dalamdump2.sql
file dimulai denganINSERT INTO table VALUES
, jadi gunakan fitur temukan dan ganti di editor teks Anda untuk mengganti semua instance dari string ini denganINSERT INTO moz_places VALUES
.dump2.sql
file dan tempel kedump.sql
file tempatERROR
komentar muncul.ROLLBACK; -- due to errors
di akhir file denganCOMMIT;
.dump.sql
file. Ganti<version>
dengan nilai yang benar, yang diperlukan untuk Firefox untuk menentukan versi skema database berdasarkan versi Firefox, sebagai berikut (ini dapat ditemukan di file sumber Firefoxtoolkit/components/places/Database.cpp
):places.sqlite
, lalu mulai shell SQLite membuatplaces.sqlite
database kosong menggunakansqlite3 places.sqlite
. Ketik.read dump.sql
untuk memuat dump SQL ke dalam database.Informasi lebih relevan dapat ditemukan di halaman-halaman berikut:
Prosedur yang disederhanakan dijelaskan dalam artikel MDN ini tetapi saya belum mengujinya. Meskipun demikian, saya telah memasukkan
PRAGMA
perintah yang diperbarui dari artikel itu.1 SQL biasanya tidak menjamin bahwa output basis data akan diberikan dalam urutan apa pun kecuali Anda menggunakan
ORDER BY
klausa. Namun,ORDER BY
kemungkinan akan gagal menghasilkan output apa pun pada basis data yang rusak (karena SQLite perlu membaca seluruh tabel sebelum dapat menghasilkan output apa pun). Sejauh yang saya tahu, Firefox selalu menulismoz_places
entri tabel dengan ID berurutan, sehingga kita dapat mengasumsikan bahwa semua output dipesan oleh ID.sumber
Yah, tergantung pada seberapa rusak itu, perbaikan mungkin tidak mungkin dilakukan. Taruhan terbaik Anda mungkin untuk mencoba dan membuang db menggunakan
sqlite
, kemudian lihat apa yang dapat Anda selamatkan.Jika gagal, Anda mungkin harus memulihkan dari cadangan.
Untuk membuang dan membuat ulang basis data, gunakan perintah
.dump
:sumber
d:\sqlite3.exe d:\idimager.cat.db .dump | d:\sqlite3.exe d:\newdb.cat.db
. Semua favicons sekarang hilang, tetapi saya mereka membangun kembali ketika saya mengunjungi situs. Terima kasih lagi!places.sqlite.corrupt
file. Saya mengirim jawaban lain dengan solusi yang bekerja untuk saya.Seperti biasa dengan melakukan perbaikan seperti ini, saya sarankan Anda terlebih dahulu membuat setidaknya satu salinan cadangan file places.sqlite Anda yang terletak di direktori profil Anda. Memiliki cadangan memungkinkan Anda untuk mencoba berbagai hal berbeda untuk memperbaiki masalah seperti itu sambil mengetahui bahwa jika upaya perbaikan memperburuk keadaan, Anda selalu dapat membuat salinan cadangan yang akan digunakan untuk mencoba lagi.
Bergantung pada apa yang rusak dan seberapa parah korupnya, dimungkinkan untuk memperbaiki masalah dengan ekstensi Tempat Pemeliharaan . Saya berakhir dengan file places.sqlite yang rusak pada beberapa kesempatan. Places Maintenance telah mampu memperbaiki masalah setiap kali dengan menjalankan berbagai pemeriksaan / perbaikan yang disediakannya sebagai operasi dalam dialog opsinya. Berbagai pemeriksaan dan / atau pelaporan yang berbeda hanya perlu beberapa menit hingga beberapa menit.
Jika ini tidak berhasil, maka lanjutkan dengan cara memperbaikinya secara manual dengan cara yang mirip dengan yang dijelaskan DragonLord di atas mungkin apa yang dibutuhkan.
sumber
Proses ini dijelaskan pada MDN membantu saya menyelesaikan masalah di mana halaman baru yang saya kunjungi tidak direkam dalam riwayat browser. Saya tidak memiliki file
places.sqlite.corrupt
(atauplaces.sqlite-corrupt
), tetapi memeriksa integritasplaces.sqlite
file saya mengungkapkan gambar disk basis data kesalahan.Keluar dari Firefox dan buat cadangan profil Firefox Anda sebelum melangkah lebih jauh di sini.
Mulai Firefox. Sejarah harus bekerja lagi.
Saya menggunakan Mac dengan Firefox 60.0.1. Anda mungkin perlu menyesuaikan perintah untuk platform Anda.
sumber