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


564

मैंने एक डेटाबेस का समर्थन किया:

BACKUP DATABASE MyDatabase
TO DISK = 'MyDatabase.bak'
WITH INIT --overwrite existing

और फिर इसे बहाल करने की कोशिश की:

RESTORE DATABASE MyDatabase
   FROM DISK = 'MyDatabase.bak'
   WITH REPLACE --force restore over specified database

और अब डेटाबेस पुनर्स्थापित स्थिति में फंस गया है।

कुछ लोगों ने सिद्ध किया है कि यह इसलिए है क्योंकि बैकअप में कोई लॉग फ़ाइल नहीं थी, और इसका उपयोग करके आगे बढ़ने की आवश्यकता थी:

RESTORE DATABASE MyDatabase
WITH RECOVERY 

इसके अलावा, ज़ाहिर है, विफल रहता है:

Msg 4333, Level 16, State 1, Line 1
The database cannot be recovered because the log was not restored.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.

और वास्तव में आप एक भयावह स्थिति में क्या चाहते हैं एक पुनर्स्थापना है जो काम नहीं करेगा।


बैकअप में डेटा और लॉग फ़ाइल दोनों शामिल हैं:

RESTORE FILELISTONLY 
FROM DISK = 'MyDatabase.bak'

Logical Name    PhysicalName
=============   ===============
MyDatabase    C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MyDatabase.mdf
MyDatabase_log  C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MyDatabase_log.LDF

3
मेरे पास एक ही मुद्दा था और सभी समाधान विफल रहे। दिलचस्प है, मैंने सीधे एसक्यूएल सर्वर पर लॉग इन किया और DROP DATABASE dbएसएसएमएस के माध्यम से कमांड जारी किया और यह काम किया (पहले मैं कमांड जारी करने के लिए किसी अन्य मशीन से एसएसएमएस का उपयोग कर रहा था)। मैं अनुमान लगा रहा हूं कि अन्य समाधानों ने भी काम किया होगा।
सलमान A

जवाबों:


437

आपको पुनर्स्थापना प्रक्रिया के भाग के रूप में अपने डेटाबेस को ऑनलाइन लाने के लिए, WITH RECOVERYअपने डेटाबेस RESTOREकमांड के साथ विकल्प का उपयोग करने की आवश्यकता है ।

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

आपकी आज्ञा इस तरह दिखनी चाहिए,

RESTORE DATABASE MyDatabase
   FROM DISK = 'MyDatabase.bak'
   WITH REPLACE,RECOVERY

SQL सर्वर प्रबंधन स्टूडियो में पुनर्स्थापना डेटाबेस विज़ार्ड का उपयोग करके आपके पास अधिक sucess हो सकता है। इस तरह आप विशिष्ट फ़ाइल स्थानों, अधिलेखित विकल्प और रिकवरी विकल्प के साथ चयन कर सकते हैं।


3
मुझे कभी भी रिकवरी स्टेटमेंट का उपयोग नहीं करना पड़ा है जब वह कर रहा है। REPLACE के साथ पर्याप्त होना चाहिए।
सैम

8
हां, मैं NORECOVERY का उपयोग कर रहा था लेकिन पुनर्स्थापना प्रक्रिया लटकी हुई है। RECOVERY, REPLACE के साथ प्रयोग करने से यह प्रक्रिया और नहीं लटकती
जूनियर Mayhé

इससे मेरी समस्या हल हो गई। हम एक SAN एक पुनर्स्थापना के बीच में विफलता थी और यह एक त्वरित और साफ समाधान था।
रजिस्टर्ड यूजर

मुझे SQL Server 2005 डेटाबेस के साथ आज भी ऐसी ही समस्या थी। मेरे मामले में, मुझे इस मुद्दे को हल करने के लिए ', RESTART' को क्लॉज़ के साथ जोड़ना पड़ा। यह मुझे एक त्रुटि संदेश दे रहा था जिसमें कहा गया था कि पिछला ऑपरेशन सफल नहीं था।
एक्सपीरिटो

3
@FistOfFury यदि एक ही डेटाबेस पर एक पिछला पुनर्स्थापना संचालन एक निलंबित / नींद की स्थिति में है, तो हाँ। प्रक्रिया बहाल करने में बस रोकना / रद्द करना एक ही प्रभाव होना चाहिए।
जॉन सैंसोम

692

मैं इस स्थिति में एक डेटाबेस SQL ​​सर्वर 2005 मानक संस्करण उदाहरण के लिए Symantec बैकअप Exec 11d का उपयोग कर पुनर्स्थापित कर रहा था। पुनर्स्थापना की नौकरी पूरी होने के बाद डेटाबेस "रिस्टोरिंग" स्थिति में रहा। मेरे पास डिस्क स्थान की कोई समस्या नहीं थी - डेटाबेस केवल "रिस्टोरिंग" स्थिति से बाहर नहीं आया था।

मैंने SQL सर्वर आवृत्ति के विरुद्ध निम्न क्वेरी को चलाया और पाया कि डेटाबेस तुरंत प्रयोग करने योग्य हो गया:

RESTORE DATABASE <database name> WITH RECOVERY

4
हम 2 घंटे के लिए बहाल करने में अटक गए थे। हमने मास्टर के खिलाफ एक अलग मशीन से इस कमांड को चलाया और इसने हमें ठीक किया। धन्यवाद!
पीट

11
एक गोत्र के साथ +1। जब मैंने इसे चलाया, तो मुझे यह कहते हुए एक त्रुटि संदेश मिला कि डेटाबेस पहले ही पूरी तरह से पुनर्प्राप्त हो चुका है। लेकिन यह अभी भी "इन रिकवरी" राज्य के रूप में दिखाया गया है। इसलिए मैंने इसे मैनेजमेंट स्टूडियो में राइट-क्लिक किया, रिफ्रेश मारा और यह वापस सामान्य हो गया।
डारियो_रामोस

2
मैंने Mng Studio विज़ार्ड का उपयोग करके पुनर्स्थापित किया, एक नया डेटाबेस नाम दर्ज किया लेकिन गलती से फ़ाइलनाम को मौजूदा डेटाबेस के समान छोड़ दिया। मुझे त्रुटि "रिस्टोर फेल लेकिन लॉग टेल सक्सेसफुल" मिली और उन फाइलों से जुड़ा डेटाबेस एक रिस्टोरिंग स्टेट में अटक गया। यह आदेश डेटाबेस को उसकी पूर्व स्थिति में पुनर्स्थापित करता है।
क्रिस

3
यह काम किया। मैं एक साइड डेटाबेस के लिए एक बैकअप बहाल करने की कोशिश कर रहा था, लेकिन मेरा मुख्य डेटाबेस किसी कारण से एक बहाल स्थिति में चला गया। यह वास्तव में मेरे डीबी को पुनः प्राप्त करता है। बहुत बहुत धन्यवाद!
अरविंद

2
कुछ SSMS रीस्टोर विज़ार्ड डिफॉल्ट्स को पुनर्स्थापित करने में स्रोत DB को ऐसे छोड़ देंगे कि आप विभिन्न बैकअप या लॉग को उपयोगकर्ताओं के बिना किसी डर के जारी रख सकते हैं, और यह कमांड आपके द्वारा किए जाने के बाद DB को सामान्य में वापस करने का उचित तरीका है।
टिम लेहनर

102

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

  1. सेवा बंद करें (MSSQLSERVER);
  2. डेटाबेस या लॉग फ़ाइलों का नाम बदलें या हटाएं (C: \ Program Files \ Microsoft SQL Server \ MSSQL.1 \ MSSQL \ Data ...) या जहाँ भी आपके पास फ़ाइलें हैं;
  3. सेवा शुरू करें (MSSQLSERVER);
  4. डेटाबेस को समस्या से हटाएं;
  5. फिर से डेटाबेस पुनर्स्थापित करें।

टीपू, इसके लिए धन्यवाद। मुझे मूल पोस्टर के लिए एक समान समस्या थी, लेकिन यह सर्वर के कारण डिस्क स्थान से बाहर चल रहा था जबकि बहाल करना और इसलिए एक स्थायी बहाल राज्य का कारण था।
पाऊक

8
सिर्फ डेटाबेस को क्यों नहीं गिराया? इस तरह आपको सेवा बंद नहीं करनी है।
यूरिक

8
@ मेरे लिए, SQL सर्वर ने कहा कि यह एक पुनर्स्थापना के बीच में एक डेटाबेस को नहीं गिरा सकता है, भले ही यह वास्तव में बहाल नहीं कर रहा था ....
Erik Philips

@ ErikPhilips उस स्थिति में मुझे लगता है कि सेवा को रोकने के लिए एक वापस आ गया है। मुझे आश्चर्य है कि अगर हर बार या केवल अटक-पुनर्स्थापना समस्या के कुछ मामलों में होता है।
एरिक

5
मेरे मामले में, drop database <dbname>क्वेरी विंडो में SQL कमांड के साथ "रिस्टोरिंग ..." राज्य में लटका हुआ डेटाबेस को ड्रॉप करना पर्याप्त था । फिर मैंने डेटाबेस पर राइट-क्लिक किया और रिफ्रेश को चुना जिसने प्रबंधन स्टूडियो में प्रवेश को हटा दिया। बाद में मैंने एक नया पुनर्स्थापना किया जो ठीक काम करता है ( ध्यान दें कि इसे ऑफ़लाइन लाने से काम नहीं हुआ, SQL सेवा का पुनरारंभ काम नहीं किया, एक सर्वर रिबूट ने भी काम नहीं किया)।
मैट

84

मुझे लॉग शिपिंग माध्यमिक सर्वर को रोकने के साथ एक समान घटना थी। कमांड को लॉग शिपिंग से सर्वर को हटाने के लिए कमांड के बाद और प्राथमिक सर्वर से लॉग शिपिंग को रोक दिया, सेकेंडरी सर्वर पर डेटाबेस कमांड के बाद स्थिति को बहाल करने में फंस गया।

RESTORE DATABASE <database name> WITH RECOVERY

डेटाबेस संदेश:

अधिक जानकारी कृपया 0 पृष्ठों को 18.530 सेकंड (0.000 एमबी / सेकंड) में सफलतापूर्वक संसाधित करें।

डेटाबेस उन 18 सेकंड के बाद फिर से प्रयोग करने योग्य था।


6
विशेष रूप से तब उपयोगी होता है जब आपने डेटाबेस को पहले ही बहाल कर लिया हो लेकिन RECOVERY विकल्प को भूल गए हों ...
JBickford

2
इस डेटाबेस के बैकअप को एक अलग DB नाम पर पुनर्स्थापित करने के बाद "रिस्टोरिंग" स्टेट को छोड़ने के लिए मुझे यह प्राप्त करने की आवश्यकता थी। बहुत बहुत धन्यवाद।
शॉन

81

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

RESTORE DATABASE "[NAME_OF_DATABASE_STUCK_IN_RESTORING_STATE]"

जो इस मुद्दे को ठीक कर दिया। मुझे डेटाबेस नाम के कारण पहली बार में परेशानी हो रही थी जिसमें विशेष वर्ण थे। मैंने इसे दोहरे उद्धरण चिह्नों के साथ जोड़कर हल किया - एकल उद्धरण "गलत सिंटैक्स पास ..." त्रुटि देने से काम नहीं करेगा।

यह न्यूनतम समाधान था जिसे मैंने इस मुद्दे को हल करने का प्रयास किया (राज्य को पुनर्स्थापित करने में अटक डेटाबेस) और मुझे आशा है कि इसे अधिक मामलों में लागू किया जा सकता है।


2
पूरी तरह से काम किया - इसे नीचे और ऊपर आंसू करने की आवश्यकता के बिना। 80 + Gb के 3 Dbs में कुछ समय लगता है! धन्यवाद!
क्रिस्टर

1
मैंने लगभग इसे प्रोडक्शन के माहौल पर किया है। मैंने इसे पहले स्थानीय पर आज़माया, इसी स्थिति में समाप्त हुआ और आपकी टिप्पणी मिली। सबक सीखा: स्क्रिप्ट का उपयोग करें और महत्वपूर्ण परिस्थितियों में एसएसएमएस पर भरोसा न करें।
Mariusz

1
मुझे यह मुद्दा तब मिला जब एक डेटाबेस के प्रति-बैक-फाइल को केवल एक नए डेटाबेस में पुनर्स्थापित करना। मूल डेटाबेस में त्रुटि दिखाई दी। इस समाधान ने काम किया और मुझे जो प्रतिक्रिया मिली वह थी "RESTORE DATABASE ने 0 पृष्ठों को 0.263 सेकंड (0.000 एमबी / सेकंड) में सफलतापूर्वक संसाधित किया।" , इसलिए ऐसा लगता है कि SQL सर्वर डेटाबेस की स्थिति के बारे में उलझन में था।
आर। श्रेयर्स

1
मेरे लिए काम किया, लेकिन केवल जब मैंने दोहरे-उद्धरणों को हटा दिया - मेरे पास पैरामीटर के रूप में [MY_DB_NAME] था।
StackOverflowUser

34

ठीक है, मुझे भी ऐसी ही समस्या है और ठीक वैसा ही जैसा कि पाऊक के मामले में था, यह सर्वर द्वारा डिस्क स्थान से बाहर निकलते समय बहाल करने के कारण हुआ था और इसलिए एक स्थायी बहाल राज्य का कारण बना। SQL सर्वर सेवाओं को रोकने के बिना इस स्थिति को कैसे समाप्त करें?

मुझे एक हल मिल गया है :)

Drop database *dbname*

29

RECOVERY विकल्प के साथ डिफ़ॉल्ट रूप से उपयोग किया जाता है जब RESTORE DATABASE / RESTORE LOG कमांड निष्पादित होता है। यदि आप "पुनर्स्थापना" प्रक्रिया में फंस गए हैं तो आप निष्पादन के लिए ऑनलाइन डेटाबेस में एक डेटाबेस वापस ला सकते हैं:

RESTORE DATABASE YourDB WITH RECOVERY
GO

यदि कई फ़ाइलों को पुनर्स्थापित करने की आवश्यकता है, तो CLI कमांड को क्रमशः NORECOVERY और RECOVERY के साथ की आवश्यकता होती है - केवल कमांड में अंतिम फ़ाइल को ऑनलाइन डेटाबेस को वापस लाने के लिए RECOVERY के साथ होना चाहिए:

RESTORE DATABASE YourDB FROM DISK = 'Z:\YourDB.bak'
WITH NORECOVERY
GO
RESTORE LOG YourDB FROM DISK = 'Z:\YourDB.trn'
WITH RECOVERY
GO

आप SQL सर्वर प्रबंधन स्टूडियो विज़ार्ड का भी उपयोग कर सकते हैं:

यहाँ छवि विवरण दर्ज करें

वर्चुअल रिस्टोरिंग प्रक्रिया भी है, लेकिन आपको 3 पार्टी समाधान का उपयोग करना होगा। आमतौर पर आप डेटाबेस बैकअप को लाइव ऑनलाइन डेटाबेस के रूप में उपयोग कर सकते हैं। ApexSQL और Idera के अपने समाधान हैं। एपेक्सक्यूएल रिस्टोर के बारे में एसक्यूएल हैमर द्वारा समीक्षा करें । यदि आप बड़ी संख्या में बैकअप के साथ काम कर रहे हैं तो वर्चुअल रिस्टोरिंग अच्छा समाधान है। पुनर्स्थापना प्रक्रिया बहुत तेज़ है और डिस्क ड्राइव पर बहुत सारे स्थान भी बचा सकती है। आप कुछ तुलना के लिए यहाँ इन्फोग्राफिक पर एक नज़र डाल सकते हैं ।


23

यह काफी हद तक स्पष्ट हो सकता है, लेकिन इसने मुझे अभी और उलझा दिया:

यदि आप टेल-लॉग बैकअप ले रहे हैं, तो यह समस्या SSMS पुनर्स्थापना विज़ार्ड में इस विकल्प की जाँच करने के कारण भी हो सकती है - "स्रोत डेटाबेस को पुनर्स्थापित स्थिति में छोड़ें (NORECOVERY के साथ)"

यहाँ छवि विवरण दर्ज करें


7
यदि आप इस स्थिति में हैं, तो आपका सबसे अच्छा शर्त यह है: 1. डेटाबेस पर राइट-क्लिक करें, कार्य पर जाएं-> पुनर्स्थापना-> लेन-देन लॉग्स 2. बैकअप फ़ाइल का पता लगाएं जो टेल लॉग अप के लिए उपयोग किया गया था। 3. पुनर्स्थापित करें बैकअप पुनर्स्थापना सफल होना चाहिए और डेटाबेस को ऑनलाइन वापस लाना चाहिए।
रयान ग्रॉस

16

मुझे पता लगा कि क्यों।

यदि क्लाइंट जिसने RESTORE DATABASEकमांड जारी किया है , पुनर्स्थापना के दौरान डिस्कनेक्ट करता है, तो पुनर्स्थापना अटक जाएगी।

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


10
सभी SQL कमांड की आवश्यकता है कि क्लाइंट पूरे समय जुड़ा रहे।
मर्दानगी

2
@ मर्डनी: मुझे लगता है कि जब ग्राहक डिस्कनेक्ट करता है तो परिवर्तन पूर्ववत हो जाता है।
इयान बॉयड

मुझे Microsoft से PHP PDO ड्राइवर के साथ इस कमांड को चलाने में समान समस्या है। हालांकि जब Microsoft sql सर्वर प्रबंधन स्टूडियो के साथ चल रहा है तो यह ठीक काम करता है। मुझे आश्चर्य है कि मेरे php एप्लिकेशन को पूरे समय कैसे जोड़ा जाए?
चन्ना बोल

यहां भी संभव है, डीबी संभव कनेक्शन टूटने के बाद पुनर्स्थापना / एकल-उपयोगकर्ता में फंस गया। नए सत्र से अन्य सभी SPID को मार दिया, लेकिन अभी भी अटका हुआ है। समाधान के रूप में डेटाबेस को छोड़ने में सक्षम था।
क्रोकेक

10

इसने काम किया:

http://social.msdn.microsoft.com/Forums/en/sqldatabaseengine/thread/8dd1b91d-3e14-4486-abe6-e3a550bfe457

मेरे पास एक ऐसी स्थिति थी जहां मेरे डेटाबेस ने राज्य को बहाल किया था और मैं कोई भी प्रश्न नहीं चला सकता था और हमारे सॉफ़्टवेयर से नहीं जुड़ सकता था।

इस स्थिति से बाहर निकलने के लिए मैंने क्या किया:

  1. विंडोज़ सेवाओं से सभी SQL संबंधित सेवाओं को रोकें।

  2. मैंने DATA फ़ोल्डर खोला जहाँ Ldf और Mdf फाइलें SQL निर्देशिका में रहती हैं, आम तौर पर इसकी तरह: "C: \ Program Files *********** \ MSSQL \ DATA

  3. फिर मैंने डेटाबेस की Ldf और Mdf दोनों फाइलों की नकल की: [db name] .mdf और [db name] _log_ldf।

मैंने इन दोनों फ़ाइलों को किसी अन्य फ़ोल्डर में कॉपी किया है।

  1. फिर मैंने सभी SQL संबंधित सेवाओं (चरण 1 में) को फिर से विंडोज़ सेवाओं से शुरू किया।

  2. सामान्य लॉगिन के साथ मेरा MS SQL प्रबंधन स्टूडियो शुरू किया।

  3. अपराधी डेटाबेस पर राइट क्लिक करें और DELETE को हिट करें (डेटाबेस को हटाने के लिए)।

  4. इस डेटाबेस से संबंधित सभी एलडीएफ और एमडीएफ फाइलें डेटा फ़ोल्डर (चरण 2 में उल्लिखित) से चली गई हैं।

  5. एक ही नाम के साथ एक नया डेटाबेस बनाया (चरण 6 में हटाए गए एक का नाम - अपराधी डेटाबेस)।

  6. फिर [डेटाबेस का नाम] -> राइट क्लिक -> कार्य -> ​​ऑफ़लाइन ले लो।

  7. फिर मैंने दोनों फाइलों (चरण 3 से) को वापस डेटा फ़ोल्डर (चरण 2) में कॉपी किया।

  8. [डेटाबेस का नाम] -> राइट क्लिक -> कार्य -> ​​ऑनलाइन लाओ।


इसने मेरे लिए भी काम किया। चरण 10 पर, मैंने मौजूद फ़ाइलों को अधिलेखित करने के लिए चुना।
दिवि परदोमो

8

मेरे पास था । मेरे डेटाबेस के नाम में, और क्वेरी उस वजह से काम नहीं करती थी ('के पास गलत सिंटैक्स कह रहा है') तब मुझे एहसास हुआ कि मुझे नाम के लिए एक ब्रैकेट की आवश्यकता है:

RESTORE DATABASE [My.DB.Name] WITH RECOVERY

5

मेरे मामले में, SQL कमांड के साथ "रिस्टोरिंग ..." राज्य में लटक रहे डेटाबेस को गिराना पर्याप्त था

 drop database <dbname> 

एक क्वेरी विंडो में।

फिर मैंने डेटाबेस पर राइट-क्लिक किया और रिफ्रेश को चुना जिसने प्रबंधन स्टूडियो में प्रवेश को हटा दिया। बाद में मैंने एक नया पुनर्स्थापना किया जो ठीक काम करता है (ध्यान दें कि इसे ऑफ़लाइन लाने से काम नहीं हुआ, SQL सेवा का पुनरारंभ काम नहीं किया, एक सर्वर रिबूट ने भी काम नहीं किया)।


3

मुझे यह समस्या तब हुई जब मैंने इवेंट लॉग में एक टीसीपी त्रुटि प्राप्त की ...

डीबी को एसक्यूएल के साथ छोड़ दें या प्रबंधक "हटाएं" पर राइट क्लिक करें और फिर से पुनर्स्थापित करें।

मैंने वास्तव में डिफ़ॉल्ट रूप से ऐसा करना शुरू कर दिया है। DB ड्रॉप को स्क्रिप्ट करें, रीक्रिएट करें और फिर रिस्टोर करें।


3

डिफ़ॉल्ट रूप से, प्रत्येक सेट अप के RESTORE DATABASEसाथ आता है RECOVERY। 'NORECOVERY' विकल्प, मूल रूप से SQL सर्वर को बताता है कि डेटाबेस अधिक पुनर्स्थापना फ़ाइलों के लिए प्रतीक्षा कर रहा है (यदि DIFF फ़ाइल और लॉग फ़ाइल हो सकती है और, यदि संभव हो तो टेल-लॉग बैकअप फ़ाइल शामिल कर सकते हैं)। The RECOVERY ’विकल्प, सभी लेनदेन को पूरा करते हैं और डेटाबेस को लेनदेन करने के लिए तैयार करते हैं।

इसलिए:

  1. यदि आपका डेटाबेस SIMPLE पुनर्प्राप्ति मॉडल के साथ सेट है , तो आप केवल एक पूर्ण प्रदर्शन कर सकते हैं DIFF बैकअप NORECOVERYहोने पर ही विकल्प के साथ पुनर्स्थापना । SIMPLE पुनर्प्राप्ति मॉडल डेटाबेस में कोई लॉग बैकअप की अनुमति नहीं है ।
  2. अन्यथा, यदि आपका डेटाबेस FULL या BULK-LOGGED रिकवरी मॉडल के साथ सेट किया गया है , तो आप उसके बाद FULL रिस्टोर कर सकते हैंNORECOVERY विकल्प है, तो एक प्रदर्शन DIFF के बाद NORECOVERYअंत में, है, और, प्रदर्शन लॉग साथ बहाल RECOVERYविकल्प।

याद रखें, पिछले सबसे पहले जरूरी RECOVERYविकल्प है । यह एक स्पष्ट तरीका हो सकता है या नहीं। T-SQL के थर्मस में, स्थिति:

1।

 USE [master]
    GO
    RESTORE DATABASE Database_name 
    FROM DISK = N'\\path_of_backup_file.bak WITH FILE = 1, [REPLACE],NOUNLOAD, 
    RECOVERY -- This option could be omitted.
    GO

REPLACE विकल्प के साथ सावधानी के साथ उपयोग किया जाना चाहिए क्योंकि इससे डेटा हानि हो सकती है

या, यदि आप एक पूर्ण और DIFF बैकअप करते हैं, तो आप इसका उपयोग कर सकते हैं

   USE [master]
    GO
    RESTORE DATABASE Database_name
      FROM DISK = N'\\path_of_backup_file.bak' WITH FILE = 1, 
       NOUNLOAD,NORECOVERY
    GO
    RESTORE DATABASE Database_name
      FROM DISK =N'\\path_of_**diff**backup_file.bak' WITH FILE = 1, 
     NOUNLOAD, RECOVERY
    GO

 2. USE [master]
    GO
   -- Perform a Tail-Log backup, if possible. 
   BACKUP LOG Database_name
   GO
   -- Restoring a FULL backup
   RESTORE DATABASE Database_name
    FROM DISK = N'\\path_of_backup_file.bak' WITH FILE = 1, 
     NOUNLOAD,NORECOVERY
  GO 
  -- Restore the last DIFF backup
  RESTORE DATABASE Database_name
    FROM DISK = N'\\path_of_DIFF_backup_file.bak' WITH FILE = 1,
     NORECOVERY,NOUNLOAD
  GO
  -- Restore a Log backup
  RESTORE LOG Database_name
    FROM DISK = N'path_of_LOG_backup_file.trn' WITH FILE = 2,
    RECOVERY, NOUNLOAD
  GO

बेशक, आप विकल्प के साथ एक पुनर्स्थापना प्रदर्शन कर सकते हैं STATS = 10 जो SQL सर्वर को हर 10% पूरा होने की रिपोर्ट करने के लिए कहता है।

यदि आप पसंद करते हैं, तो आप प्रक्रिया का निरीक्षण कर सकते हैं या वास्तविक समय आधारित क्वेरी में पुनर्स्थापित कर सकते हैं। निम्नलिखित अनुसार:

USE[master]
GO
SELECT session_id AS SPID, command, a.text AS Query, start_time, percent_complete, dateadd(second,estimated_completion_time/1000, getdate()) as estimated_completion_time 
    FROM sys.dm_exec_requests r CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) a 
        WHERE r.command in ('BACKUP DATABASE','RESTORE DATABASE')
GO

उममीद है कि इससे मदद मिलेगी।


2

अगर स्नैपशॉट सक्षम किया गया है तो एक अटक डेटाबेस को हटाने में समस्या हो सकती है। मेरे लिए यह काम किया:

  1. सबसे पहले मैंने टीपू डेलकाब्लू का अनुसरण किया चरणों का पालन किया (कुछ पोस्ट पढ़ें)
  2. रन कमांड: ड्रॉप डेटाबेस [आपका डेटाबेस], जो आपको स्नैपशॉट डेटाबेस का नाम बताने में त्रुटि देगा
  3. रन कमांड: ड्रॉप डेटाबेस [स्नैपशॉट डेटाबेस], और फिर चरण 2 में फिर से कमांड चलाएं।


1

SQL एक्सप्रेस लाइसेंस सीमा के कारण मुझे MyDbName (रिस्टोरिंग ...) केस मिला है।

लॉग फ़ाइल में, मुझे यह मिला:

DATABASE या ALTER DATABASE बनाएँ क्योंकि परिणामी संचयी डेटाबेस आकार प्रति डेटाबेस 10240 MB की आपकी लाइसेंस सीमा से अधिक होगा ।

इसलिए यदि आप एक बड़े डेटाबेस को पुनर्स्थापित करने का प्रयास कर रहे हैं, तो आपको उदाहरण के लिए अपने SQL एक्सप्रेस सर्वर को डेवलपर संस्करण में बदलना होगा


यह टीएफएस डेटाबेस था और टीएफएस क्लाइंट ने मुझे पहले ही बताया था: डेटाबेस फुल।
cskwg

1

SQL सर्वर प्रबंधन स्टूडियो का उपयोग कर डेटाबेस को पुनर्स्थापित करते समय एक समान समस्या में भाग गया और यह पुनर्स्थापित मोड में फंस गया। ट्रैकिंग के कई घंटों के बाद, निम्नलिखित क्वेरी ने मेरे लिए काम किया। निम्न क्वेरी डेटाबेस को मौजूदा बैकअप से पिछली स्थिति में पुनर्स्थापित करता है। मेरा मानना ​​है कि कैच को एक ही डायरेक्टरी में .mdf और .log फाइल रखना है।

RESTORE DATABASE aqua_lc_availability
FROM DISK = 'path to .bak file'
WITH RECOVERY

0
  1. पहले SQL एजेंट सेवा की जाँच करें और चलाएं।
  2. निम्नलिखित टी-एसक्यूएल का उपयोग करना:

    Master.sys.sysaltfiles से फ़ाइल नाम चुनें जहाँ dbid = DB_ID ('db_name');

  3. लगातार टी-एसक्यूएल का उपयोग करना:

    RESTART, REPLACE के साथ DISK = 'DB_path' से अधिक जानकारी पाएं;

उममीद है कि इससे मदद मिलेगी!


0

RECOVERY आधारित विकल्पों में से सभी ने मेरे लिए काम नहीं किया।

प्रबंधन स्टूडियो से पूर्ण पुनर्स्थापना करने के लिए क्या करना था।

USE [master]
RESTORE DATABASE Sales_SSD
FROM  DISK = N'D:\databaseBackups02\Daily_Sales_20150309_0941.bak' 
WITH  FILE = 1,  
MOVE N'Sales_Data' TO N'C:\Data\SSD\Sales.mdf',  
MOVE N'Sales_Log' TO N'C:\Data\SSD\Sales_1.ldf',  
NOUNLOAD,  REPLACE,  STATS = 5

0

मेरे पास एक ही मुद्दा था ... हालांकि मुझे नहीं पता कि मेरे डेटाबेस ने इस समस्या का अनुभव क्यों किया क्योंकि मेरी ड्राइव पूरी नहीं थी ... यह ऐसा है जैसे यह भ्रष्ट हो गया है या कुछ और। मैंने उपरोक्त सभी में से किसी को भी पूरी तरह से काम करने की कोशिश की, मैंने विशेष रूप से सोचा था कि सेवा को रोकने और mdf और ldf फ़ाइलों को हटाने का सुझाव काम करेगा ... लेकिन यह अभी भी बहाल करने में देरी कर रहा है?

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

जब तक मैं एक वर्चुअल मशीन का उपयोग कर रहा हूं, तब नई फाइलों को कॉपी करने में हमेशा के लिए लग गया ... इसलिए क्लिपबोर्ड का उपयोग करके कॉपी करना और चिपकाना एक घंटे में ही शुरू हो जाता है, इसलिए मैं केवल इसे अंतिम प्रयास के रूप में सुझाऊंगा।


0

मेरे लिए यह तय था

  1. उदाहरण रोकना
  2. डेटा फ़ोल्डर में .mdf और .ldf फ़ाइलों का बैकअप बनाना
  3. उदाहरण को पुनरारंभ करें
  4. डेटाबेस को पुनर्स्थापित करके हटा दें
  5. डेटा फ़ोल्डर में .mdf और .ldf फ़ाइलों को वापस रखें
  6. .Mdf और .ldf फ़ाइलों के लिए उदाहरण संलग्न करें

0
RESTORE DATABASE {DatabaseName}
   FROM DISK = '{databasename}.bak'
   WITH REPLACE, RECOVERY

कृपया इस जानकारी को पुराने, स्वीकृत और अत्यधिक उत्क्रमित उत्तर की तुलना में प्रदान करता है। यह प्रतिष्ठा पाने की उम्मीद में इसे कॉपी करने की धारणा से बचने में मदद करेगा। इसके अलावा, कोड-ओनली उत्तर (जो मुख्य दृश्य अंतर है) की यहां सराहना नहीं की जाती है, क्योंकि वे गलत धारणा देते हैं कि
स्टैकऑवरफ्लो

मैंने फ़ॉर्मेटिंग को ठीक कर दिया, बस पुराने उत्तर की समानता को और अधिक स्पष्ट करने के लिए। लेकिन आपको लगता है कि यहाँ करने के लिए सीख सकते हैं stackoverflow.com/editing-help आप भविष्य में और अधिक आसानी से पढ़ने योग्य जवाब करने की कोशिश के मामले में।
युनानोश

0

इस समस्या को हल करने के लिए निम्न आदेश का उपयोग करें

RESTORE DATABASE [DatabaseName] WITH RECOVERY
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.