SQL सर्वर में डेटाबेस को पुनर्स्थापित करते समय mdf फ़ाइल को अधिलेखित नहीं किया जा सकता है


21

मुझे एक डेटाबेस मिला है। इसमें कुछ डेटा है। मैंने A के लिए A.bak फ़ाइल के रूप में एक बैकअप बनाया । तब मैं एक नया खाली डेटाबेस बी बनाता हूं और फिर मैं ए.बाक से बी को पुनर्स्थापित करने का प्रयास करता हूं । लेकिन SQL सेवा मुझे निम्नलिखित त्रुटि बताती है:

फ़ाइल 'C: \ SQL निर्देशिका \ DATA \ A.mdf' को अधिलेखित नहीं किया जा सकता है। इसका उपयोग डेटाबेस 'ए' द्वारा किया जा रहा है।

लेकिन अगर मैं SQL सर्वर से A को हटाता हूं, तो यह ठीक है।

मुझे समझ में नहीं आता कि अलग-अलग बैकअप फ़ाइल से पुनर्स्थापित करते समय SQL को मूल डेटाबेस फ़ाइल में लिखने की आवश्यकता क्यों है ?

धन्यवाद ~

जवाबों:


19

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

RESTORE DATABASE B FROM DISK = 'A.bak'
WITH MOVE 'DataFileLogicalName' TO 'C:\SQL Directory\DATA\B.mdf',
MOVE 'LogFileLogicalName' TO 'C:\SQL Directory\DATA\B.ldf',
REPLACE --Needed if database B already exists

वैसे भी कुछ ऐसा। यदि आवश्यक हो तो बैकअप में तार्किक फ़ाइल नाम देखने के लिए DISK DISESTISTONLY FROM DISK ... का उपयोग करें।


11

WITH MOVE/ MOVEसही समाधान है T-SQL

वैसे, यदि आप GUI का उपयोग करना चाहते हैं तो आप फ़ाइलों में जा सकते हैं और नाम बदल सकते हैं :

  • a.MDF
  • a.NDF
  • a.LDF

सेवा

  • b.MDF
  • b.NDF
  • b.LDF

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


1
साथ ही, सामान्य टैब में डेस्टिनेशन डेटाबेस का नाम बदलते समय, GUI ऑटोमैटिक रूप से रीस्टोर अस के नामों को तदनुसार अपडेट कर देगा।
Wouter

0

जब आप बैकअप को पुनर्स्थापित करते हैं तो आप डेटाफ़ाइल्स को पुनर्स्थापित करने के लिए निर्दिष्ट कर सकते हैं।

यहाँ और यहाँ देखो । आप "डेटाबेस फ़ाइलों को पुनर्स्थापित करें" विकल्प के रूप में उपयोग कर सकते हैं और "मौजूदा डेटाबेस को अधिलेखित करें" झंडा।


0

क्या आप REPLACE विकल्प का उपयोग कर रहे हैं, या तो TSQL कमांड में, या चयनित चेकबॉक्स के रूप में? वैकल्पिक रूप से, आप फ़ाइलों का नाम बदल सकते हैं, और डेटाबेस को कुछ और कह सकते हैं।

आपको उस डेटाबेस को पुनर्स्थापित करना थोड़ा मुश्किल होगा, जिसका उपयोग किया जा रहा है ..... आपको डेटाबेस का उपयोग करके प्रक्रियाओं को मारने की आवश्यकता होगी; या डेटाबेस को पहले ड्रॉप / डिलीट करें, कनेक्शन बंद करें (यह शायद सबसे आसान है); या उस डेटाबेस को सेट करें जिसे आप रोलबैक के साथ प्रतिबंधित उपयोगकर्ता मोड की तरह तत्काल अधिलेखित करना चाहते हैं, इसलिए उम्मीद है कि केवल डीबीए उपयोग कर सकते हैं; या यहां तक ​​कि एसक्यूएल सर्वर को भी बंद कर दें, और इसे पुनरारंभ करें - उम्मीद है कि किसी भी चीज़ से पहले रोलिंग बहाल करना / उस डेटाबेस का उपयोग करता है।

पीएस उस डेटाबेस का बैकअप लें जिसे आप अधिलेखित करने वाले हैं, बस मामले में।


0

यदि कोई व्यक्ति पहले से ही Optionsपृष्ठ का उपयोग करने और सक्रिय करने के Overwrite the existing database (WITH REPLACE)विकल्प के बाद प्रबंधन स्टूडियो के जीयूआई में समाधान खोजता है :

बस Restore Asकॉलम में क्लिक करें और *.mdfफ़ाइल और फ़ाइल के फ़ाइल नाम बदलें *.ldf

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