REPLACE के साथ एक बैकअप बहाल करते समय त्रुटि 3154


16

मैंने अपने कंप्यूटर पर SP1 के साथ SQL 2012 स्थापित किया है। मैंने एक डेटाबेस का बैकअप बनाया test.bak

मेरे पास नाम के साथ एक डेटाबेस test2है जो समान डेटाबेस है, लेकिन डेटा बदल गया है।

मैं डेटाबेस test.bakपर पुनर्स्थापित करना चाहता हूं test2

मुझे हमेशा त्रुटि हो रही है:

3154 त्रुटि: बैकअप सेट मौजूदा डेटाबेस के अलावा किसी डेटाबेस का बैकअप रखता है।

मैंने कोशिश की:

  1. मैंने राइट-क्लिक किया test2 -> Restore database -> From device

    मैंने चुना test.bakऔर जाँच की With Replaceलेकिन मुझे त्रुटि मिली।

  2. फिर मैंने राइट-क्लिक करने की कोशिश की test2 -> Restore file and filegroups

    मैंने चुना test.bakऔर जाँच की With Replaceलेकिन मुझे त्रुटि मिली।

मैं अपने पुराने डेटाबेस को हटा सकता हूं और फिर सही नाम के साथ अपना बैकअप पुनर्स्थापित कर सकता हूं, लेकिन जब मैं SQL 2008 का उपयोग कर रहा था, तो मुझे मौजूदा डेटाबेस को पुनर्स्थापित करने में कोई समस्या नहीं थी।

ऐसा लगता है कि जब से मैं SQL2012 का उपयोग करता हूं, मुझे यह त्रुटि बहुत मिलती है!

जवाबों:


12

आपको WITH REPLACEप्रबंधन स्टूडियो में पॉइंट-एंड-क्लिक चीज़ों का उपयोग करने से बचना चाहिए और सामान्य रूप से - वे अनम्य हैं और अक्सर बग होते हैं।

यह मेरे लिए काम किया:

USE [master];
GO

CREATE DATABASE test;
GO

CREATE DATABASE test2;
GO

BACKUP DATABASE test TO DISK = 'c:\temp\test.bak' WITH INIT, COMPRESSION;
GO

RESTORE DATABASE test2
  FROM DISK = 'c:\temp\test.bak'
  WITH REPLACE,
  MOVE 'test' TO 'c:\temp\test2.mdf',
  MOVE 'test_log' TO 'c:\temp\test2.ldf';

इसके अलावा, आपको यह सुनिश्चित करना चाहिए कि जब आप बैकअप डेटाबेस का उपयोग करते हैं WITH INITऔर / या फ़ाइल में डिवाइस को इंगित नहीं करते हैं जिसमें पहले से ही एक बैकअप है (क्योंकि यह वही डेटाबेस नहीं हो सकता है जो आप अब बैकअप कर रहे हैं - खासकर यदि आप नामों का पुन: उपयोग करते हैं test...)।


@AaronBertrand फी, वह सुविधा मौजूद है। मैं आमतौर पर यूआई का उपयोग करता हूं और यह सुनिश्चित करने के लिए स्क्रिप्ट करता हूं कि सब कुछ ठीक है। वहाँ रहे हैं कीड़े का एक बहुत हाँ,।
यूएसआर

2

1) कमांड WITH REPLACEका उपयोग करते समय उपयोग करें RESTORE

2) DROPपुराना डेटाबेस जो परस्पर विरोधी है और RESTOREकमांड का उपयोग करके फिर से पुनर्स्थापित करता है ।

SQL सर्वर संस्करण के साथ कोई समस्या नहीं है। जैसा कि आरोन ने बताया, मैं 2008 से 2012 तक डेटाबेस को पुनर्स्थापित करने में सक्षम हूं और साथ ही साथ संस्करण भी।


2

आप गलत डेटाबेस को पुनर्स्थापित कर रहे हैं। इसे " test2से एक बैकअप के साथ बहाल करने" के रूप में मत सोचो test, "मेरे बैकअप को पुनर्स्थापित करें testलेकिन इसे नाम बदलें test2"। आप "डेटाबेस से: फ़ील्ड" में से पुनर्स्थापना कार्य चुन सकते हैं testऔर डाल सकते हैं test2

जैसा कि हारून ने उल्लेख किया है, विज़ार्ड पर भरोसा करने के बजाय स्क्रिप्ट सीखें - यह स्पष्ट है कि क्या होने जा रहा है।


2

आप अभी भी ऐसा कर सकते हैं लेकिन इसके लिए एक अतिरिक्त कदम की आवश्यकता है।

पुनर्स्थापना संवाद खोलें, 2008 की आदतों के अनुसार अपने सामान्य चयन करें। यदि मूल डेटाबेस DB है तो स्रोत के लिए DB.bak डिवाइस को चुना और गंतव्य नाम को DBTest में बदलें। इसके बाद सेलेक्ट ए पेज (ऊपरी बाएं कोने) के नीचे जहाँ आप सामान्य / फ़ाइलें / विकल्प देखते हैं - फ़ाइलें चुनें। ग्रिड में देखें। आपको मूल फ़ाइल नाम और पुनर्स्थापना फ़ाइल नाम के रूप में कॉलम दिखाई देंगे। मैन्युअल रूप से उत्तरार्द्ध को चौड़ा करें और नए नाम में टाइप करें (यदि डेटाबेस का मूल नाम DB है और आप DBTest बनाना चाहते हैं तो परिवर्तन करें ... \ DB.mdf to ... \ DBTest.mdf, आदि)

यह आपके .bak फ़ाइल को स्रोत के रूप में DB और गंतव्य के रूप में DBTest के रूप में स्वीकार करेगा। आपको विकल्प पृष्ठ पर जाने और प्रतिस्थापन के साथ चयन करने की आवश्यकता हो सकती है। मुझे अन्य कारणों की आवश्यकता है, इसलिए मैं इस विकल्प के बिना इसका परीक्षण नहीं कर सकता।


2

सही उत्तर, जैसा कि बताया गया है, WITH REPLACEविकल्प का उपयोग करना है।

मैं केवल यह बताना चाहता हूं कि WITH REPLACEयदि आप एक अंतर बैकअप (पूर्ण एक के बिना) से पुनर्स्थापित करने का प्रयास करते हैं , तो आप उपयोग करते समय भी प्रश्न में त्रुटि प्राप्त कर सकते हैं ।


संभवतः मेरे पास इस उत्तर के समय टिप्पणी करने के लिए पर्याप्त अंक नहीं थे, मैं सिर्फ यह बताना चाहता था कि यदि आप एक अंतर बैकअप (पूर्ण एक के बिना) से पुनर्स्थापित करने का प्रयास करते हैं, तो "REPLACE" का उपयोग करते समय भी आप त्रुटि प्राप्त कर सकते हैं
Brimstedt

0

उम्मीद है कि यह काम करेगा।

  1. एक बार जब आप फ़ाइल को पुनर्स्थापित करने के लिए पथ सेट करते हैं।
  2. बाएं हाथ की तरफ "विकल्प" पर क्लिक करें।
  3. चेक बॉक्स पर टिक करें - "गंतव्य डेटाबेस में मौजूदा कनेक्शन बंद करें"।
  4. ओके पर क्लिक करें। यहाँ छवि विवरण दर्ज करें

-4

कृपया अपना रनिंग सर्वर बंद करें और फिर db को पुनर्स्थापित करें, यह आपकी मदद करेगा। :)

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