डेटाबेस के लिए SIMPLE या पूर्ण पुनर्प्राप्ति मॉडल?


38

मुझे पूर्ण पुनर्प्राप्ति मॉडल का उपयोग कब करना चाहिए और मुझे डेटाबेस के लिए सरल पुनर्प्राप्ति मॉडल का उपयोग कब करना चाहिए?

मैंने हमेशा पूर्ण पुनर्प्राप्ति मॉडल का उपयोग किया क्योंकि यह डिफ़ॉल्ट है, लेकिन आज मुझे इस त्रुटि का सामना करना पड़ा:

SQL सर्वर के लिए Microsoft OLE DB प्रदाता (0x80040E14) डेटाबेस 'DATABASE NAME' के लिए लेनदेन लॉग भरा हुआ है। यह जानने के लिए कि लॉग में स्थान का पुन: उपयोग क्यों नहीं किया जा सकता है, sys.dat डेटाबेस में log_reuse_wait_desc कॉलम देखें

विशिष्ट डेटाबेस वास्तव में मेरे सर्वर पर सबसे छोटे और सबसे निष्क्रिय डेटाबेस में से एक है, इसलिए मुझे नहीं पता कि इस डेटाबेस पर लॉग कैसे भरा जा सकता है, और अन्य नहीं।

लॉग को सिकोड़ने और डेटाबेस को फिर से एक्सेस करने योग्य बनाने के लिए, मैंने रिकवरी मॉडल को FULL से SIMPLE में बदल दिया और निम्न कमांड के साथ तार्किक फ़ाइल लॉग को सिकोड़ दिया।

alter database myDbName SET recovery simple
go
dbcc shrinkfile('LOG FILE LOGICAL NAME', 100)
go

यह मदद की, लेकिन अब मैं समझने की जरूरत है क्यों यह मदद की, कैसे इस स्थिति शुरू किया और कैसे भविष्य में इससे बचने के लिए?

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

हर रात 1 बजे, हम सर्वर पर हर डेटाबेस का एक स्क्रिप्टेड बैकअप कर रहे हैं। यह एक 31 लाइन स्क्रिप्ट द्वारा किया जा रहा है जहां सबसे महत्वपूर्ण हिस्सा है

set @Filename = 'D:\backup\' + convert(varchar, getDate(), 112) + ' - ' + @DBName + '.bak'
set @Description = 'Full backup of database ' + @Filename
BACKUP DATABASE @DBName TO DISK = @Filename WITH INIT , NOUNLOAD , NAME = @Description, NOSKIP , STATS = 10, NOFORMAT

क्या नया रिकवरी मॉडल और डेटाबेसिंक इस स्क्रिप्ट के साथ संघर्ष करने वाला है?

हम डेटाबेस के किसी भी अन्य प्रकार के बैकअप नहीं कर रहे हैं, और इसलिए लेन-देन लॉग नहीं है, हमें करना चाहिए?


कुछ ध्यान देने योग्य बात यह है कि अभी यह Azure SQL में कोई विकल्प नहीं है - यह हमेशा पूर्ण पुनर्प्राप्ति का उपयोग करता है। azure.microsoft.com/en-us/blog/…
jocull

जवाबों:


60

मुझे पूर्ण पुनर्प्राप्ति मॉडल का उपयोग कब करना चाहिए और मुझे डेटाबेस के लिए सरल पुनर्प्राप्ति मॉडल का उपयोग कब करना चाहिए?

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

SQL सर्वर के लिए Microsoft OLE DB प्रदाता (0x80040E14) डेटाबेस 'DATABASE NAME' के लिए लेनदेन लॉग भरा हुआ है। यह जानने के लिए कि लॉग में स्थान का पुन: उपयोग क्यों नहीं किया जा सकता है, sys.dat डेटाबेस में log_reuse_wait_desc कॉलम देखें

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

लॉग को सिकोड़ने और डेटाबेस को फिर से एक्सेस करने योग्य बनाने के लिए, मैंने रिकवरी मॉडल को FULL से SIMPLE में बदल दिया और निम्न कमांड के साथ तार्किक फ़ाइल लॉग को सिकोड़ दिया।

......

इसने मदद की, लेकिन अब मुझे यह समझने की जरूरत है कि इसने मदद क्यों की, यह स्थिति कैसे शुरू हुई और भविष्य में इसे कैसे रोका जाए?

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

इस MSDN संदर्भ से लिया गया उद्धरण / उद्धरण :

सरल रिकवरी मॉडल के तहत, जब तक कि कुछ कारक लॉग ट्रंकेशन में देरी नहीं कर रहा है, एक स्वचालित चेकपॉइंट लेनदेन लॉग के अप्रयुक्त अनुभाग को काट देता है। इसके विपरीत, पूर्ण और थोक-लॉग रिकवरी मॉडल के तहत, एक बार एक लॉग बैकअप श्रृंखला स्थापित हो जाने के बाद, स्वचालित चौकियां लॉग ट्रंकेशन का कारण नहीं बनती हैं।

तब आपने एक भौतिक डेटाबेस फ़ाइल सिकुड़ कर किया था और क्योंकि आपके लेन-देन लॉग में खाली स्थान था अब यह NTFS फ़ाइल को शारीरिक रूप से सिकोड़ने में सक्षम था।

कुछ समय बिताने के लायक पढ़ना:

  1. रिकवरी मॉडल
  2. लेन-देन लॉग का प्रबंधन (जेल शॉ)
  3. ऐसे कारक जो विलंब को समाप्त कर सकते हैं

आपके संपादन के बाद EDIT :

क्या नया रिकवरी मॉडल और डेटाबेसिंक इस स्क्रिप्ट के साथ संघर्ष करने वाला है?

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

हम डेटाबेस के किसी भी अन्य प्रकार के बैकअप नहीं कर रहे हैं, और इसलिए लेन-देन लॉग नहीं है, हमें करना चाहिए?

यदि आपका डेटाबेस पूर्ण पुनर्प्राप्ति मॉडल का उपयोग कर रहा है, तो हाँ आपको लेनदेन लॉग बैकअप करना चाहिए। यदि आपका डेटाबेस सरल पुनर्प्राप्ति में है, तो आप भौतिक रूप से लेन-देन लॉग बैकअप नहीं कर सकते।

पुनर्प्राप्ति मॉडल का उपयोग करने के लिए (सरल बनाम पूर्ण) के रूप में, हम आपके लिए वह निर्णय नहीं कर सकते हैं। केवल आप, आपकी व्यवसाय टीम, और आपके SLAs कर सकते हैं।


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

यह एक उत्कृष्ट उत्तर था । एक हिस्सा जो मुझे समझ में नहीं आया वह है "रिकवरी पॉइंट ऑब्जेक्ट्स को पूरा करना"। क्या आप उस वाक्यांश को स्पष्ट करेंगे? मैंने पहले सोचा था कि आप "उद्देश्य" लिखना चाहते हैं, लेकिन मैं उस धारणा में निश्चित नहीं हूं।
एंथोनी जी -
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.