2009-12-02 7 views
5

मैं एक SQL सर्वर 2005 वातावरण में लॉग शिपिंग का उपयोग कर रहा हूँ। विचार एक माध्यमिक सर्वर पर लगातार लॉग शिपिंग स्थापित करना था। इरादा: रिपोर्ट क्वेरी की सेवा के लिए द्वितीयक सर्वर का उपयोग करें, जिससे प्राथमिक डीबी सर्वर ऑफलोडिंग हो।क्या लॉगिंग परिदृश्य में केवल माध्यमिक सर्वर केवल पढ़ने के लिए उपलब्ध है?

मैं एक sqlservercentral forum thread पर इस में आए:

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

तो मेरी प्रश्न हैं:

  • ऊपर सच है? क्या आप वास्तव में जिस तरह से इरादा रखते हैं उसमें लॉग शिपिंग का उपयोग नहीं कर सकते?
  • यदि यह सत्य है, तो क्या कोई यह बता सकता है कि लेनदेन लॉग को पुनर्स्थापित करने के दौरान आप डेटाबेस में SELECT स्टेटमेंट निष्पादित क्यों नहीं कर सकते?

संपादित करें:

पहला सवाल this serverfault question का डुप्लिकेट है। लेकिन मुझे अभी भी दूसरे प्रश्न का उत्तर देना होगा: लेनदेन लॉग बहाल होने पर SELECT स्टेटमेंट निष्पादित करना क्यों संभव नहीं है?

उत्तर

7

कोई समझा सकता है तुम क्यों नहीं एक डेटाबेस के लिए SELECT स्टेटमेंट्स निष्पादित कर सकते हैं, जबकि लेनदेन लॉग बहाल किया जा रहा है?

संक्षिप्त उत्तर यह है कि RESTORE कथन डेटाबेस को पुनर्स्थापित करने पर एक विशेष लॉक लेता है।

लिखने के लिए, मुझे आशा है कि मुझे यह बताने की कोई आवश्यकता नहीं है कि वे पुनर्स्थापना के साथ असंगत क्यों हैं। यह या तो पढ़ने की इजाजत क्यों नहीं देता है? सबसे पहले, यह जानने का कोई तरीका नहीं है कि डेटाबेस पर लॉक होने वाला सत्र पढ़ने या लिखने जा रहा है या नहीं। लेकिन अगर यह संभव हो, तो पुनर्स्थापित करें (लॉग या बैकअप) एक ऑपरेशन है जो सीधे डेटाबेस में डेटा पेज अपडेट करता है। चूंकि ये अद्यतन सीधे भौतिक स्थान (पृष्ठ) पर जाते हैं और तार्किक पदानुक्रम (मेटाडाटा-विभाजन-पृष्ठ-पंक्ति) का पालन नहीं करते हैं, इसलिए वे अन्य डेटा पाठकों से संभावित इरादे ताले का सम्मान नहीं करेंगे, और इस प्रकार संरचनाओं को बदलने की संभावना है क्योंकि वे पढ़ रहे हैं। पृष्ठ के बाद एक चयन तालिका स्कैन अगली-पॉइंट पॉइंटर्स को अव्यवस्था में फेंक दिया जाएगा, जिसके परिणामस्वरूप दूषित पढ़ा जाएगा।

2

हाँ यह सच है।

मुझे लगता है कि निम्नलिखित होता है:
जबकि लेनदेन लॉग बहाल किया जा रहा है, डेटाबेस लॉक हो गया है, क्योंकि इसके बड़े हिस्से अपडेट किए जा रहे हैं।
यह प्रदर्शन के कारणों के लिए और कुछ और है।

  1. उपयोग डेटाबेस मिररिंग:

    मैं दो विकल्प देख सकते हैं।

  2. केवल लॉग शिपिंग को शेड्यूल करें जब रिपोर्टिंग सिस्टम उपयोग में नहीं है।
+1

डाटाबेस लॉक होने का कारण डेटाबेस डेटा की स्थिरता को लागू करने के लिए है। –

+1

निश्चित रूप से एक डीबी लॉक ओवरकिल है? अगर स्थिरता मुद्दा था? सामान्य लॉकिंग लागू हो सकता है? या लॉकिंग बढ़ती है जैसे पुनर्स्थापना होती है, जब तक कि संपूर्ण डीबी लॉक न हो जाए? – Bravax

+0

@ जॉन संसॉम: लेकिन जब माध्यमिक डीबी केवल पढ़ने के लिए होता है (केवल चयन, कोई INSERT या अद्यतन)। फिर स्थिरता कारण दूर चला जाता है, है ना? – codeape

7

ठीक है हाँ और नहीं।

आप वही कर सकते हैं जो आप करना चाहते हैं, जिसमें आप डेटाबेस शिपिंग को पढ़ने के लिए लॉग शिपिंग को कॉन्फ़िगर करके माध्यमिक सर्वर पर रिपोर्टिंग वर्कलोड को ऑफ़लोड कर सकते हैं। मैंने इस तरह के आर्किटेक्चर को कई मौकों पर पहले सेट किया है और यह वास्तव में बहुत अच्छा काम करता है।

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

आपकी बहाली आवृत्ति पर निर्भर यह आवश्यक रूप से एक समस्या नहीं है। आप बस अपने उपयोगकर्ताओं को इस तथ्य के लिए शिक्षित करते हैं कि, हर घंटे 10 घंटे के हर घंटे कहें, आपकी संभावना असफल हो सकती है। यदि ऐसा होता है तो रिपोर्ट को फिर से चलाएं।

संपादित करें: आप अपने व्यापार की आवश्यकता के लिए वैकल्पिक आर्किटेक्चर समाधान का मूल्यांकन भी कर सकते हैं। उदाहरण के लिए, एक डाटाबेस स्नैपशॉट के साथ लेनदेन प्रतिकृति या डाटाबेस मिररिंग

0

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

यदि आप जहाज को लॉग इन नहीं करना चाहते हैं/नुकसान हैं तो आप एक तरफ लेनदेन प्रतिकृति के लिए स्वैप कर सकते हैं, लेकिन ओवरहेड/सेट-अप समग्र रूप से अधिक जटिल होगा।

3

आप उद्यम संस्करण है, तो आप डेटाबेस के केवल पढ़ने के लिए प्रतिलिपि, रिपोर्टिंग के लिए उपलब्ध, आदि मिररिंग का उपयोग करता है "निरंतर" शिपिंग लॉग ऑन "हुड के नीचे" बनाने के लिए डेटाबेस मिररिंग + स्नैपशॉट उपयोग कर सकते हैं। यह अक्सर आपके द्वारा वर्णित परिदृश्य में उपयोग किया जाता है।

0

पीयर-टू-पीयर प्रतिकृति कार्य करेगा। फिर आप एक उदाहरण पर क्वेरी चला सकते हैं और इसलिए मूल उदाहरण पर लोड को सहेज सकते हैं।

संबंधित मुद्दे