क्या मुझे डिटैच / कॉपी / अटैचमेंट या बैकअप-रिस्टोर-रीप्ले के जरिए डाटा माइग्रेट करना चाहिए?


17

मैं एक नई SAN (एक पुराने SAN से) के लिए डेटाबेस फ़ाइलों को माइग्रेट करने के बारे में हूं। पेट के लिए मेरे पास इसे लागू करने के लिए कुछ विकल्प हैं। (1) यह सुझाव दिया गया था कि मैं सर्वर पर एक नया डेटाबेस के लिए एक पूर्ण बैकअप को पुनर्स्थापित करने के प्रयास के स्तर पर देखता हूं। हालाँकि, (2) मेरी मूल योजना पुराने से फ़ाइलों की प्रतिलिपि बनाने के लिए थी SAN नया करने के लिए SAN कोचिंग और फिर डेटाबेस reattaching।

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

मुझे लगता है कि मेरा सवाल यह है कि क्या मैं बैकपैक-रिस्टोर-रिप्ले विकल्प के अपने संदेह में न्यायसंगत हूं या नहीं और उस विकल्प के अन्य गुण या जोखिम क्या हैं?

जवाबों:


16

निजी तौर पर, मैं व्यवस्था को संलग्न / संलग्न करने से बचूंगा। विशेष रूप से SQL Server 2000 में, मुझे अभी भरोसा नहीं है कि आप हमेशा सर्वर को वापस लाएंगे और उन फाइलों को संलग्न करने में सक्षम होंगे। मैंने बहुत सारी कहानियाँ सुनी हैं जहाँ यह साफ-सुथरा नहीं हुआ - सिर्फ इसलिए कि आपके पास एक प्लान बी है जो स्वचालित रूप से प्लान ए को समझदार नहीं बनाता है।

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

पुल-द-ड्राइव-आउट-से-अंडर-एसक्यूएल-सर्वर विधि पर एक अन्य लाभ: बैकअप / पुनर्स्थापना के साथ आप विभिन्न फ़ाइलों को विभिन्न ड्राइव अक्षरों में ले जा सकते हैं, जैसे वे पहले थे। उदाहरण के लिए जब हम एक नए SAN में माइग्रेट हुए, तो हमारे पास अधिक वॉल्यूम होने में सक्षम थे, इसलिए हम tempdb को T: \ (जो पहले मौजूद नहीं था), कुछ डेटा और लॉग फाइल को नए ड्राइव लेटर्स आदि में स्थानांतरित कर सकते थे। हमारे पास सभी नई I / O क्षमता का बेहतर उपयोग करने के लिए। यदि आप बस SQL ​​सर्वर बंद करते हैं और फिर डिस्क को स्वैप करते हैं, तो आपको एक ही ड्राइव अक्षर और समान संख्या में वॉल्यूम की आवश्यकता होती है।


7

मैं डेटाबेस को लगभग लगातार स्थानांतरित करता था, SAN पुनर्निधारण और माइग्रेशन के कारण।

यह मानते हुए कि आप एक समय में एक पूरे सर्वर को आगे बढ़ा रहे हैं, मैं आपके रास्ते # 2 जैसी चीज के साथ जाऊंगा। (यदि आप एक समय में एक डेटाबेस ले जा रहे हैं, और अंततः हर डेटाबेस को सर्वर पर कर रहे हैं, तो यह अधिक समस्याग्रस्त होगा क्योंकि आपको फ़ाइलों के लिए पथ बदलना होगा।)

ध्यान दें कि "single_user" का मतलब यह नहीं है कि आप। आप किसी डेटाबेस में DBCC CHECKDB पर जा सकते हैं और इसमें सक्षम नहीं हो सकते क्योंकि कोई व्यक्ति पहले से ही वहां मौजूद है। एक स्क्रिप्ट तैयार करें जिसे आप डेटाबेस से बाहर "सभी लेकिन आप" को बूट करने के लिए चला सकते हैं और इसे एक आसान जगह पर रख सकते हैं। ध्यान दें कि SQL 2000 में आधुनिक संस्करण के रूप में "सभी को बाहर रखना" जैसी सुविधाएँ नहीं हैं।

SQL सर्वर सेवा को रोकने के लिए एक पुरानी चाल है। यह नए लॉगिन को रोक देगा, लेकिन जो कोई पहले से जुड़ा हुआ है वह हमेशा की तरह जारी रख सकता है। तो: SSMS विंडो के माध्यम से कनेक्ट करें ताकि आप काम कर सकें, फिर सेवा को रोकें, फिर अवांछनीय कनेक्शन को किक आउट करें, SSMS कमांड विंडो के माध्यम से अपनी बात करें (GUI नहीं, यह बहुत सारे कनेक्शन बनाता और तोड़ता है) और फिर un-pause सेवा। चेतावनी: मुझे यकीन नहीं है कि यह एक क्लस्टर पर कैसे चलेगा। यह विफल हो सकता है।

जब तक आप अपना काम पूरा नहीं कर लेते, तब तक सभी ऐप उपयोगकर्ताओं को सर्वर से बाहर रखना एक तरीका है। अन्यथा, कनेक्शन तब शुरू हो सकता है जब आप चीजों को करने की कोशिश कर रहे हैं, जिससे संसाधन विवाद और / या सुस्ती हो सकती है। मैंने पूर्व स्थिति में निम्न तरीकों का उपयोग किया है, सटीक स्थिति पर निर्भर करता है: ऐप सर्वर (नों) को बंद करना। अलार्म का उपयोग करें। SET RESTRICTED_USER (यदि ऐप खाते db_owner, sysadmin या dbcreator भूमिकाओं के सदस्य हैं, तो यह एक समस्या है। ) उपयोगकर्ताओं को यह बताना कि सिस्टम रविवार सुबह की तरह कुछ विशिष्ट समय पर ऑफ़लाइन होगा। (यह वास्तविक "24x7 पर्यावरण के लिए" में काम नहीं करेगा।) एनआईसी को अनप्लग करना जो ऐप सर्वर या उपयोगकर्ताओं का सामना करता है। (इस मामले में, मैं एक व्यवस्थापक-केवल नेटवर्क से जुड़े किसी अन्य एनआईसी के माध्यम से या आईएलओ के माध्यम से प्राप्त कर सकता हूं।)

बड़ी संख्या में डेटाबेस का पता लगाना और उन्हें फिर से तैयार करना बहुत काम हो सकता है। यदि आप ऐसा करते हैं, तो सुनिश्चित करें कि आपके पास समय के आगे लिखी गई आपकी "अटैचमेंट" स्क्रिप्ट है।

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

मेरी सबसे लगातार समस्या ACLs फ़ाइल निर्देशिकाओं पर सही नहीं हो रही थी। SQL सर्वर के अधिक आधुनिक संस्करण, बस उन अनुमतियों को सेट करने में बेहतर होते हैं जिनकी सेवा खाते की आवश्यकता होती है, जबकि पुराने संस्करण कम उधम मचाते हैं। यदि आप ACL सेट करना भूल जाते हैं, और सेवा खाता स्थानीय प्रशासक नहीं है (ऐसा नहीं है कि मैं इसकी सलाह दूंगा), उदाहरण शुरू होने पर एक या अधिक डेटाबेस नहीं खुल सकते। घबराओ मत, बस ACLs बदलो और डेटाबेस संलग्न करें।

मैं आमतौर पर इस तरह का काम करने के लिए ROBOCOPY का उपयोग करता हूं। ACL को संरक्षित करने के लिए एक कमांड लाइन स्विच है।

सीआरसी गणना / सत्यापन का उपयोग करना एक बुरा विचार नहीं है, लेकिन मैंने ऐसा कभी नहीं किया है। जब डेटाबेस वापस आते हैं, मैं उन सभी पर CHECKDB () चलाती हूं। मैं आमतौर पर समय से पहले इसके लिए एक स्क्रिप्ट तैयार करूंगा, बजाय रखरखाव के काम को मैन्युअल रूप से किक करने पर भरोसा करने के बजाय। इस तरह, मैं एक बड़े डेटाबेस की जाँच करने से पहले कुछ छोटे डेटाबेसों की जाँच कर सकता हूँ, जिन्हें चलाने में कई मिनट या घंटे लग सकते हैं। मुझे संदेह है कि सीआरसी चेक (या रेडगेट डेटा तुलना टूल) को कुछ ऐसा मिलेगा जो CHECKDB () को याद करेगा, और अगर यह SQL सर्वर इसे ठीक करने में सक्षम नहीं होगा।

मैं फ़ाइलों की प्रतिलिपि बनाने के बाद, लेकिन इससे पहले कि मैं इस उदाहरण को पुनः आरंभ करूं, मैं जाऊंगा और फ़ोल्डर में से किसी एक का नाम बदलकर OLD फ़ोल्डरों की फाइलपथ को थोड़ा बदल दूंगा। यह "उफ़ के खिलाफ एक अतिरिक्त जांच है, सर्वर अभी भी पुरानी फाइलों की ओर इशारा कर रहा है" समस्या।

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

मुझे लगता है कि मेरे द्वारा किए जाने के बाद इन पलायन के साथ सबसे खराब समस्याएं हुई हैं। यह होगा SAN व्यवस्थापक मुझे बता रहा है कि कुछ हुआ था और मेरी फ़ाइल सिस्टम तले हुए थे। (पुनर्नियोजित, सुधारित, फिर से कॉपी किया गया।)

एक और मजेदार समस्या है SAN बिना किसी स्पष्ट कारण के धीमा हो रहा है। अगर आपको लगता है कि आपके डेटा को कॉपी करने में 10 घंटे का समय लगेगा और आप घंटे नंबर 9 पर 30% कॉपी कर रहे हैं, तो आपको समस्या है। हस्तांतरण का समय देखें (रोबोकॉपी कॉपी की गई% दिखाती है और समय का अनुमान देती है, या आप पर्फोमन का उपयोग कर सकते हैं) और कुछ कम हो जाने पर फालबैक प्लान कर सकते हैं।

इसके अलावा, मुझे यकीन नहीं है कि आपके वॉल्यूम आपके लिए विभाजित किए जाएंगे, लेकिन आप यह सुनिश्चित करना चाहते हैं कि वे 1 एमबी ऑफसेट का उपयोग कर रहे हैं। विंडोज सर्वर 2008 और बेहतर पर, यह एक समस्या नहीं होनी चाहिए। पुराने OS पर, यह है। इस पर एक टन googlable सामान है, और आपके भंडारण के लोगों को इसके बारे में पता होना चाहिए, लेकिन मैं पूछता हूं।


2

पहले मैं डेटा को संभालने के लिए स्टोरेज ऐरे की सुविधा का उपयोग कर के विकल्प को देखूंगा। यदि वे उपलब्ध नहीं हैं क्योंकि विक्रेता इसका समर्थन नहीं करता है, तो आपने इसे खरीदा नहीं, या SAN व्यवस्थापक को यह पता नहीं है कि यह कैसे करना है ...

फिर मैं बस निम्नलिखित चरणों का उपयोग करूँगा।

  1. SQL सर्वर पर नया संग्रहण प्रस्तुत करें।
  2. SQL सेवाएँ बंद करें
  3. पुराने ड्राइव से नए ड्राइव के सभी डेटा को कॉपी करें (डकैती का उपयोग करते समय अनुमतियों को शामिल करना न भूलें)
  4. पुराने ड्राइव से ड्राइव अक्षर निकालें।
  5. पुराने ड्राइव अक्षरों से मिलान करने के लिए नए ड्राइव पर ड्राइव अक्षर बदलें
  6. SQL सेवाएँ प्रारंभ करें

बस।

जहाँ तक SQL सर्वर को पता नहीं है कि कुछ भी नहीं बदला है, कोई अलग / अटैचमेंट नहीं है। और अगर कुछ बुरी तरह से गलत होता है, तो आपको पुराने LUN पर पुराने डेटाबेस में बैठे डेटाबेस की पुरानी कॉपी मिल गई है। फेलिंग बैक केवल ड्राइव अक्षर को बदलने की बात है।

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