एकीकरण परीक्षण के लिए SQL सर्वर डेटाबेस स्नैपशॉट


14

मैं हमारे एकीकरण परीक्षण के लिए एक परीक्षण डेटाबेस (SQL सर्वर में) के साथ काम करने के तरीके को परिभाषित करने की कोशिश कर रहा हूं।

मेरा विचार एकीकरण परीक्षण विधानसभा के शुभारंभ पर ये कदम उठाने का था:

  • एक पूरी तरह से खाली डेटाबेस बनाएँ
  • सभी संबंधित डेटाबेस ऑब्जेक्ट्स (तालिका, विचार, क्रम आदि) बनाने के लिए "डेटाबेस ऑब्जेक्ट बनाएँ" स्क्रिप्ट चलाएं।
  • "आधार डेटा" (लुकअप मान आदि) भरें
  • (db)_Basisभविष्य के एकीकरण परीक्षणों के लिए "आधार रेखा" के रूप में कहा जाने वाला डेटाबेस स्नैपशॉट लें

अब हर परीक्षण वर्ग (1-एन परीक्षण युक्त) से पहले, मैं डेटाबेस के अच्छी तरह से परिभाषित, कम या ज्यादा "खाली" स्थिति में वापस आने के लिए बस "स्नैपशॉट से पुनर्स्थापित" करने की योजना बना रहा था। अब तक आकर्षण की तरह काम करता है।

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

  • (db)_Basisस्नैपशॉट से डेटाबेस को पुनर्स्थापित करें
  • डेटाबेस में डेटा की उन 50'000 + पंक्तियों को डालें
  • एक और स्नैपशॉट (db)_With_Testdataस्नैपशॉट बनाएँ

और फिर प्रत्येक परीक्षण के लिए, डेटाबेस को अच्छी तरह से परिभाषित (db)_With_Testdataस्नैपशॉट संस्करण में रीसेट करें , परीक्षण चलाएं, परिणाम को सत्यापित करें और इसके बाद।

परेशानी यह है: मैं एक ही समय में दो db स्नैपशॉट नहीं देख सकता - एक बार जब मैं करता हूं, तो मैं अपने डेटाबेस को दोनों में से किसी को भी पुनर्स्थापित नहीं कर सकता .... मुझे यह त्रुटि मिलती रहती है:

एमएसजी 3137, लेवल 16, स्टेट 4, लाइन 9
डेटाबेस को वापस नहीं लाया जा सकता है। या तो प्राथमिक या स्नैपशॉट नाम अनुचित रूप से निर्दिष्ट हैं, अन्य सभी स्नैपशॉट को नहीं छोड़ा गया है, या लापता फाइलें हैं।

Msg 3013, लेवल 16, स्टेट 1, लाइन 9
RESTORE DATABASE असामान्य रूप से समाप्त हो रहा है।

क्या सच में SQL Server डेटाबेस स्नैपशॉट काम करता है ?? लगता है कि बहुत ही सीमित है ..... अगर मैं सीधे मूल ("db) _Basis" स्नैपशॉट पर वापस नहीं जा सकता तो मुझे समझ में आएगा - लेकिन सिर्फ इसलिए कि मेरे पास अब दो स्नैपशॉट हैं, मैं सबसे हाल ही में वापस नहीं जा सकता ?!?!?


सम्मिलित 50,000 पंक्तियों को कितना समय लगता है ? क्या आप इसके बजाय फिर से आवेदन कर सकते हैं?
RBarryYoung

जवाबों:


12

दुर्भाग्य से, यह डिजाइन द्वारा है।

BOL पृष्ठ से लिया गया " एक डेटाबेस को डेटाबेस स्नैपशॉट पर वापस लाएँ ":

सीमाएँ और प्रतिबंध

निम्नलिखित परिस्थितियों में पुन: वितरण असमर्थित है:

  • डेटाबेस में वर्तमान में केवल एक डेटाबेस स्नैपशॉट होना चाहिए , जिसमें आप वापस लौटने की योजना बनाते हैं।
  • डेटाबेस में कोई भी रीड-ओनली या कंप्रेस्ड फाइलग्रुप मौजूद है।
  • कोई भी फाइल अब ऑफलाइन है लेकिन स्नैपशॉट बनने पर ऑनलाइन थी

एक विकल्प के रूप में, आप पहले स्नैपशॉट को छोड़ सकते हैं (db)_Basis। मैं समझ सकता हूं कि यह बहुत सीमित लगता है, लेकिन इसे इस तरह से देखें: स्नैपशॉट मूल डेटा फ़ाइलों के आधार पर विरल फाइलें हैं, इसलिए एक विशिष्ट स्नैपशॉट पर वापस लौटना वैसे भी सभी स्नैपशॉट को अमान्य कर देगा (आधार डेटा फ़ाइलों को रिवर्ट ऑपरेशन द्वारा बदल दिया जाएगा) । सीमा कष्टप्रद हो सकती है, लेकिन अनुचित नहीं लगती है।


4

एक और परिप्रेक्ष्य बैकअप लेना और उन्हें पुनर्स्थापित करना होगा - चूंकि आप केवल कुछ लुकअप मानों के साथ खाली डेटाबेस और स्कीमा बना रहे हैं।

इसके अलावा, सिर्फ 50K पंक्तियों को सम्मिलित करते हुए, डेटाबेस उतना बड़ा नहीं होगा। यदि आप संपीड़न का उपयोग करते हैं तो बैकअप आकार कम होगा।

आपके पास TSQL एजेंट की नौकरियां या बस स्क्रिप्ट हो सकती हैं (हो सकता है कि आप संग्रहीत कार्यविधि बना सकते हैं और बस इसे आउटपुट के आधार पर आपके परीक्षणों के बाद कॉल कर सकते हैं)।

  • आधार बैकअप - (db)_Basis
  • टेस्टडेटा बैकअप के साथ - (db)_With_Testdata

अपनी एकीकरण स्क्रिप्ट चलाएं और अंतिम आउटपुट के आधार पर, आप उपरोक्त नौकरियों में से किसी को भी कभी भी अपनी पसंद के अनुसार वापस चला सकते हैं।

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

जब आप डेटाबेस स्नैपशॉट पर वापस लौटते हैं, तो स्रोत डेटाबेस के लेन-देन लॉग फ़ाइल को बाहर निकाल दिया जाता है और 0.5MB लॉग फ़ाइल को दो 0.25MB VLF के साथ बदल दिया जाता है।


हां, हम बैकअप / रिस्टोर का उपयोग कर रहे हैं - लेकिन यह 5-7 सेकंड की सीमा में है, जबकि डेटाबेस स्नैपशॉट से पुनर्स्थापित करना 1 सेकंड से नीचे है - यही कारण है कि हम बैकअप / रिस्टोर का विकल्प तलाश रहे हैं
marc_s

@marc_s मेरे लिए एक 5-7 सेकंड सीमा और बग के बिना स्वीकार्य है। सीमाओं और संभावित बगों के साथ 1 सेकंड बनाम :-)
किन शाह

हमारे लिए, यह स्वीकार्य नहीं है - हम एक तेज समाधान की तलाश में हैं
marc_s

@marc_s मुझे आपकी बात स्वीकार्य नहीं लगती। लेकिन आप पहले से ही डिजाइन द्वारा सीमाएं मार रहे हैं। आप केवल 1 स्नैपशॉट का उपयोग कर सकते हैं लेकिन फिर भी वापस लौटने के लिए बैकअप की आवश्यकता होती है। चॉइस आपकी है - अपने टेस्टडेटा के साथ एकल स्नैपशॉट का उपयोग करें और आधार डेटा को पुनर्स्थापित करने के लिए बैकअप का उपयोग करें।
परिजन शाह
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.