লেনদেন লগ পুনর্নির্মাণ


20

আমাদের কাছে একটি খুব বড় ডাটাবেস (~ 6TB) রয়েছে, যার লেনদেনের লগ ফাইলটি মুছে ফেলা হয়েছিল (এসকিউএল সার্ভারটি বন্ধ থাকা অবস্থায় We আমরা চেষ্টা করেছি:

  1. ডেটাবেস ডিটাচিং এবং রিটাচিং; এবং
  2. লেনদেনের লগ ফাইলটি মুছে ফেলা হচ্ছে

... তবে এখনও পর্যন্ত কিছুই কাজ করেনি।

আমরা বর্তমানে চলছে:

ALTER DATABASE <dbname> REBUILD 
LOG ON (NAME=<dbname>,FILENAME='<logfilepath>')

... তবে ডাটাবেসের আকার দিলে সম্ভবত এটি কয়েক দিন সময় নিতে পারে।

প্রশ্নাবলি

  • উপরের কমান্ড এবং নীচের একটি পার্থক্য আছে?

    DBCC CHECKDB ('<dbname>', REPAIR_ALLOW_DATA_LOSS)
  • আমরা কি REPAIR_ALLOW_DATA_LOSSপরিবর্তে মৃত্যুদণ্ড কার্যকর করা উচিত?

এটি লক্ষণীয় যে ডেটাটি অন্যান্য উত্স থেকে উত্পন্ন হয়েছে যাতে ডাটাবেসটি পুনর্নির্মাণ করা যায়, তবে আমরা সন্দেহ করি যে সমস্ত ডেটা পুনরায় প্রবেশের চেয়ে ডাটাবেসটি মেরামত করা আরও দ্রুত হবে।


হালনাগাদ

স্কোর রাখার জন্য: ALTER DATABASE/REBUILD LOGকমান্ডটি প্রায় 36 ঘন্টা পরে সম্পন্ন হয়েছে এবং রিপোর্ট করেছে:

সতর্কতা: ডাটাবেস 'dbname' জন্য লগ পুনর্নির্মাণ করা হয়েছে। লেনদেনের ধারাবাহিকতা হারিয়ে গেছে। রেস্টোর চেইনটি নষ্ট হয়ে গেছে, এবং সার্ভারের আর আগের লগ ফাইলগুলির প্রসঙ্গ নেই, সুতরাং সেগুলি কী ছিল তা আপনার জানতে হবে।
শারীরিক ধারাবাহিকতা যাচাই করতে আপনার ডিবিসিসি CHECKDB চালানো উচিত। ডাটাবেসটি ডিবো-কেবল মোডে রাখা হয়েছে। আপনি যখন ডেটাবেসকে ব্যবহারের জন্য উপলব্ধ করতে প্রস্তুত হবেন তখন আপনাকে ডাটাবেস বিকল্পগুলি পুনরায় সেট করতে হবে এবং কোনও অতিরিক্ত লগ ফাইল মুছতে হবে।

এরপরে আমরা একটি DBCC CHECKDBচালিয়েছি (প্রায় 13 ঘন্টা) যা সফল হয়েছিল। আসুন আমরা কেবল এটিই বলি যে আমরা সকলেই ডেটাবেস ব্যাকআপের গুরুত্ব (এবং প্রোজেক্ট ম্যানেজারগুলিকে সার্ভারে অ্যাক্সেস দেওয়ার ...) শিখেছি।

উত্তর:


20

সন্দেহজনক ডাটাবেস কখনও আলাদা করবেন না। যাইহোক, ডাটাবেসটিকে আলাদা করার পরে আপনি কীভাবে সংযুক্ত করলেন? আপনি বিকল্প CREATE DATABASEদিয়ে ব্যবহার করেছেন FOR ATTACH_REBUILD_LOG?

এই আদেশগুলি কৌশলটি করা উচিত ছিল:

ALTER DATABASE recovery_test_2 SET EMERGENCY;   
ALTER DATABASE recovery_test_2 SET SINGLE_USER;  

DBCC CHECKDB (recovery_test_2, REPAIR_ALLOW_DATA_LOSS) 
WITH NO_INFOMSGS, ALL_ERRORMSGS;

আমি এই পরিস্থিতির জন্য একটি পোস্ট লিখেছি:

এসকিউএল 2005/2008 ডাটাবেস পুনরুদ্ধার পদ্ধতি - লগ ফাইল মোছা হয়েছে (অংশ 3)

আপনি এর মধ্যে পার্থক্য সম্পর্কে জিজ্ঞাসা করেছেন:

  • DBCC CHECKDB ('<dbname>', REPAIR_ALLOW_DATA_LOSS) এবং
  • ALTER DATABASE <dbname> REBUILD LOG ON (NAME=<dbname>,FILENAME='<logfilepath>')

জিনিসটি হ'ল লগ ফাইলটি পুনর্নির্মাণের জন্য আপনি উভয়ই চালনা করতে পারেন, তবে আপনার সাথে CHECKDBলগটি পুনর্নির্মাণ এবং অখণ্ডতার ত্রুটির জন্য ডাটাবেসও পরীক্ষা করতে পারেন।

এছাড়াও লগ ফাইলটি হারিয়ে যাওয়ার সময় সক্রিয় লেনদেন (ডিস্কে লিখিত না) থাকলে দ্বিতীয় (পরিবর্তিত ডাটাবেস) কাজ করবে না। প্রারম্ভ বা সংযুক্তিতে, এসকিউএল সার্ভার লগ ফাইলটি যা নেই তা থেকে পুনরুদ্ধার (রোলব্যাক এবং রোলফোর্ড) করতে চাইবে। এটি তখন ঘটে যখন কোনও ডিস্ক ক্র্যাশ হয় বা সার্ভারের একটি অপ্রত্যাশিত শাটডাউন ঘটে এবং ডাটাবেস পরিষ্কারভাবে বন্ধ হয় না। আমি অনুমান করি যে এটি আপনার ক্ষেত্রে ছিল না এবং সবই আপনার জন্য ভাল সাজানো।

  1. DBCC CHECKDB (DBNAME, REPAIR_ALLOW_DATA_LOSS)জরুরী স্থিতিতে একটি ডাটাবেস চালানো অসঙ্গতি ত্রুটির জন্য ডাটাবেস চেক করে, কোনও অসঙ্গতি থেকে পুনরুদ্ধার করতে লগ ফাইলটি ব্যবহার করার চেষ্টা করে। যদি এটি অনুপস্থিত থাকে তবে লেনদেনের লগটি পুনর্নির্মাণ হয়।

  2. ALTER DATABASE REBUILD LOG ON...একটি অননুমোদিত পদ্ধতি এবং DBCC CHECKDBকোনও ত্রুটি সমাধানের জন্য পরবর্তী প্রয়োজন ।


12

হ্যাঁ, এগুলি দুটি পৃথক বক্তব্য, প্রত্যেকটি খুব আলাদা জিনিস করে।

ডেটাবেসের রাষ্ট্র উপর নির্ভর করে কখন ফাইলটি মুছে ফেলা হয়েছে, আপনি পারে আপ এবং ডাটাবেসের সংযোজনের এবং ব্যবহার করে লগ পুনঃ নির্মাণের দ্বারা চলমান পেতে সক্ষম হবেন:

EXEC sp_attach_single_file_db 'dbname here', 'file path and name here'

পণ্যের ডকুমেন্টেশনে sp_attach_single_file_db (লেনদেন-এসকিউএল) দেখুন ।

পল এস রান্ডাল এর এই ব্লগ পোস্টটি দেখুন :

EMERGENCY- মোড মেরামত: খুব, খুব শেষ অবলম্বন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.