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




sql-server backup (13)

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

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

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

    रीस्टार्ट, स्थान के साथ डिस्क = 'डीबी_पाथ' से डाटाबेस को पुनर्स्थापित करें;

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

मैंने डेटाबेस का बैक अप लिया:

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

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

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

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

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

  1. विंडोज सेवाओं से सभी एसक्यूएल संबंधित सेवाओं को रोकें।

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

  3. तब मैंने डेटाबेस की एलडीएफ और एमडीएफ फाइलों की प्रतिलिपि बनाई: [डीबी नाम]। एमडीएफ और [डीबी नाम] _log.ldf

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

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

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

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

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

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

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

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

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


क्या आपने केवल एक सत्यापन चलाने की कोशिश की है? बस यह सुनिश्चित करने के लिए कि यह एक ध्वनि बैकअप है।

http://msdn.microsoft.com/en-us/library/ms188902.aspx


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

मुझे एक समाधान मिला है :)

Drop database *dbname*

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

RESTORE DATABASE YourDB WITH RECOVERY
GO

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

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

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

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


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

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

आपका आदेश इस तरह दिखना चाहिए,

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

SQL सर्वर प्रबंधन स्टूडियो में पुनर्स्थापित डेटाबेस विज़ार्ड का उपयोग करके आपको और अधिक सफलता मिल सकती है। इस तरह आप विशिष्ट फ़ाइल स्थानों, ओवरराइट विकल्प, और साथ रिकवरी विकल्प का चयन कर सकते हैं। कभी-कभी, डेटाबेस फ़ाइल के आकार की वजह से बहाली की प्रक्रिया फंस गई। यहां देखें: https://madhivanan.wordpress.com/2016/09/06/issue-in-recovering-a-database-that-is-in-the-restoring-state-reference/


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

यदि ग्राहक जो RESTORE DATABASE दौरान रीस्टोर RESTORE DATABASE आदेश जारी करता है, तो पुनर्स्थापित हो जाएगा।

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


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

डीबी को एसक्यूएल के साथ ड्रॉप करें या मैनेजर "डिलीट" में राइट क्लिक करें और फिर से बहाल करें।

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


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

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

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


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

RESTORE DATABASE [My.DB.Name] WITH RECOVERY

यहां बताया गया है कि आप इसे कैसे करते हैं:

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

सौभाग्य!


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

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

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

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

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






restore