संलग्न करें / अलग करें बैकअप / पुनर्स्थापित करें


14

मुझे एक अन्य परीक्षण वातावरण को सेटअप करने के लिए डुप्लिकेट डेटाबेस बनाने के लिए डेटाबेस (एक पूरे के रूप में) को दूसरे सर्वर में स्थानांतरित करने की आवश्यकता है।

मेरे पास दो विकल्प हैं:

  1. स्रोत सर्वर पर एक पूर्ण बैकअप बनाएं / गंतव्य सर्वर पर पुनर्स्थापित करें;
  2. स्रोत सर्वर पर अलग करें / गंतव्य सर्वर पर संलग्न करें।

मेरी आवश्यकताओं के अनुसार दो समाधानों के पक्ष और विपक्ष क्या हैं?

मैं SQL Server 2008 एंटरप्राइज़ का उपयोग कर रहा हूं।

जवाबों:


12

बैकअप / पुनर्स्थापना आम तौर पर आपकी पसंद का तरीका होना चाहिए। यह ज्यादातर स्थितियों में तेज होगा।

आप इसे लगातार उपयोग कर सकते हैं, उत्पादन के लिए भी परीक्षण कर सकते हैं।

इस संबंधित प्रश्न को भी देखें, जहां बैकअप / रिस्टोर बनाम डिटैच / अटैच का उल्लेख किया गया है:

SQL सर्वर माइग्रेशन बैकअप बनाम कॉपी डेटा और लॉग फ़ाइलों को पुनर्स्थापित करता है

सुनिश्चित करें कि आप WITH COPY_ONLYविकल्प को बैकअप में जोड़ते हैं ताकि यह मौजूदा रखरखाव योजना बैकअप श्रृंखला को तोड़ न दे।


एसक्यूएल 2008 एंटरप्राइज ने बैकअप संपीड़न पेश किया; संभावना है कि संपीड़ित बैकअप 100GB से काफी छोटा होगा, और इस तरह एमडीएफ / एलडीएफ पर कॉपी करने की तुलना में लिखने / कॉपी / लोड करने की जल्दी होगी।
थॉमस रशटन

6
  1. डेटाबेस का पता लगाने से यह ऑफ़लाइन हो जाएगा। यदि आपको किसी अन्य सर्वर पर कॉपी करते समय डेटाबेस को ऑनलाइन रहने के लिए बैकअप की आवश्यकता है, तो बैकअप लें।
  2. एक बैकअप फ़ाइल (.bak) को ले जाना और पुनर्स्थापित करना एकाधिक mdf / ldf फ़ाइलों को स्थानांतरित करने और संलग्न करने की तुलना में सरल / आसान हो सकता है (जैसा कि आप डेटाबेस को अलग करेंगे)।
  3. कागज पर, एक डेटाबेस डिटैच / अटैच तकनीकी रूप से तेज हो सकता है, लेकिन व्यवहार में, एक बैकअप / रिस्टोर जल्दी और आसान होने की संभावना है। जब आप किसी डेटाबेस को अलग कर लेते हैं तो आपको पहले मूल डेटाबेस को ऑफ़लाइन ले जाना होगा (सभी को और सब कुछ डिस्कनेक्ट करना होगा), और फिर डेटाबेस अनुपलब्ध है जब तक आप रिटैट नहीं करते। आपको सभी फ़ाइलों का ट्रैक भी रखना होगा, जबकि एक बैकअप के साथ सभी फाइलें समूहीकृत हैं।

यदि आप बैकअप / पुनर्स्थापना का निर्णय लेते हैं, तो बैकअप के दौरान COPY_ONLY विकल्प का उपयोग करके यह सुनिश्चित करें कि किसी भी मौजूदा रखरखाव योजना की बैकअप श्रृंखला टूटी हुई नहीं है।

.Bak फ़ाइल अच्छी तरह से संपीड़ित होती है, इसलिए यदि आप एक बैकअप बनाने के साथ जाने का निर्णय लेते हैं, तो बैकअप को स्थानांतरित करने से पहले संपीड़ित करना कुछ हस्तांतरण समय बचा सकता है।


4

मैं बैकअप / पुनर्स्थापना के लिए जाऊंगा क्योंकि यह मूल डेटाबेस को एक परिचालन स्थिति में छोड़ देता है।

खासकर यदि आप रूपांतरण का परीक्षण करने के लिए 'प्रोडक्शन' कर रहे हैं, तो यह महत्वपूर्ण है कि उत्पादन डेटाबेस ऑनलाइन रहे।

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

इसके अलावा, मेरे लिए (हालांकि इसके कुछ और की तुलना में एक भावना है), बैकअप / पुनर्स्थापना "रोजमर्रा का काम" है, जबकि अलग-अलग परिस्थितियों में आप जो कुछ करते हैं उसे अलग / संलग्न करना है। मुझसे यह मत पूछिए कि मुझे यह विचार कहाँ से मिला; ;-)


1

मेरे पास हमेशा बैकअप / पुनर्स्थापना के "पुनर्स्थापना" भाग के साथ समस्याएँ हैं। मैं उन बारीकियों का हवाला नहीं दे सकता, जैसा कि मैंने अंततः दिया था और तब से लेकर / जब तक मैं उसे अटैच / कॉपी / अटैच नहीं करता।

अलग करने के बारे में केवल यह है कि आप यह सुनिश्चित करें कि आप सुनिश्चित करें कि DBMS भी डेटाबेस को नष्ट करने के लिए नहीं जा रहा है। यह हुआ है, और यह एक सुंदर दृष्टि नहीं है।


5
डीबीएमएस डिटैच होने पर डेटाबेस को डिलीट नहीं करेगा। अगर फाइल को डिलीट करने और रिस्टोर करने में समस्या हो तो आप किस तरह की दुकान हैं?
gbb

@Will: sp_detach_db DROP नहीं है: 2 अलग और असंबंधित आदेश जिन्हें अलग से जारी किया जाना है। एक अलग डेटाबेस DROPped या SQL के माध्यम से नष्ट कर दिया फ़ाइलों को नहीं किया जा सकता है। एक गिरा हुआ डेटाबेस अलग नहीं किया जा सकता है। डिटैच में कोड के माध्यम से या SSMS के माध्यम से "डिलीट फाइल" विकल्प नहीं है। इसलिए, मैं अपनी पहली टिप्पणी को सही ठहरा सकता हूं क्योंकि आपको जानबूझकर DROP पर फ़ाइलों को हटाने का विकल्प चुनना है। अलग नहीं
gbn

1

मैं copy_onlyएक डॉस शेल से इस विधि का उपयोग करके बैकअप की सलाह देता हूं (ताकि आप लेनदेन लॉग को बाधित न करें) :

C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\Backupनिर्देशिका से चलाएँ :

backup.bat SQLDBNAME

कहां backup.batशामिल हैं (पठनीयता के लिए लाइन ब्रेक) :

sqlcmd.exe -U username -P xxxxxxx -S SQL-SERVERNAME 
    -Q "BACKUP DATABASE %1 TO DISK = '%1_COPYONLY.BAK' WITH COPY_ONLY,INIT;"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.