SQL Server 2012 नए DB नाम के लिए बैकअप पुनर्स्थापित करें


16

मुझे याद है कि, 2008 में, आप पुनर्स्थापना-विज़ार्ड से "डेस्टिनेशन डेटाबेस" फ़ील्ड में नाम बदलकर, एक DB की नई प्रति के लिए एक बैकअप को पुनर्स्थापित कर सकते हैं। यह एक नया डीबी बनाएगा, जो मूल डीबी की एक प्रति है जो उस समय के बिंदु पर बहाल है जो आप चाहते थे। मुझे यह पता नहीं है कि एसक्यूएल 2012 को बनाने के लिए मुझे क्या करना है।

अब, मैं समझता हूं (हारून बर्ट्रेंड के लिए धन्यवाद) कि यह वास्तव में नहीं बदला था, और यह 2012 वास्तव में मेरे लिए और अधिक स्पष्ट कर रहा है कि यह रणनीति पहली जगह में एक बुरा विचार था!

तो, मुझे यह करने की आवश्यकता है: एक नई DB, 'MyDB_Copy' बनाएं, एक मौजूदा DB, 'MyDB' से, इसकी बैकअप फ़ाइलों का उपयोग करके। हमारे पास रात्रिकालीन फुल-बैकअप (.bak) और हर 15-मिनट की TLogs (.trn) है। मैं नहीं चाहता कि मौजूदा 'MyDB' प्रभावित / छुआ हुआ हो, क्योंकि यह "लाइव" है।

MyDB_Copy मुख्य पूर्ण-बैकअप फ़ाइल से बनाए जाने के बाद, मुझे समय पर एक निश्चित बिंदु पर लाने के लिए कुछ दर्जन TLog बैकअप को पुनर्स्थापित करने की आवश्यकता है।


क्या आप या हारून साझा कर सकते हैं कि यह एक बुरा विचार क्यों है? या उस मुद्दे से लिंक करें जहां इसे समझाया गया है?
थ्रोंक

मेरा मानना ​​है कि यह तार्किक-नामों को बदलने के बारे में कुछ है, और इस तरह आप एक ही स्थान पर दो डीबी के साथ समाप्त हो जाएंगे, जिनके अलग-अलग नाम और भौतिक-फाइलें हैं लेकिन समान तार्किक-नाम हैं, जो रखरखाव-योजनाओं के लिए समस्याएं पैदा करते हैं जो निर्भर करते हैं तार्किक-नामों पर। मेरी स्थिति में, उन बहाल / कॉपी किए गए DBs कुछ घंटों से अधिक समय तक नहीं रहे, लेकिन मैं देख सकता हूं कि यह एक महान अभ्यास क्यों नहीं है।
नैटज

जवाबों:


18

दस्तावेज़ में उदाहरण E पर शिथिल आधारित , एक नई क्वेरी विंडो खोलें और चलाएँ:

RESTORE DATABASE MyDB_Copy FROM DISK = 'C:\blahblah\MyDB.bak'
  WITH REPLACE, RECOVERY,
  MOVE 'MyDB' TO 'C:\blahblah\Data\MyDB_Copy.mdf',
---------------------------------------^^^^^
  MOVE 'MyDB_log' TO 'C:\blahblah\Data\MyDB_Copy.ldf';
-------------------------------------------^^^^^

तार्किक नाम महत्वपूर्ण नहीं हैं; भौतिक फ़ाइल नाम हैं। यह आपके तार्किक फ़ाइल नामों के बारे में धारणा बनाता है और केवल दो हैं; चलाने EXEC MyDB..sp_helpfile;के लिए सुनिश्चित किया जाना है।

आप लॉग बहाल करने की आवश्यकता है, तो बदल RECOVERYकरने के लिए NORECOVERY:

  WITH REPLACE, NORECOVERY,
----------------^^

तो आप की एक श्रृंखला जारी कर सकते हैं:

RESTORE LOG MyDB_Copy FROM DISK = 'C:\blahblah\file1.trn' WITH NORECOVERY;

और पिछले एक पर:

RESTORE LOG MyDB_Copy FROM DISK = 'C:\blahblah\fileN.trn' WITH RECOVERY;

या अगर आपको केवल एक बिंदु तक एक लॉग अप का हिस्सा चाहिए (मुझे लगता है कि आपने जाँच कर ली है कि एलएसएन और समय कहाँ हैं तो आप ठीक से जानते हैं कि आपको किन फ़ाइलों की आवश्यकता है):

RESTORE LOG MyDB_Copy FROM DISK = 'C:\blahblah\fileN.trn' WITH 
  STOPAT = '<some point in time Friday>', RECOVERY;

आपके द्वारा पिछले संस्करणों में काम किया गया तरीका कभी भी काम नहीं करेगा, जब तक कि बैकअप एक अलग सर्वर से नहीं आता है। डिफ़ॉल्ट रूप से यह नई mdf और ldf फ़ाइलों को ठीक उसी स्थान पर रखने का प्रयास करेगा, और यह संभव नहीं है।


ठीक है, इससे थोड़ी मदद मिली। अब मुझे डीबी वापस पाने के लिए कुछ दर्जन टीआरएन फाइलों को पुनर्स्थापित करने की आवश्यकता है, यह शुक्रवार की रात थी (पूर्ण बैकअप केवल दैनिक होता है - टीएलओजी बैकअप हर 15 मिनट में होता है)। आपके नमूने का उपयोग करते हुए, मुझे मुख्य BAK फ़ाइल से DB बनाया गया, लेकिन मुझे लॉग को पुनर्स्थापित करने के लिए इसी तरह के बयान की कोशिश करते समय एक नई त्रुटि मिलती है। यह कहता है कि "लॉग या डिफरेंशियल बैकअप को बहाल नहीं किया जा सकता है क्योंकि कोई भी फाइल रोलफॉर्वर्ड करने के लिए तैयार नहीं है"।
नैटज

@NateJ आपको एक पूर्ण प्रश्न पूछना चाहिए। :-)
हारून बर्ट्रेंड

1
बहुत बढ़िया, मैं इसे टाइप कर रहा हूँ! आपकी सहायता के लिए बहुत - बहुत धन्यवाद। मुझे लगता है कि मैं StackOverflow में कुछ नकारात्मक प्रतिनिधि मिला है, लेकिन अगर यह काम करता है यह अच्छी तरह से इसके लायक होगा।
नैटज

1
@NateJ आपको वह प्रतिनिधि वापस प्राप्त करना चाहिए क्योंकि प्रश्न को हटा दिया गया था जब वह माइग्रेट किया गया था (या अंततः होगा)। यह मुझे नहीं था, लेकिन मुझे लगता है यह है कि यह एक संस्करण में काम किया लेकिन अब जब कि स्पष्ट रूप से अभी क्या हो रहा था ... की एक गलतफहमी है नहीं किया है, अपने आरोप की वजह से था
हारून बर्ट्रेंड

ओह मुझे हो गया। ऐसा कुछ काम करता था - मुझे याद नहीं आ रहा है कि वास्तव में क्या / कैसे, लेकिन मैं मानता हूं कि यह गलत समझा गया था। मेरा सहकर्मी ऊपर और नीचे शपथ लेता है, लेकिन अब जब मैं इसके बारे में सोचता हूं, तो इसका कोई मतलब नहीं है। हमने GUI का उपयोग करके कुछ अलग किया होगा। मुझे लगता है कि जैसा आपने सुझाया है, कमांड / स्क्रिप्ट का उपयोग करना हमारे लिए बेहतर होगा। :) लॉग अब, सफलतापूर्वक अभी तक बहाल कर रहे हैं!
नटेज

0

आपको केवल एक ही डेटाबेस को पुनर्स्थापित करने के लिए कई बार उस डेटाबेस के लिए डिस्क फ़ाइलों का नाम बदलना होगा। स्पष्ट रूप से आपको डेटाबेस को SQL सर्वर में किसी भी अन्य डेटाबेस को एक अलग नाम देने की आवश्यकता है। SSMS में, आपके द्वारा डेटाबेस के लिए नाम में टाइप और पुनर्स्थापित करने के लिए .bak फ़ाइल का चयन करने के बाद, आप बाईं ओर "एक पृष्ठ चुनें" अनुभाग में 'फ़ाइलें' पर क्लिक करें और बस डिस्क फ़ाइलों का नाम बदल दें।

चीयर्स डग

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