বিঃদ্রঃ
এই প্রক্রিয়াটি সম্পাদন করতে ফায়ারফক্স অবশ্যই বন্ধ করতে হবে, অন্য ওয়েব ব্রাউজারে এই পৃষ্ঠাটি খুলতে ভুলবেন না বা এগিয়ে যাওয়ার আগে এটি মুদ্রণ করতে ভুলবেন না।
কয়েক ঘন্টা পরিশ্রম করার পরেও স্থানগুলি ডাটাবেস পুনরুদ্ধার করার চেষ্টা করেছে, এমনকি ফায়ারফক্সের উত্স কোডটি পড়ে, আমি সফল হতে পেরেছি। আমি এটি কীভাবে করেছি তা এখানে:
- এসকিউএলাইট শেলের সর্বশেষতম সংস্করণটি ডাউনলোড করুন এবং এটি আপনার প্রোফাইল ফোল্ডারে বের করুন। উইন্ডোজ ভিস্তা এবং উইন্ডোজ 7 এ এটি
C:\Users\<username>\AppData\Roaming\Mozilla\Firefox\Profiles\<code>.defaultফোল্ডারে রয়েছে।
- ফায়ারফক্স চালু থাকলে বন্ধ করুন।
- স্থান ডাটাবেস
places.sqliteফাইল আছে। দুর্নীতির কারণে ফাইলটি প্রতিস্থাপন করা হলে places.sqlite.corruptপুনরুদ্ধারের জন্য ফাইলটি ব্যবহার করুন । ফাইল নাম একটি ব্যাকআপ অনুলিপি তৈরি করুন places.sqlite.bakবা places.sqlite.corrupt.bak।
- ডাটাবেস ফাইল (
sqlite3 places.sqliteবা sqlite3 places.sqlite.corrupt) খুলতে SQLite শেলটি ব্যবহার করুন , তারপরে প্রবেশ করুন:
.output dump.sql -- sends output to file dump.sql
.dump -- dumps database to file
ডাটাবেস দুর্নীতিগ্রস্থ হওয়ায় ফলাফল প্রাপ্ত ডাটাবেস ডাম্প সম্পূর্ণ হয়নি, এবং পুনরুদ্ধারযোগ্য সমস্ত ডেটা পুনরুদ্ধার করা হয়নি। ত্রুটিটি কোথায় ঘটেছে তা নির্ধারণ করতে, ERRORডাম্প ফাইলের ভিতরে একটি এসকিউএল মন্তব্যে (সমস্ত ক্যাপগুলি) শব্দটি অনুসন্ধান করুন dump.sql(আমি এটি করতে নোটপ্যাড ++ ব্যবহার করেছি ) INSERTএবং প্রশ্নের সারণী নির্ধারণ করতে এটির উপরে থাকা এসকিউএল কমান্ডটি পড়ুন । আমার ক্ষেত্রে, ক্ষতিগ্রস্থ টেবিলটি হ'ল moz_places। (স্থানের ডাটাবেসে সারণীগুলির বিবরণ এখানে পাওয়া যাবে , যার মধ্যে একটি পুরানো ER ডায়াগ্রাম অন্তর্ভুক্ত রয়েছে this) আমি কেবলমাত্র এই টেবিল থেকে কীভাবে অতিরিক্ত ডেটা পুনরুদ্ধার করব তা ব্যাখ্যা করব; নিম্নলিখিত পদ্ধতিটি সম্ভবত অন্যান্য টেবিলের জন্য প্রযোজ্য নয়, সুতরাং যদি কোনও টেবিল moz_placesজড়িত থাকে তবে এই সাব-পদক্ষেপগুলি এড়িয়ে যান ))
moz_placesটেবিলের প্রতিটি সারিতে একটি আইডি রয়েছে। সারণি এই আইডির আদেশ অনুসরণ করে টেবিল থেকে ফেলে দেওয়া হয়। 1INSERT বিবৃতিতে খোলার প্রথম বন্ধনীর পরে আইডি হ'ল প্রথম মান । ডাটাবেসটি যে অঞ্চলে ক্ষতিগ্রস্থ হয়েছে সে অঞ্চলটি সম্ভবত এই টেবিলের সারিগুলির একটি ছোট ব্লক হতে পারে; এখানে ধারণাটি হ'ল এই ক্ষতিগ্রস্ত অঞ্চলটি এড়ানো এবং যতটা সম্ভব ডেটা পুনরুদ্ধার করা। ERRORমন্তব্যটি উপস্থিত হওয়ার আগে এই জাতীয় ব্লকের প্রারম্ভিক অঞ্চলটি সারি হিসাবে ডাম্পে উপস্থাপন করা হয় । এই সারির আইডি ব্যবহার করে, আমরা নির্ধারণ করতে পারি যে কোথায় ডাটাবেস ক্ষতিগ্রস্থ হয়েছে। SELECTশর্ত হিসাবে আইডি সহ বিবৃতি ব্যবহার করে আমরা এটি করি ; এই প্রক্রিয়াটি কিছু পরীক্ষা এবং ত্রুটি নেয়। উদাহরণস্বরূপ, ত্রুটির আগে শেষ আইডিটি 49999 হয় এবং ত্রুটিটি অনুসরণ করে ক্ষতিগ্রস্ত ব্লকটি 50000 আইডি থেকে শুরু হয় statements বিবৃতি ব্যবহার করুন যেমন:
- অপ্রয়োজনীয় আউটপুট দমন
- নিম্নলিখিত কমান্ডটি উইন্ডোজ সিস্টেমগুলির জন্য
- লিনাক্স এবং অন্যান্য ইউনিক্স এবং ইউনিক্স-মতো সিস্টেমের জন্য .output / dev / null ব্যবহার করুন
.আউটপুট NUL
মোড_প্লেসগুলি থেকে আইডি নির্বাচন করুন যেখানে আইডি> = 50100;
- নিম্নলিখিতটি অনুসরণ করে মানটি সামঞ্জস্য করুন
id >=এবং উপরের SELECTকমান্ডটি পুনরাবৃত্তি করুন যতক্ষণ না আপনি সর্বাধিকতম মান খুঁজে পান যা এসকিউএলাইটকে কোনও ত্রুটির আউটপুট তৈরি করে না। এটি সেই আইডি যা শুরু হওয়া সারিটিকে বোঝায় যা থেকে আমরা অতিরিক্ত ডেটা পুনরুদ্ধার করতে পারি। আসুন এই আইডিটি 50200 হিসাবে ধরে নেওয়া যাক this এই ডেটাটি ডাম্প করতে, প্রবেশ করুন:
.output dump2.sql
.মোড sertোকান
নির্বাচন করুন * থেকে মোজ_প্লেসগুলি যেখানে আইডি> = 50200;
- স্বাভাবিক আউটপুট আচরণ পুনরুদ্ধার করুন
.আউটপুট stdout
.মড তালিকা
- নোট করুন যে ফাইলটির
INSERTবিবৃতিগুলি dump2.sqlশুরু হয় INSERT INTO table VALUES, সুতরাং এই স্ট্রিংয়ের সমস্ত দৃষ্টান্ত প্রতিস্থাপন করতে আপনার পাঠ্য সম্পাদকটিতে বৈশিষ্ট্যটি সন্ধান করুন এবং প্রতিস্থাপন করুন INSERT INTO moz_places VALUES।
dump2.sqlফাইলটির পুরো বিষয়বস্তু অনুলিপি করুন এবং dump.sqlযেখানে ফাইলটি ERRORমন্তব্য উপস্থিত হবে সেখানে এটি আটকে দিন ।
ROLLBACK; -- due to errorsফাইলটির শেষে এটিকে প্রতিস্থাপন করুন COMMIT;।
- নীচের কোডটি
dump.sqlফাইলের শীর্ষে যুক্ত করুন। প্রতিস্থাপন <version>নিম্নরূপ (এই ফায়ারফক্স সোর্স ফাইল খুঁজে পাওয়া যেতে পারে, সঠিক মান, যা ফায়ারফক্স জন্য প্রয়োজন ডাটাবেসের স্কিমা Firefox এর সংস্করণের উপর ভিত্তি করে সংস্করণ নির্ধারণ সঙ্গে toolkit/components/places/Database.cpp):
- ফায়ারফক্স 52: স্কিমা সংস্করণ 35
- ফায়ারফক্স 53: স্কিমা সংস্করণ 36
- ফায়ারফক্স 57: স্কিমা সংস্করণ 39
- ফায়ারফক্স 58: স্কিমা সংস্করণ 41
- ফায়ারফক্স 60: স্কিমা সংস্করণ 43
- ফায়ারফক্স 61: স্কিমা সংস্করণ 47
- ফায়ারফক্স 62: স্কিমা সংস্করণ 52
- ফায়ারফক্স 69: স্কিমা সংস্করণ 53
PRAGMA user_version = <version>;
PRAGMA জার্নাল_মোড = কাটা;
PRAGMA পৃষ্ঠা_ আকার = 32768;
শূন্যস্থান;
PRAGMA জার্নাল_মোড = ওয়াল;
- এসকিউএল শেল থেকে প্রস্থান করুন, মুছুন
places.sqlite, তারপরে এসকিউএলাইট শেলটি খালি places.sqliteডাটাবেস ব্যবহার করে শুরু করুন sqlite3 places.sqlite। .read dump.sqlডাটাবেসে এসকিউএল ডাম্প লোড করতে টাইপ করুন ।
- ফায়ারফক্স শুরু করুন এবং নিশ্চিত করুন যে আপনার ইতিহাস এবং অবস্থান বারটি ইচ্ছাকৃতভাবে কাজ করছে। একবার আপনি নিশ্চিত হয়ে নিলেন যে সবকিছু ঠিক আছে, প্রোফাইল ফোল্ডার থেকে কার্যকর ডাটাবেস ডাম্প ফাইল এবং এসকিউএলাইট শেল সরিয়ে ফেলুন।
আরও প্রাসঙ্গিক তথ্য নিম্নলিখিত পৃষ্ঠাগুলিতে পাওয়া যাবে:
সরলীকৃত পদ্ধতিটি এই এমডিএন নিবন্ধে বর্ণিত হয়েছে তবে আমি এটি পরীক্ষা করে দেখিনি। তবুও, আমি PRAGMAনিবন্ধটি থেকে আপডেট করা আদেশগুলি অন্তর্ভুক্ত করেছি ।
1 এসকিউএল সাধারণত গ্যারান্টি দেয় না যে আপনি ORDER BYধারাটি ব্যবহার না করে কোনও ক্রমে ডাটাবেস আউটপুট দেওয়া হবে । তবে, ORDER BYকোনও দূষিত ডাটাবেসে কোনও আউটপুট উত্পাদন করতে ব্যর্থ হবে (এসকিউএলাইটের কোনও আউটপুট উত্পাদন করার আগে পুরো টেবিলটি পড়তে হবে)। যতদূর আমি জানি, ফায়ারফক্স সর্বদা moz_placesসিক্যুয়াল আইডি সহ টেবিল এন্ট্রি লিখেছে , তাই আমরা ধরে নিতে পারি যে সমস্ত আউটপুট আইডি দ্বারা অর্ডার করা হয়েছে।