SQL सर्वर डेटाबेस स्थिति को पुनर्स्थापित करने में फंस गया


79

मेरे पास एक Sharepoint सर्वर है। हमारे पास हमारे बैकअप टूल के साथ एक मुद्दा था और अब मेरे कुछ डेटाबेस राज्य को बहाल करने में फंस गए हैं!

डेटाबेस को दिखाने वाली छवि

क्या पुनर्स्थापना प्रक्रिया को रोकना संभव है? और यह भी, मैं यह कैसे सुनिश्चित कर सकता हूं कि डेटाबेस की अखंडता से समझौता नहीं किया गया है?

जवाबों:


129

यह पुनर्स्थापना स्क्रिप्ट को WITH NORECOVERYपैरामीटर को जोड़ने के कारण होता है , डेटाबेस को पुनर्स्थापना के बाद लेनदेन लॉग के लिए तैयार करने के लिए।

डेटाबेस अब नवीनतम लेन-देन लॉग फ़ाइल की प्रतीक्षा कर रहा है।

आप या तो यह कर सकते हैं:

  1. RESTORE LOG database_name FROM backup_device WITH RECOVERY;... या का उपयोग करके नवीनतम लेन-देन लॉग लागू करें
  2. डेटाबेस को फिर से पुनर्स्थापित करें, लेकिन इस बार ... WITH RECOVERY;... या का उपयोग कर
  3. निष्पादित करके मोड को पुनर्स्थापित करने के लिए डेटाबेस को बाध्य करें: RESTORE DATABASE YourDb WITH RECOVERY;

ऐसा करने से पहले, कृपया सुनिश्चित करें कि आप इन विकल्पों के निहितार्थ को समझते हैं। यदि आप सावधान नहीं हैं तो आप डेटा हानि का कारण बन सकते हैं।

विवरण के लिए इसे देखें:


जब वे काम नहीं करते हैं, तो dba.stackexchange.com/questions/11175/… - फिर से देखें, Do of WARNINGS OF DOOM अगर आपको नहीं पता कि आप क्या कर रहे हैं और डेटा हानि का पूरा जोखिम समझते हैं। लेकिन अगर आप एक गैर-उत्पादन सर्वर पर एक बाध्यता में हैं, तो आपको नए रीस्टोर को करने के लिए अच्छा बैकअप मिला है, और आप एसक्यूएल को फिर से सर्वर पर फिर से शुरू करने के लिए खर्च कर सकते हैं, यह काम करता है।
नटज

6
"डेटाबेस को रीस्टोर मोड से निष्पादित करके फोर्स करें: रिस्टोर डॅटवेअर योरबड विद रिकवरी"। सिर खुजाने और फिर से शुरू करने की सेवाओं के 20 मिनट, फिर एक लाइनर के साथ तय किया गया। धन्यवाद!
एफिलॉन

2
मैं उसी स्थिति में फंस गया था जब मेरा देव बॉक्स था। विकल्प 3 ने एक आकर्षण की तरह काम किया!
मोइज टंकीवाला

मैंने .bak से एक DB को नए DB में पुनर्स्थापित करने की कोशिश की , लेकिन डिस्क पर फ़ाइल नाम बदलना भूल गया। पुनर्स्थापना विफल रही, हालाँकि नहीं क्योंकि फ़ाइलें किसी मौजूदा डेटाबेस द्वारा उपयोग की गई थीं, लेकिन कुछ अन्य त्रुटि। इसने मौजूदा डीबी को गड़बड़ कर दिया (राज्य को बहाल करने में अटक गया)। # 3 इसे एक सेकंड में ऑनलाइन वापस करें और डेटा की जाँच करें सब कुछ ठीक लग रहा है। धन्यवाद!
CoDEmanX

44

इस समस्या को हल करने के लिए सरल T-SQL स्क्रिप्ट:

इस स्क्रिप्ट को नई क्वेरी विंडो पर लिखें और निष्पादित करें:

RESTORE DATABASE [DataBase Name] WITH RECOVERY;

RECATVERY के साथ बाकी डेटाबेस [डेटाबेस_नाम] .... मेरे लिए एकदम सही है। धन्यवाद!

10
उस के निहितार्थ को समझने के लिए बहुत सावधान रहें। यदि DB को एक लॉग रिस्टोर का इंतजार है, जिसके परिणामस्वरूप काफी डेटा हानि हो सकती है।
डेविड स्पिलेट

2
त्रुटि के कारण काम करना बंद हो जाता है, "डेटाबेस को पुनर्प्राप्त नहीं किया जा सकता क्योंकि लॉग को पुनर्स्थापित नहीं किया गया था।"
इयान बॉयड

0

मेरे पास बस यही स्थिति थी, और इलाज काफी आश्चर्यजनक था:

ALTER DATABASE DBName SET ONLINE;

जाहिरा तौर पर NetBackup पुनर्स्थापना ने इसे एक विचित्र अवस्था में छोड़ दिया। कोई अन्य समाधान काम नहीं किया (हालाँकि मैंने अभी तक SQL सर्वर सेवा को पुनः आरंभ करने की कोशिश नहीं की थी)

मैं डेटाबेस के साथ सावधान रहूंगा, हालांकि, सैद्धांतिक रूप से एक बार एक पुनर्स्थापना शुरू होने के बाद, फिर विफल हो जाता है, तो आपके पास डेटा दूषित हो सकता है। मैं वैसे भी डेटाबेस को फिर से बहाल करने जा रहा हूं, इसलिए यह मेरे लिए कोई मायने नहीं रखता।


यह इस प्रश्न का गलत उत्तर है, यदि आप एक डेटाबेस सेट करने का प्रयास करते हैं जो 'रिस्टोरिंग' ऑनलाइन में है तो आपको यह त्रुटि मिलेगी "एक डेटाबेस को पुनर्स्थापित करने की स्थिति में नहीं है, जबकि एक डेटाबेस को अनुमति नहीं है।"
जेम्स जेनकिंस

शायद आप StackOverflow पर किस तरह से अपरिचित हैं, हम कभी-कभी उन सवालों के जवाब देते हैं जो पोस्ट किए गए से थोड़े अलग हैं। यह मूल्य प्रदान करता है क्योंकि लोग अक्सर ऑनलाइन खोज के बाद उनके समान प्रश्नों पर आते हैं। ALTER DATABASEअनुमति नहीं दिए जाने के बारे में आपके तथ्यात्मक दावे के बारे में , मैं आपको विश्वास दिलाता हूं कि मेरे मामले में, डेटाबेस वास्तव में राज्य को बहाल करने के रूप में दिखा रहा था, और SET ONLINEवास्तव में काम कर रहा था । इसलिए महसूस करें कि आप मुझे गलत या झूठ बोल रहे हैं। क्या विकल्प उपलब्ध होने पर आपको वास्तव में ऐसा करने की आवश्यकता है?
एरिक

@JamesJenkins और वह विकल्प क्या है? वैकल्पिक परिकल्पना है कि एक डेटाबेस राज्य को बहाल करने में दिखा सकता है लेकिन वास्तव में बहाल नहीं किया जा सकता है। या यह बहाल करने के अंतिम चरण में हो सकता है, पुनर्स्थापना वास्तव में पूरी हो गई है ताकि यह वास्तव में ONLINEराज्य में स्थापित हो सके । इतनी लंबी कहानी संक्षेप में, मुझे लगता है कि आपकी टिप्पणी और डाउनवोट इस साइट के लिए लाइन से बाहर हैं और आपकी जानकारी तथ्यात्मक रूप से गलत है क्योंकि यह मेरे द्वारा प्रस्तुत किए गए डेटा के साथ ठीक से योग्य नहीं है।
एरिक

0

जैसा कि हम जानते हैं, डिफ़ॉल्ट डेटाबेस पुनर्स्थापना विकल्प रिकवरी के साथ है जो डेटाबेस को पूरा करने के बाद डेटाबेस उपलब्ध और ऑनलाइन उपयोग के लिए सुनिश्चित करता है।

उदाहरण:

RESTORE DATABASE YourDB FROM DISK= 'C:\\Data\\YourDBBackup.bak'
WITH RECOVERY
GO

आइए, NO Recovery के साथ Restore के बारे में महत्वपूर्ण बिंदुओं को देखें

  • डेटाबेस प्रयोग करने योग्य नहीं है
  • पुनर्स्थापना मोड में रहता है
  • अगला पुनर्स्थापना अनुक्रम किया जा सकता है
  • बिना किसी लेनदेन के रोलबैक नहीं करता है

NoRecovery से रिस्टोर करें

यह विकल्प विशेष रूप से तब उपयोग किया जाता है जब कई बैकअप को पुनर्स्थापित किया जाना है। इसका मतलब है, जब आप नॉन-कॉम्प्रेशन विकल्प के साथ रीस्टोर कमांड को निष्पादित करते हैं, तो इसका मतलब है कि डेटाबेस यूजर्स को तब तक जारी नहीं किया जाता है, जब तक कि आखिरी बैकअप सीक्वेंस बहाल न हो जाए। अंतिम बैकअप के साथ, रिकवरी विकल्प का उपयोग किया जाता है और डेटाबेस ऑनलाइन हो जाता है।

उदाहरण:

RESTORE DATABASE YourDB FROM DISK - 'C:\\Data\\Backup_part1.bak' 
WITH NORECOVERY
GO

और तब:

RESTORE LOG YourDB FROM DISK = 'C:\\Data\\BackupLog-part2.trn'
WITH RECOVERY
GO

1
आपके उत्तर में एक टाइपो हो सकता है। पुनर्प्राप्ति के साथ पुनर्स्थापना के बारे में चिह्नित अनुभाग ... उन सभी विकल्पों को सूचीबद्ध करता है जो RESTORE ...WITH NORECOVERYविकल्प पर लागू होते हैं । क्या आप दोबारा जांच कर सकते हैं?
hot2use
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.