सबसे पहले, SQL एररोलॉग को यह देखने के लिए जांचें कि क्या यह वास्तव में लॉग के लिए अधिकतम आकार मारा है। यदि ऐसा किया जाता है, तो क्वेरी को पूरा करने की कोई उम्मीद नहीं है, यह संभवतः पहले से ही रोलबैक स्थिति में है।
यहां तक कि अगर यह है, तो मैं हमेशा स्पिड को मैन्युअल रूप से मारना पसंद करता हूं (उपयोग करें sp_who2
या sp_WhoIsActive
स्पिड को खोजने के लिए, फिर एक kill 59
या जो भी करें)। जब तक आप एक स्पष्ट KILL नहीं करते हैं, तब तक आप रोलबैक स्थिति की जांच नहीं कर सकते हैं ।
चूँकि यह डिलीट है, और अपडेट या इंसर्ट नहीं, तो आप बहुत भाग्यशाली हो सकते हैं और पाते हैं कि यह तुरंत वापस आ गया है। यदि नहीं, तो इस बिंदु पर पहुंचने के लिए इसे वापस करने में लंबा (या लंबा) लग सकता है।
रोलबैक स्थिति देखने के लिए, का उपयोग करें
kill 59 with statusonly
दुर्भाग्य से, मैंने पाया है कि यह अक्सर कुछ भी उपयोगी नहीं दिखाता है, बस "0% पूर्ण"। उस स्थिति में, आपको sp_who2
IO और CPU का उपयोग करना होगा और देखना होगा कि क्या यह अभी भी कुछ कर रहा है।
रिबूट के संबंध में, यह एक गंभीर जोखिम है। यदि स्पिड सक्रिय रूप से वापस चल रहा है (सीपीयू और आईओ बदल रहे हैं), तो SQL को पुनरारंभ करना केवल डेटाबेस को पूरी तरह से ऑफ़लाइन ले जाएगा जब तक कि रोलबैक पूरी तरह से समाप्त नहीं हो जाता है (घंटे और घंटे)। लेकिन , अगर सीपीयू और आईओ नहीं चल रहे हैं , तो यह वास्तव में इसे तुरंत साफ कर सकता है। किसी भी तरह से, यह एक जोखिम है।
एक अंतिम विकल्प, अगर चीजें विशेष रूप से गंभीर हैं: यदि आपके पास डिलीट शुरू होने से ठीक पहले से बैकअप है (और डीबी के लिए अन्य अपडेट नहीं हैं) , तो पुनर्प्राप्त करने का सबसे तेज़ तरीका बस डीबी को छोड़ना हो सकता है, पुनरारंभ करें SQL, और बैकअप से पुनर्स्थापित करें।
यदि आप DB को ड्रॉप नहीं कर सकते (या यदि आपने पहले ही इंस्टेंस को फिर से शुरू कर दिया है और sql errorlog 24-घंटे की रिकवरी टाइम की भविष्यवाणी कर रहा है), तो SQL सेवाओं को बंद कर दें, डिस्क से MDF और LDF फ़ाइलों को हटा दें, SQL शुरू करें, ड्रॉप करें (भूत) डेटाबेस, और बैकअप से पुनर्स्थापित करें।
जाहिर है कि आप केवल यह प्रयास करेंगे कि यदि यह एक बैक-एंड प्रोसेसिंग डेटाबेस था, जो उपयोगकर्ताओं के साथ बातचीत नहीं करता था।