SQL सर्वर सैंडबॉक्स


9

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

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

स्पष्टता के लिए, हम अनिवार्य रूप से अपने डेटाबेस के साथ ऐसा करना चाहते हैं: http://try.discourse.org/t/this-site-is-a-sandbox-it-is-reset-every-day/57 । केवल अंतर यह है कि हम हर दिन अपने उपयोगकर्ताओं को फिर से बनाना नहीं चाहते हैं।

संस्करण: SQL सर्वर 2008
संस्करण: डेवलपर और एंटरप्राइज़

जवाबों:


8

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

सर्वर 1 पर:

BACKUP DATABASE db TO DISK = '\\someshare\file.bak' 
  WITH COPY_ONLY, INIT, COMPRESSION;

सर्वर 2 पर:

RESTORE DATABASE db_dev FROM DISK = '\\someshare\file.bak'
  WITH REPLACE, RECOVERY;

MOVEयदि सर्वर के बीच डिस्क लेआउट अलग है (या यदि आप उसी सर्वर पर कॉपी डाल रहे हैं) तो आपको कमांड जोड़ने की भी आवश्यकता हो सकती है ।

RESTORE DATABASE db_dev FROM DISK = '\\someshare\file.bak'
  WITH REPLACE, RECOVERY,
  MOVE 'data_file_name' TO 'D:\somepath\somefile.mdf',
  MOVE 'log_file_name'  TO 'E:\somepath\somefile.ldf';

यदि आप एक ही सर्वर पर पुनर्स्थापित कर रहे हैं, तो आपको उपयोगकर्ताओं के साथ कोई समस्या नहीं होनी चाहिए। यदि आप किसी भिन्न सर्वर पर पुनर्स्थापित करते हैं, तो आपके उपयोगकर्ता मौजूद रहेंगे, लेकिन सर्वर-स्तरीय लॉगिन नहीं हो सकता है। इसे ठीक करने के लिए स्क्रिप्ट्स हैं , और SQL Server 2012 में एक नई सुविधा ( निहित डेटाबेस ) जो समस्या को पूरी तरह से समाप्त करती है।


हमारे पास देव / ठेस है लेकिन देव एकमात्र सर्वर है जिसमें यह हो रहा है। उत्पाद केवल तैयार-तैयार प्रक्रियाओं के लिए है।
कित्त््सो ०२४

यह वह उपाय है जिसे मैं चुनूंगा, बस कृपया ध्यान रखें कि ज्यादातर मामलों में आप उत्पादन को देव वातावरण में कॉपी नहीं करना चाहते हैं। कृपया एक माप (स्क्रिप्ट?) जगह पर रखें, जो, उदाहरण के लिए, उपयोगकर्ताओं को ईमेल पते, संपर्क विवरण आदि को हटाएगा या अस्पष्ट करेगा, आप नहीं चाहते कि आपके देवता गलती से उपयोगकर्ताओं को ईमेल भेजना शुरू कर दें।
जीरोडिविजुअल

5

चूंकि आपके पास एंटरप्राइज़ संस्करण इंजन के साथ एक उदाहरण है, इसलिए मैं डेटाबेस स्नैपशॉट का उपयोग करूंगा ।

यह आपको पूरे डेटाबेस को पुनर्स्थापित किए बिना, दिन के दौरान किए गए किसी भी परिवर्तन को जल्दी और आसानी से वापस करने की अनुमति देगा।

ध्यान दें कि यदि डेवलपर्स बड़े डेटा लोड करने की योजना बना रहे हैं (लगता है जैसे वे नहीं हैं?), तो यह उचित नहीं हो सकता है।


यदि वे बड़े डेटा लोड कर रहे थे तो यह उचित क्यों नहीं होगा? हमारा कहना है कि लोड हो सकता है .... 100 कॉलम की 8 मिलियन पंक्तियों को हर बार और फिर (भले ही वे "नहीं" होना चाहिए) लेकिन हम जरूरी नहीं कि उन्हें ऐसा करने से रोकना चाहते हैं। हम सभी वास्तव में इस बात की परवाह करते हैं कि दिन के अंत में सबकुछ ठीक हो जाए।
किट्टोस ०१४२

2
@ किट्स क्योंकि स्रोत डेटा में परिवर्तन होने पर एक स्नैपशॉट बनाए रखना पड़ता है। स्रोत से मौजूदा पृष्ठों को खींचने की जरूरत है यदि स्रोत बदल जाता है, ताकि यह "पहले" दृश्य को बनाए रखे। यह ऐसा नहीं करता है जब तक कि स्रोत डेटा नहीं बदलता (स्नैपशॉट स्पार्ट फ़ाइल का उपयोग करता है जो डेल्टास को छोड़कर खाली है)। यह रखरखाव काफी महंगा हो सकता है। देखें कि डेटाबेस स्नैपशॉट कैसे काम करता है
हारून बर्ट्रेंड

@AaronBertrand ठीक है, इसलिए यदि डेटाबेस एक दिन के दौरान 8GB तक बढ़ता है तो जब स्नैपशॉट को बहाल किया जाता है तो सभी नए डेटा हटा दिए जाएंगे लेकिन डेटाबेस अभी भी आकार में 8GB होगा? या मैं गलत समझ रहा हूँ?
कित्त््सो ०२४

@ किट एक स्नैपशॉट केवल-पढ़ने के लिए है, इसलिए आप केवल नए डेटा को स्रोत डेटाबेस में लोड करने में सक्षम होंगे। यदि आप दिन में 8GB जोड़ते हैं, तो यह स्नैपशॉट को दिखाई नहीं देगा। जब आप स्नैपशॉट को वापस करते / छोड़ते हैं, तो स्रोत डेटाबेस में अभी भी 8GB डेटा होगा और तदनुसार आकार होगा। यदि आप दूसरा स्नैपशॉट लेते हैं, तो नया डेटा दिखाई देगा। यदि आप दिन के दौरान 8GB निकालते हैं, तो इसे स्नैपशॉट में जोड़ा जाएगा ।
हारून बर्ट्रेंड

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

0

मुझे मेरे कुछ सेंट जोड़ने के लिए देखें कि क्या यह आपकी मदद करता है:

मेरी कंपनी में हम एक ही स्थिति में हैं कि हर रात डेवलपर्स उन डेटाबेस को ताज़ा करना चाहते हैं जो वे दिन के माध्यम से उपयोग कर रहे हैं। इसका मतलब है कि हमारे पास डेटाबेस का एक सेट है जिसे देव स्पर्श नहीं करते हैं - और डेटाबेस का एक और सेट कहते हैं जो सटीक कॉपी ए हैं लेकिन वे अपना सामान करते हैं लेकिन हर रात को ताज़ा करना चाहते हैं - बी कहते हैं । यह 1 सिंगल सर्वर इंस्टेंस पर होता है।

जो मैंने कार्यान्वित किया है, वह इसे प्राप्त करने के लिए एक उचित प्रक्रिया है। नीचे यह है कि यह कैसे काम करता है:

डेटाबेस की सूची के साथ एक ड्राइवर तालिका बनाएं जिसे हर शाम को पुनर्स्थापित करने की आवश्यकता होती है (जैसा कि आपने उल्लेख किया है)।

तालिका: nightly_restore (OriginalDB, RestoreDB, backuplocation, enable_YN, Results, PASS_FAIL)

फिर आप कुछ TSQL लिख सकते हैं जो उपरोक्त तालिका से डेटाबेस की सूची के माध्यम से लूप करेंगे और फिर रिस्टोर करेंगे और परिणाम में किसी भी सफलता या असफलता को लॉग इन करेंगे और 1 = पास या 0 = विफलता। Enabled_YN यह निर्धारित करेगा कि डेटाबेस को पुनर्स्थापित करने की आवश्यकता है या नहीं।

अगर भविष्य में और डेटाबेस जोड़े जाएंगे, तो आपको बस उन तालिकाओं को सम्मिलित करना होगा और enable_YN bit को Y (सक्षम) में सेट करना होगा।

इस तरह यह प्रक्रिया अधिक लचीली और प्रबंधनीय होगी।

यदि आप चाहते हैं कि एसक्यूएल जो मैंने लिखा है (मुझे यकीन है, आप इसे लिखने में सक्षम होंगे :-)), बस मुझे पिंग करें या एक टिप्पणी जोड़ें और मैं इसे साझा करूंगा।

HTH

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