2010-01-11 14 views
72

गूंगा प्रश्न - एक ऐसे वातावरण में उदाहरणों की प्रतिलिपि बनाने का सबसे अच्छा तरीका क्या है जहां मैं एक उत्पादन सर्वर से उदाहरण सर्वर के साथ एक विकास सर्वर को रीफ्रेश करना चाहता हूं?डेटाबेस की प्रतिलिपि बनाने का सर्वोत्तम तरीका (SQL सर्वर 2008)

मेरे द्वारा की गई बैकअप-बहाल है, लेकिन मैंने सुना है अलग-प्रति-देते और एक पुरुष भी वह सिर्फ फ़ाइल सिस्टम के बीच डाटा फाइल्स कॉपी हैं मुझे बताया था ....

हैं इन तीन (या दो, आखिरी व्यक्ति संदिग्ध लगता है) स्वीकार किए गए तरीकों?

मेरी समझ यह है कि दूसरी विधि तेज है लेकिन अलग-अलग पहलू के कारण स्रोत पर डाउनटाइम की आवश्यकता है।

इसके अलावा, इस स्थिति में (एक dev सर्वर पर उत्पादन की एक सटीक प्रतिलिपि चाहते हैं) लॉग इन स्थानांतरित करने के लिए स्वीकार्य अभ्यास क्या है? क्या मुझे बस बैकअप और उपयोगकर्ता डेटाबेस + मास्टर + एमएसडीबी बहाल करना चाहिए?

उत्तर

32

डेटाबेस की प्रतिलिपि बनाने का सबसे तेज़ तरीका अलग-अलग-प्रति-संलग्न विधि है, लेकिन प्रॉड डीबी को अलग होने पर उत्पादन उपयोगकर्ताओं के पास डेटाबेस पहुंच नहीं होगी। आप ऐसा कुछ कर सकते हैं यदि आपका उत्पादन डीबी उदाहरण के लिए एक बिक्री प्रणाली है जो रात के दौरान कोई भी उपयोग नहीं करता है।

यदि आप उत्पादन डीबी को अलग नहीं कर सकते हैं तो आपको बैकअप और पुनर्स्थापित करना चाहिए।

यदि वे नए उदाहरण में नहीं हैं तो आपको लॉग इन बनाना होगा। मैं आपको सिस्टम डेटाबेस की प्रतिलिपि बनाने की सलाह नहीं देता हूं।

आप जिस SQL ​​लॉग इन को चाहते हैं उसे बनाने वाली स्क्रिप्ट बनाने के लिए आप SQL सर्वर प्रबंधन स्टूडियो का उपयोग कर सकते हैं। लॉगिन करने के लिए आपको जिस लॉगिन की आवश्यकता है उसे राइट क्लिक करें और स्क्रिप्ट लॉगिन के रूप में चुनें/बनाएं।

हो जाएगा ताकि अनाथ उपयोगकर्ताओं को सूचीबद्ध:

EXEC sp_change_users_login 'Report' 

आप पहले से ही, इससे उपयोगकर्ता को लॉगिन आईडी और पासवर्ड करके इसे ठीक हैं:

EXEC sp_change_users_login 'Auto_Fix', 'user' 

आप एक नया बनाना चाहते हैं इस उपयोगकर्ता के लिए लॉगिन आईडी और पासवर्ड, इसे करके ठीक करें:

EXEC sp_change_users_login 'Auto_Fix', 'user', 'login', 'password' 
+2

यह भी देखें [यह प्रश्न] (http://stackoverflow.com/questions/1360529/how-do-you-backup-and-restore-a-डेटा-as-a-copy-on-the- एक ही नाम पर पुनर्स्थापित करने के लिए) एक ही सर्वर)। – John

+0

@MGOwen, बैकअप लेने और 500gb डेटाबेस को एकाधिक फ़ाइल समूह बनाम अलग करने और संलग्न करने के साथ पुनर्स्थापित करने का प्रयास करें। कौन सा तेज़ है? –

+2

@ जोस आप सही हैं, बड़े डेटाबेस के लिए प्रतिलिपि केवल बैकअप से कम समय लगता है। लेकिन प्रतिलिपि केवल बैकअप ** उत्पादन डेटाबेस को ** नीचे नहीं लेता है, और यह आमतौर पर गति को गति देने जा रहा है। – MGOwen

6

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

आप भी ऐसा करने के लिए संग्रहीत proc sp_help_revlogin के प्रयोग पर MS KB article की जाँच सिंक में अपनी प्रवेश के रखना सुनिश्चित बनाना चाहते हैं।

0

यदि आप लाइव डेटाबेस की प्रतिलिपि लेना चाहते हैं, तो बैकअप/पुनर्स्थापना विधि करें।

[SQLS2000 में, 2008 के बारे में निश्चित नहीं है:] बस ध्यान रखें कि यदि आप इस डेटाबेस में SQL सर्वर खातों का उपयोग कर रहे हैं, तो Windows खातों के विपरीत, यदि मास्टर डीबी विकास सर्वर पर अलग या सिंक से बाहर है , जब आप पुनर्स्थापना करते हैं तो उपयोगकर्ता खाते अनुवाद नहीं करेंगे। मैंने उन्हें एक एसपी के बारे में सुना है, लेकिन मुझे याद नहीं है कि यह कौन सा था।

1

मैं तालिका को एसआरओ चलाने के लिए एक एसपी चलाता हूं और उसके बाद मेरे विकास बॉक्स पर सबसे हालिया उत्पादन तालिका आयात करने के लिए एक डीटीएस पैकेज का उपयोग करें। फिर मैं घर जाता हूं और अगली सुबह वापस आ जाता हूं। यह सुरुचिपूर्ण नहीं है; लेकिन यह मेरे लिए काम कर गया।

13

अद्यतन:
नीचे मेरी सलाह आपको बताता है कि कैसे स्क्रिप्ट एक DB एसक्यूएल सर्वर प्रबंधन स्टूडियो का उपयोग कर, लेकिन डिफ़ॉल्ट के लिए एक डाटाबेस के महत्वपूर्ण भागों के सभी प्रकार के बाहर याद आती है SSMS में सेटिंग्स के लिए (अनुक्रमित और ट्रिगर की तरह!) कुछ कारण। इसलिए, मैंने अपना खुद का प्रोग्राम डेटाबेस को सही तरीके से स्क्रिप्ट करने के लिए बनाया है जिसमें आपके द्वारा जोड़े गए हर प्रकार के डीबी ऑब्जेक्ट शामिल हैं। मैं इसके बजाय इसका उपयोग करने की सलाह देते हैं। यह एसक्यूएल सर्वर scripter के कहा जाता है और यह यहां पाया जा सकता:
https://bitbucket.org/jez9999/sqlserverscripter


मैं हैरान कोई इस उल्लेख किया है कर रहा हूँ, क्योंकि यह वास्तव में उपयोगी है: यदि आप एक डेटाबेस बाहर डंप कर सकते हैं (अपने स्कीमा और डेटा) एसक्यूएल सर्वर प्रबंधन स्टूडियो का उपयोग कर, एक स्क्रिप्ट के लिए।

डेटाबेस पर राइट-क्लिक करें, "कार्य | स्क्रिप्ट बनाएं ..." चुनें, और फिर विशिष्ट डेटाबेस ऑब्जेक्ट्स स्क्रिप्ट करने के लिए चुनें। उन लोगों का चयन करें जिन्हें आप प्रतिलिपि बनाना चाहते हैं नए डीबी (आप शायद कम से कम टेबल्स और स्कीमा का चयन करना चाहते हैं)। फिर, "स्क्रिप्टिंग विकल्प सेट करें" स्क्रीन के लिए, "उन्नत" पर क्लिक करें, "स्क्रिप्ट के लिए डेटा के प्रकार" पर स्क्रॉल करें और "स्कीमा और डेटा" चुनें। ठीक क्लिक करें, और स्क्रिप्ट उत्पन्न करना समाप्त करें। आप देखेंगे कि इसने अब आपके लिए एक लंबी लिपि जेनरेट की है जो डेटाबेस की टेबल और बनाता है जिसमें डेटा शामिल है! फिर आप एक नया डेटाबेस बना सकते हैं, और नए डेटाबेस के नाम को प्रतिबिंबित करने के लिए स्क्रिप्ट के शीर्ष पर USE [DbName] कथन बदल सकते हैं, जिसे आप पुराने को कॉपी करना चाहते हैं। स्क्रिप्ट चलाएं और पुराने डेटाबेस की स्कीमा और डेटा की प्रतिलिपि बनाई जाएगी!

यह आपको SQL सर्वर प्रबंधन स्टूडियो के भीतर से पूरी चीज़ करने की अनुमति देता है, और फ़ाइल सिस्टम को स्पर्श करने की कोई आवश्यकता नहीं है।

+0

बिटबकेट - आपके पास इस संग्रह की पहुंच नहीं है। वापस पाने के लिए शीर्ष पर दिए गए लिंक का उपयोग करें। –

+2

@ टॉमस्टिकेल ओप्स - बस इसे सार्वजनिक बना दिया। :-) – Jez

+1

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

5

अलग/प्रतिलिपि/संलग्नक विधि डेटाबेस को नीचे ले जाएगी। यह ऐसा कुछ नहीं है जिसे आप उत्पादन में चाहते हैं।

बैकअप/पुनर्स्थापना केवल तभी काम करेगी जब आपके पास उत्पादन सर्वर को लिखने की अनुमति हो। मैं अमेज़ॅन आरडीएस के साथ काम करता हूं और मैं नहीं करता हूं।

आयात/निर्यात विधि वास्तव में विदेशी कुंजी की वजह से काम नहीं करती है - जब तक कि आप एक दूसरे के संदर्भ में एक-एक करके तालिकाएं नहीं करते हैं। आप एक नए डेटाबेस में एक आयात/निर्यात कर सकते हैं। वह सभी तालिकाओं और डेटा की प्रतिलिपि बनाएगा, लेकिन विदेशी कुंजी नहीं।

यह एक सामान्य ऑपरेशन की तरह लगता है जिसे डेटाबेस के साथ करने की आवश्यकता है। SQL सर्वर यह ठीक से क्यों नहीं है? हर बार मुझे यह करना था निराशाजनक था।

कहा जा रहा है कि, केवल दर्द रहित समाधान मैंने सामना किया है Sql Azure Migration Tool जो समुदाय द्वारा बनाए रखा गया है। यह एसक्यूएल सर्वर के साथ भी काम करता है।

37

सबसे आसान तरीका वास्तव में एक स्क्रिप्ट है।

भागो इस उत्पादन पर:

USE MASTER; 

BACKUP DATABASE [MyDatabase] 
TO DISK = 'C:\temp\MyDatabase1.bak' -- some writeable folder. 
WITH COPY_ONLY 

यह एक आदेश एक एकल फाइल पर डेटाबेस की एक पूरी बैकअप प्रतिलिपि बनाता है, उत्पादन उपलब्धता या बैकअप अनुसूची, आदि के साथ हस्तक्षेप किए बिना

पुनर्स्थापित करने के लिए, बस अपने देव या परीक्षण एसक्यूएल सर्वर पर इस चलाएँ:

USE MASTER; 

RESTORE DATABASE [MyDatabase] 
FROM DISK = 'C:\temp\MyDatabase1.bak' 
WITH 
MOVE 'MyDatabase' TO 'C:\Sql\MyDatabase.mdf', -- or wherever these live on target 
MOVE 'MyDatabase_log' TO 'C:\Sql\MyDatabase_log.ldf', 
REPLACE, RECOVERY 

फिर प्रत्येक सर्वर पर इन लिपियों को बचाने के। एक-क्लिक सुविधा।

संपादित करें:
यदि आपको एक त्रुटि जब बहाल कि तार्किक नाम मेल नहीं खाते, तो आप इस तरह से उन्हें प्राप्त कर सकते हैं:

RESTORE FILELISTONLY 
FROM disk = 'C:\temp\MyDatabaseName1.bak' 

आप SQL सर्वर लॉगिन (नहीं खिड़कियों प्रमाणीकरण का उपयोग करते हैं) आप देव/परीक्षण मशीन पर हर बार (बहाल करने के बाद इस चला सकते हैं):

use MyDatabaseName; 
sp_change_users_login 'Auto_Fix', 'userloginname', null, 'userpassword'; 
+3

प्लस 1 COPY_ONLY ध्वज के लिए, जो बैकअप रणनीति – Muflix

0

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

8

नीचे क्या मैं अपने स्थानीय env के उत्पादन env से एक डेटाबेस नकल करने के लिए क्या है: -> कार्य -

  1. अपने स्थानीय एसक्यूएल सर्वर
  2. में एक खाली डेटाबेस बनाना सही नए डेटाबेस पर क्लिक करें> आयात डेटा
  3. SQL सर्वर आयात और निर्यात विज़ार्ड में, उत्पाद स्रोत के रूप में उत्पाद env के servername का चयन करें। और गंतव्य डेटा के रूप में अपना नया डेटाबेस चुनें।
+1

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