SQL Server 2008 R2 सिकोड़ने के बाद मैन्युअल रूप से सेट फ़ाइल आकार


10

काम पर एक अनैच्छिक डीबीए बन रहा है और वास्तव में कुछ पर कुछ मदद की ज़रूरत है।

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

मेरी समस्या यह है कि मैं नहीं चाहता कि लॉग फ़ाइल कुछ भी नहीं सिकुड़ जाए और सोमवार को पहली सुबह लगातार बढ़ रही हो। मेरे पास एक मोटा अनुमान है कि फ़ाइल क्या होनी चाहिए (डेटाबेस का लगभग 20%) और इसे गेट-गो से सेट करना चाहेंगे ताकि जितना संभव हो उतना सन्निहित स्थान सुनिश्चित हो सके। क्या यह डेटाबेस गुणों के तहत "प्रारंभिक आकार" बदलने का मामला है -> फाइलें? मैं यह अनुमान लगाऊंगा कि ऐसा होने के लिए डेटाबेस को ऑफ़लाइन होने की आवश्यकता होगी?

अग्रिम में धन्यवाद


2
आप रात में एक बार डेटाबेस का बैकअप लेने की योजना बनाते हैं, और रात में एक बार लॉग बैकअप चलाते हैं? हो सकता है कि आपको सरल रिकवरी मॉडल पर विचार करना चाहिए ताकि लॉग खुद को प्रबंधित कर सके।
हारून बर्ट्रेंड

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

1
@ केनेथ अगर आप आधी रात को पूरा बैकअप लेते हैं, तो 12:05 पर लॉग बैकअप मिलता है, मुझे लगता है कि यह काफी सहज है। YMMV।
हारून बर्ट्रेंड

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

2
@ केनेथ लेकिन अगर आप केवल दिन में एक बार लॉग का बैकअप ले रहे हैं, तो यही कारण है कि यह पहले स्थान पर बहुत बड़ा है! यदि आपको कल 12:07 बजे तक पुनर्प्राप्त करने की आवश्यकता है, तो आपको पूरे दिन के लिए पूरे लॉग को 2 मिनट तक पुनर्प्राप्त करने की आवश्यकता है। बहुत उपयोगी नहीं है।
हारून बर्ट्रेंड

जवाबों:


6

बस आपको लगता है कि इष्टतम आकार को सिकोड़ें। यूआई का उपयोग न करें, बस ऐसा करें - मान लें कि 200 एमबी आपका इष्टतम आकार है:

USE yourdb;
GO
DBCC SHRINKFILE(yourdb_log, 200);

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

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


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

12

आपका फ़ाइल प्रबंधन पूरी तरह से ऑनलाइन ऑपरेशन हो सकता है। आपके पास पुनर्प्राप्ति उद्देश्यों के लिए अपनी लॉग जानकारी को बनाए रखने की आवश्यकता के आधार पर दो रास्ते हैं:

समय पर रिकवरी की जरूरत नहीं है

  1. डेटाबेस को SIMPLEरिकवरी में बदलें । डिस्क पर लेनदेन लिखने के लिए एक चेकपॉइंट निष्पादित करें।
  2. लॉग को समतल करें।
  3. लॉग को उचित आकार में बदलें।

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

का उपयोग कर पूरा:

ALTER DATABASE [foo] 
SET RECOVERY SIMPLE;

CHECKPOINT;

DBCC SHRINKFILE (foo_log,0);

ALTER DATABASE [foo]
MODIFY FILE (NAME=foo_log,SIZE=8000MB,MAXSIZE=UNLIMITED,FILEGROWTH=1000MB);

--Optional if you want the database in full recovery mode 
--for point in time recovery going forward
ALTER DATABASE [foo] 
SET RECOVERY FULL;

पॉइंट इन टाइम रिकवरी की जरूरत

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

  1. लेन-देन लॉग बैकअप चलाएँ।
  2. अपनी फ़ाइल को सिकोड़ें। (आदर्श रूप से चपटा, लेकिन अगर आपका डेटाबेस सक्रिय है तो ऐसा करना कठिन होगा)।
  3. चरण 1 और 2 को तब तक दोहराएं जब तक कि आपका लॉग एक उपयुक्त आकार न हो, आदर्श रूप में यथासंभव छोटा है।
  4. लॉग को उचित आकार में बदलें।

का उपयोग कर पूरा:

BACKUP LOG [foo] TO DISK='<Location of t-log backup>';

DBCC SHRINKFILE (foo_log,0);

--Repeat the above until your log file is small "enough"

ALTER DATABASE [foo]
MODIFY FILE (NAME=foo_log,SIZE=8000MB,MAXSIZE=UNLIMITED,FILEGROWTH=1000MB);

यहाँ क्या हो रहा है यह समझने के लिए कुछ अतिरिक्त संसाधन:


2

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

USE [DBName]
GO
DBCC SHRINKFILE (N'LogName' , SizeInMg)
GO

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


2

सरल मोड के बारे में हारून के जवाब के पूरक में , आप प्रति दिन 2 (या अधिक) अंतर बैकअप शेड्यूल कर सकते हैं, इस तरह से SIMPLE मोड को बनाए रखते हुए अपने डेटाबेस ऑपरेशन के डेटा लॉस विंडो को कम कर सकते हैं।

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