मुझे हटाए गए कुछ रिकॉर्ड कैसे वापस मिलेंगे?


49

मैंने गलती से दूरस्थ SQL Server 2008 तालिका से लगभग 2,000,000 रिकॉर्ड हटा दिए हैं। सर्वर मुझे बैकअप फ़ाइलों को सर्वर साइड पर एक्सेस देने के लिए नहीं दे रहा है।

क्या इन रिकॉर्ड्स को वापस पाने का कोई तरीका है?


18
आखिरी बार आपने अपने बैकअप का परीक्षण कब किया था?
जो

20
जब आपने पिछली बार अपने बैकअप का परीक्षण किया था?
दातागोड़

जवाबों:


116

क्या आपका डेटाबेस पूर्ण पुनर्प्राप्ति मोड में है?

  • यदि हाँ, तो क्या आप लेन-देन लॉग बैकअप कर रहे हैं?

    • यदि हाँ, तो क्या आपके पास क्वेस्ट लाइटस्पीड, रेड गेट एसक्यूएल बैकअप, या इडेरा एसक्यूसफे जैसी बैकअप उपयोगिता है?
      • यदि हाँ, तो वे उपयोगिताओं बैकअप फ़ाइलों (पूर्ण और लेन-देन लॉग सहित) से वस्तुओं को हटा सकते हैं - लेकिन यह समझाते हुए कि उनका उपयोग कैसे किया जाए जो मैं यहां कर सकता हूं। निर्देशों के लिए विक्रेता से संपर्क करें।
      • यदि नहीं, तो एक अलग नाम के साथ डेटाबेस के रूप में पूर्ण बैकअप और लेनदेन लॉग को पुनर्स्थापित करें। (मौजूदा डेटाबेस को मत लिखना जब आदेशों को बहाल करना बंद करो। डिलीट होने से पहले आपको रोकना होगा।
    • यदि नहीं, तो क्वेस्ट लाइटस्पीड या एपेक्स एसक्यूएल लॉग जैसे लॉग रीडर उपयोगिता की एक प्रति ले लो। ये उपयोगिताओं डेटाबेस सर्वर से कनेक्ट कर सकते हैं, लॉग फ़ाइल की जांच कर सकते हैं और लेनदेन को पूर्ववत करने में आपकी सहायता कर सकते हैं। मुझे यकीन नहीं है कि डेमो संस्करण काम करेगा, लेकिन भुगतान वाले निश्चित रूप से करेंगे।
  • यदि नहीं (पूर्ण पुनर्प्राप्ति मोड में नहीं), अंतिम पूर्ण बैकअप को एक अलग नाम के साथ डेटाबेस के रूप में पुनर्स्थापित करें। (आपके द्वारा पहले से प्राप्त डेटाबेस को अधिलेखित न करें।) वहां से, आप बैकअप के समय जो भी रिकॉर्ड ऑनलाइन थे, उसे पुनर्स्थापित करने में सक्षम होंगे, लेकिन आप सभी परिवर्तनों को खो देंगे।


4
महान जवाब, मैं यह जोड़ूंगा कि यदि आपके पास ऑडिटिंग है या ट्रैकिंग को बदलना है तो आमतौर पर उन टेबल से डेटा वापस प्राप्त करना सबसे आसान है जब केवल एक टेबल प्रभावित हुई हो। और हां, यदि आपका उत्तर कुछ या सभी से ऊपर नहीं था, तो आप जितना हो सके रिकॉर्ड्स को पुनर्स्थापित करें, फिर अपनी बैकअप प्रक्रिया को ठीक करें और संभवत: जिनके पास उत्पादन डेटा तक पहुंच हो।
HLGEM

यदि आप सरल मोड में हैं, तो पंक्तियाँ अभी भी कुछ पृष्ठों पर भौतिक रूप से मौजूद हो सकती हैं। हो सकता है उनमें से कुछ (बहुत अधिक समय और / या पैसे की लागत पर) वसूल किए जा सकते हैं।
usr

FYI करें। ApexSQL पुनर्प्राप्ति समय सीमा के अलावा, मूल्यांकन संस्करण पुनर्प्राप्ति के लिए उपलब्ध कुल पंक्तियों की प्रत्येक 10 पंक्तियों में से केवल 1 को पुनर्प्राप्त करता है ( apexsql.com/faqs/faqs_recover.aspx )
समीर

30

SQL सर्वर प्रत्येक हटाए गए रिकॉर्ड के लिए लॉग रखता है। आप fn_dblogSQL सर्वर फ़ंक्शन के माध्यम से इन लॉग को क्वेरी कर सकते हैं ।

SELECT [RowLog Contents 0] 
FROM   sys.fn_dblog(NULL, NULL) 
WHERE  
       AllocUnitName = 'dbo.TableName'        
   AND Context IN ( 'LCX_MARK_AS_GHOST', 'LCX_HEAP' )        
   AND Operation in ( 'LOP_DELETE_ROWS' )   
;

लेकिन यह लॉग हेक्स प्रारूप में है और आपको इस हेक्स प्रारूप को अपने वास्तविक डेटा में बदलने की आवश्यकता है।

नीचे दिया गया लेख आपको ऊपर बताए गए तरीके से हटाए गए रिकॉर्ड को पुनर्प्राप्त करने में मदद करेगा:

http://raresql.com/2011/10/22/how-to-recover-deleted-data-from-sql-sever/


3
यह बहुत अच्छा है। यह दृष्टिकोण किन परिस्थितियों में काम करता है (या काम नहीं करता है)?
निक चामास

3
@NickChammas - यह केवल वही रिकवर कर सकता है जो सरल रिकवरी मॉडल के लिए सक्रिय लॉग में है इसलिए चेकपॉइंट नहीं हुआ होगा। वर्तमान में यह लग रहा है कि यह स्नैपशॉट अलगाव के साथ डेटाबेस में सही ढंग से काम नहीं करता है लेकिन यह एक आसान फिक्स होना चाहिए। @user1059637- आपके कोड में कार्यक्षमता जोड़ने वाले लोगों के लिए आपका दृष्टिकोण क्या है?
मार्टिन स्मिथ

@MartinSmith, अब यह स्नैपशॉट अलगाव के साथ ही सही काम कर रहा है।
user1059637

22

दुर्भाग्य से, हम बहुत अधिक जानकारी के बिना आपकी मदद करने में सक्षम नहीं होंगे। लेकिन आपके प्रश्न से, मैं देख रहा हूं कि आपने जो डिलीट किया है, वह आपके डेटाबेस से 2 मिलियन रिकॉर्ड प्रतीत होता है। सबसे अधिक संभावना है कि आप इस जानकारी को पुनर्प्राप्त नहीं कर सकते, जब तक कि आपके डेटाबेस पर पूर्ण लॉगिंग न हो और आप कुछ बहुत विशिष्ट उपकरण खरीद लें।

यदि आप अधिक विस्तार से वर्णन कर सकते हैं कि यह वही है जो आप सोचते हैं कि आपने किया है, और आपको लगता है कि आप रिकॉर्ड वापस नहीं पा सकते हैं, और अपने डेटाबेस के संगठन का वर्णन कर सकते हैं, तो हम आपकी थोड़ी और मदद कर सकते हैं।

कुछ सामान्य सलाह: यदि आपको लगता है कि आपने 2 मिलियन रिकॉर्ड डिलीट कर दिए हैं, तो आप शायद अभी थोड़ा निराश हैं। इसलिए आपको पांच मिनट का ब्रेक लेना चाहिए, शांत होना चाहिए और समस्या को फिर से देखना चाहिए। इसके अलावा, आपको अपने बॉस को तुरंत बता देना चाहिए अगर यह उचित है (किसी को उन्हें बताने के लिए 2 बजे तक नहीं जगाएं) और यह कि आप एक समाधान पर काम कर रहे हैं। बेहतर यह है कि जो कुछ हुआ है, उसे ठीक करने और संभावित रूप से मामलों को बदतर बनाने और विवरण छिपाने की कोशिश करने से बेहतर है। यह जानकर कि आपका बॉस किसी तरह से मदद कर सकता है, आपको समस्या को ठीक करने में मदद करता है। जैसा मैंने कहा, बस कुछ सामान्य सलाह।


10
5 मिनट के ब्रेक के साथ अच्छा विचार है। हमेशा काम करता है। ध्यान केंद्रित करने में मदद करता है। :-) वहाँ किया गया था कि।
बजे जॉन उर्फ ​​हॉट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.