मैं डेटाबेस को लगभग लगातार स्थानांतरित करता था, 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 सामान है, और आपके भंडारण के लोगों को इसके बारे में पता होना चाहिए, लेकिन मैं पूछता हूं।