सवाल एसक्यूएल सर्वर डेटाबेस कॉपी करें


मैं डेटा और सेवा में न्यूनतम व्यवधान के साथ विभिन्न सर्वरों पर डेटाबेस को "स्थानांतरित" करना चाहता हूं। ये डेटाबेस 5 जीबी से 140 जीबी के आकार में भिन्न होते हैं।

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

मेरा सबसे बड़ा डर यह है कि इन डेटाबेस में बहुत से संग्रहित प्रोसेस, उपयोगकर्ता अनुमतियां और विभिन्न इंडेक्स हैं और मैं उन्हें खोना नहीं चाहता हूं और सेवा को बाधित नहीं करना चाहता हूं।

मेरा नवीनतम खरगोश विचार एक दर्पण स्थापित करना है, और फिर मैन्युअल फेलओवर शुरू करें। हालांकि, मैं कुछ ऐसा करने से पहले पूछूंगा जो मैंने पहले कभी नहीं किया था।

टीएल; डीआर एसक्यूएल सर्वर डेटाबेस को स्थानांतरित करने के कुछ सर्वोत्तम प्रथाओं के तरीके क्या हैं जो सेवा व्यवधान के खतरे को कम करते हैं।


6
2018-06-16 15:23


मूल


क्या एक ही एडी डोमेन या वन के भीतर स्रोत और लक्ष्य सर्वर हैं? यदि नहीं, तो जंगलों के बीच कोई भरोसा है? - mfinni
@mfinni हां, सर्वर एक ही एडी डोमेन पर हैं। वे अब से महीनों को अलग कर देंगे, लेकिन थोड़ी देर के लिए नहीं। - Black Dynamite
अच्छा भगवान, इसका करीबी वोट क्यों है? यह एक अच्छा सवाल है। - Falcon Momot


जवाब:


मेरे अनुभव में, अलग / संलग्न सबसे तेज़ तरीका है। बाधा शायद यह होगी कि आप नेटवर्क पर फ़ाइलों को कितनी जल्दी कॉपी कर सकते हैं।

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

@ECHO ON

set newipmdf=\\newserver\g$
set newipldf=\\newserver\e$
set controlfile=control.txt
set oldserver=oldserver\instance
set oldmdfpath=d:\instance
set newmdfpath=g:\instance
set copymdfpath="m:\instance"
set newserver=newserver\instance
set oldlogpath=e:\instance
set newlogpath=e:\instance
set copylogpath="l:\instance"
set movedmdfpath=%oldmdfpath%\moved
set movedldfpath=%oldlogpath%\moved

mkdir %movedmdfpath%
mkdir %movedldfpath%

net use m: %newipmdf%
net use l: %newipldf%

SETLOCAL DISABLEDELAYEDEXPANSION
FOR /F %%L IN (%controlfile%%) DO (
  SET "line=%%L"
  SETLOCAL ENABLEDELAYEDEXPANSION
  ECHO !line!
  sqlcmd -E -S!oldserver! -Q"EXEC master.dbo.sp_detach_db @dbname = N'!line!'"
  copy "!oldmdfpath!\!line!.mdf" !copymdfpath!
  copy "!oldlogpath!\!line!_log.ldf" !copylogpath!
  sqlcmd -E -S!newserver! -Q"CREATE DATABASE [!line!] ON ( FILENAME = '!newmdfpath!\!line!.mdf' ),( FILENAME = N'!newlogpath!\!line!_log.ldf' ) FOR ATTACH"
  move "!oldmdfpath!\!line!.mdf" !movedmdfpath!
  move "!oldlogpath!\!line!_log.ldf" !movedldfpath!
  ENDLOCAL
)
ENDLOCAL

net use m: /z
net use l: /z

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

सौभाग्य!


3
2018-06-17 22:12



वाह, मुझे वह स्क्रिप्ट पसंद है। मैं अक्सर अलग / स्थानांतरित / संलग्न नहीं करता हूं, लेकिन जब मैं करता हूं तो मैं इसे इस स्क्रिप्ट के साथ करने जा रहा हूं। - Mark Henderson♦
यदि लक्ष्य कम से कम व्यवधान है, निश्चित रूप से एक अलग / दोबारा पूरा करने वाला नहीं है? नुकसान का क्या नुकसान है (डीबी पूर्ण रिकवरी मोड में है) नए सर्वर पर नवीनतम पूर्ण बैकअप को बहाल करना और फिर डेटाबेस को अद्यतित करना, टी-लॉग बैकअप के साथ अद्यतित करना, आखिरकार पहुंच को काटने और फाइनल / रीस्टोर करने से पहले टी-लॉग बैकअप? वास्तव में यहां पर उत्सुकता! - Chris McKeown
निश्चित रूप से, वह लॉग शिपिंग कर सकता है और फिर इसे ऑनलाइन ला सकता है, उदाहरण के लिए। यह उन डेटाबेसों की संख्या पर निर्भर करता है जिन्हें उन्हें स्थानांतरित करने के लिए कहा जा रहा है। मुझे कई सौ स्थानांतरित करने के लिए कहा जा रहा था। : डी मैं भी गलत तरीके से मान रहा था कि ओपी के पास एक जोड़े से अधिक था। हो सकता है मै गलत हूँ। - Katherine Villyard
आह, मैं मान रहा था कि उसके पास केवल कुछ मुट्ठी भर डीबी थीं। इससे अधिक होने के कारण निश्चित रूप से लक्ष्यपोस्ट कुछ हद तक चले जाएंगे - मुझे स्वीकार करना होगा कि मैंने उस स्थिति पर भी विचार नहीं किया था! - Chris McKeown
@ कैथरीन विलार्ड धन्यवाद कैथरीन। लंबी कहानी छोटी है, हम किसी की मदद करने के लिए किराए पर ले रहे हैं। लेकिन मैं इसे अपने टेस्ट डेटाबेस से आजमाउंगा क्योंकि मैं जानना चाहता हूं कि इसे कैसे करना है। और हमारे पास दो डीबीएस से अधिक है, हमारे पास 93 में से सभी को स्थानांतरित किया जाना है। - Black Dynamite