আমাকে এমন একটি ডাটাবেস পুনরুদ্ধার করার চেষ্টা করা হয়েছে যা দুর্নীতির কারণে ভুগেছে (আই / ও ব্যর্থতার কারণে, যা পরে সংশোধন করা হয়েছে)। আমি ডেটাবেস বা এটিতে কী আছে তার সাথে পরিচিত নই।
আমাকে একটি পুরানো (weeks 3 সপ্তাহ) পূর্ণ ব্যাকআপ এবং একাধিক লেনদেন লগ দেওয়া হয়েছে ... তবে লেনদেনের লগগুলি অনুপস্থিত রয়েছে, তাই আমি কেবল একটি নির্দিষ্ট তারিখ পর্যন্ত পুনরুদ্ধার করতে পারি। এখানে 2.5 সপ্তাহের মতো ডেটা নিখোঁজ রয়েছে (এবং এই ডাটাবেসে ক্রমাগত প্রচুর ডেটা যুক্ত হচ্ছে) added
আমাকে দুর্নীতিগ্রস্থ ডাটাবেসের একটি অনুলিপিও দেওয়া হয়েছে (যা অ্যাক্সেসযোগ্য তবে প্রচুর পৃষ্ঠাগুলি দুর্নীতিগ্রস্থ / নিখোঁজ রয়েছে)।
আমি টিপিকাল DBCC CHECKDB
কমান্ডগুলি চেষ্টা করেছি (এখনও নেই repair_allow_data_loss
, এটি আমার শেষ অবলম্বন হবে যদি অন্য কিছু না করে)।
অনেকগুলি এসে ডেটাবেজে যাওয়ার পরে (ডিবি 1.5 টেরাবাইট ছোট দৈত্য এবং আমি যা কিছু করি তা ধীর এবং কিছুটা সময় নেয়), আমি একটি অনলাইন পৃষ্ঠা দুর্নীতিগ্রস্থ পৃষ্ঠাগুলির জন্য সুপরিচিত ভাল ব্যাকআপ থেকে পুনরুদ্ধার করার চেষ্টা করেছি।
এটি করার জন্য, আমি একটি স্ক্রিপ্ট করেছি RESTORE DATABASE <foo> PAGE='pages' FROM DISK='<bar.bak>'
যা DBCC CHECKDB
আউটপুট থেকে অনেকগুলি কমান্ড তৈরি করে (যেমন: একটি রেজেক্স এবং একটি স্বতন্ত্র) ... এতদূর ভাল, এটি এমন এক পর্যায়ে কাজ করেছে যেখানে বলা হয়েছে যে আমি 1000 পৃষ্ঠার সীমাতে পৌঁছেছি said প্রতি ফাইল প্রতি (এই ডিবিতে 8 টি ফাইল রয়েছে) পুনরুদ্ধার কমান্ড প্রতি।
সুতরাং এটি আমাকে "অনলাইন পুনরুদ্ধার সম্পূর্ণ করুন" বলতে বলছে, তবে এটি কীভাবে করা যায় তা নিয়ে আমার ক্ষতি হচ্ছে ... আমার যে পুচ্ছ ব্যাকআপটি শুরু করছি তার চেয়ে আমার কোনও লেজ লগ বা আরও সম্পূর্ণ কিছু নেই, তাই আমি বাকী পৃষ্ঠাগুলি দিয়ে চেষ্টা চালিয়ে যেতে পুনরুদ্ধারটি কীভাবে সম্পন্ন করতে হয় তা আমি মূলত জানি না।
আমি চেষ্টা করেছি RESTORE DATABASE <foo> WITH RECOVERY
কিন্তু এটিও কাজ করে না, এটি আমার কাছে এমন লগের জন্য জিজ্ঞাসা করে যা আমার কাছে নেই।
আমি কীভাবে এখান থেকে কিছু পুনরুদ্ধার করার চেষ্টা করতে পারি সে সম্পর্কে কারও কি কোনও টিপস রয়েছে? বা অনলাইনে পুনরুদ্ধার কীভাবে "সম্পূর্ণ" করবেন যাতে আমি আরও পৃষ্ঠা পুনরুদ্ধার করার চেষ্টা চালিয়ে যেতে পারি? আমি যদি অফলাইন পুনরুদ্ধার করার চেষ্টা করি (মূলত WITH NORECOVERY
সবকিছুতে যুক্ত করে এবং শেষে এটিকে ফিরিয়ে আনার চেষ্টা করি) তবে আমার কি একই সমস্যা হবে?
হাতে হাতে ডাটাবেস তৈরি করা মূলত অন্বেষণযোগ্য ... লক্ষ লক্ষ সারি সহ কয়েকশ টেবিল রয়েছে এবং এর কোনটির কোনও স্পষ্ট অর্থ নেই। দুর্নীতিগ্রস্ত ডিবি SELECT
কয়েক মিলিয়ন সারি পরে অনুসন্ধানগুলিতে ব্যর্থ হবে তবে আমি নিশ্চিত না যে আমি কোথায় কাজ করতে পারি। আমি সমস্ত অ-ক্লাস্টারযুক্ত সূচকগুলি পুনর্নির্মাণের চেষ্টা করেছি, তবে সারি ডেটা সহ দূষিত পৃষ্ঠাগুলি রয়েছে, সুতরাং এটিও কার্যকর হয়নি।
কিছু ডেটা ক্ষতি গ্রহনযোগ্য হবে তবে ডিবিতে সামঞ্জস্যতা কমপক্ষে অর্জন করার চেষ্টা করা উচিত।
দুর্নীতিগ্রস্থ ডাটাবেসটি এখনও-অনলাইন এবং ক্লায়েন্টরা এতে কাজ করছে (সুতরাং এটি নতুন ডেটা পেতে থাকে) সুতরাং ল্যাব বেঞ্চে আমি যে কোনও প্রক্রিয়া করি তা পরবর্তী সময়ে উত্পাদন ডাটাবেসে পুনরায় প্রজননযোগ্য হওয়া উচিত (ডাউনটাইম এটির পক্ষে কঠিন হবে)।
এটি এসকিউএল সার্ভার 2014 এন্টারপ্রাইজ
পিএস: আমি কোনও ডিবিএ নই ... আমি একজন প্রোগ্রামার, কিন্তু ক্লায়েন্ট কিছু "বিশেষজ্ঞ" এসকিউএল বিপর্যয় পুনরুদ্ধার পরিষেবাদি চেষ্টা করেছে এবং তারা ছেড়ে দিয়েছে, তাই আমাকে এটি দেখার জন্য জিজ্ঞাসা করা হয়েছে এবং আমি পারছি কিনা যেকোনো কিছু করো.
আপডেট : অনেক পরীক্ষার পরে, পৃষ্ঠা পুনরুদ্ধার দ্বারা পৃষ্ঠাটি কোনও অগ্রগতি ছিল, তাই আমরা ধারণাটি খালি করেছি। আমরা একটি ম্যানুয়াল পুনরুদ্ধারের জন্য যাচ্ছি (দুর্নীতিগ্রস্থ টেবিলগুলি থেকে ম্যানুয়ালি নিখোঁজ রেকর্ডগুলি নির্বাচন করে এবং সর্বশেষ পরিচিত ভাল ব্যাকআপে সেগুলি সন্নিবেশ করানো), এর জন্য কিছু স্বয়ংক্রিয় সরঞ্জাম প্রস্তুত করছি (আবার শত শত শত টেবিল রয়েছে)।