मैं SQL सर्वर लॉग फ़ाइल के आकार को कैसे छोटा करूं


10

मैं डेटाबेस ldf फ़ाइल के आकार को छोटा करने के तरीके का पता नहीं लगा सकता।

DBA का कहना है कि मुझे इसका उपयोग करना चाहिए backup log dbname with truncate_only

और जब ऐसा लगता है कि यह SQL क्वेरी एनालाइज़र में सही ढंग से निष्पादित किया गया है तो ldf फ़ाइल अभी भी 2 Gb से अधिक है।

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


निश्चित रूप से यह एक डुप्लिकेट प्रश्न है?
JamesRyan

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

खोज के पहले पृष्ठ पर लगभग 8 उत्तर हैं, जिसमें यह शामिल है लेकिन मुझे लगता है कि आपको यह जानना होगा कि आप क्या खोज रहे हैं। मैं इसे नियमित रूप से एक उत्तर के भाग के रूप में देखता हूं, मुझे आश्चर्य हुआ कि इसे इतने सीधे तरीके से नहीं पूछा गया है।
जेम्सरन

उत्तर बहुत डेटाबेस के पुनर्प्राप्ति विकल्प पर निर्भर करता है: सरल या पूर्ण?
रिचर्ड

1
स्पष्ट करने के लिए धन्यवाद, रॉन। इसके देव डेटाबेस के बाद से, आप लॉग फ़ाइल को नीचे सिकोड़ने के अलावा पुनर्प्राप्ति मॉडल को SIMPLE में बदलना चाहते हैं, अन्यथा आपकी समस्या पुन: हो जाएगी।
ब्रैड मार्क

जवाबों:


11

ओह, आतंक! कृपया लोगों को बताना बंद करें कि उन्हें अपनी लॉग फाइल को सिकोड़ना चाहिए!

यदि आपने इस स्थिति में खुद को पा लिया है, तो निम्नलिखित मामलों में से एक की संभावना है:

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

इनमें से प्रत्येक के लिए उत्तर इस प्रकार है:

यदि (1), तो डेटाबेस को सरल मोड में स्विच करें
यदि (2), तो नियमित लॉग बैकअप शेड्यूल करें
यदि (3), तो अपने निर्धारित लॉग बैकअप को ठीक करें
यदि (4), तो बस ऐसा न करें :) इसके बजाय, करें छोटे बैचों में काम करते हैं।

ध्यान दें कि इनमें से किसी को भी (वंचित) के उपयोग की आवश्यकता है "ट्रंकटेटोन के साथ बैकअप लॉग इन करें"

इसके बजाय, एक बार जब आप उपरोक्त तकनीकों में से किसी एक का उपयोग करके लॉग फ़ाइल को साफ़ कर देते हैं , तो (अब खाली) लॉग इन के साथ सिकोड़ें:

DBCC SHRINKFILE ('log logical name', 2000)

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


इसका बहुत बुरा स्वीकार किया गया उत्तर इतनी जल्दी था। यह उन सवालों में से एक है जिसका उपयोग मैं साक्षात्कार के दौरान एसक्यूएल एडिंस को हटाने के लिए करता हूं। यदि वे truncate_only के साथ बैकअप के साथ वापस आते हैं जो बल्ले से 2 स्ट्राइक के रूप में गिना जाता है।
जिम बी

2
मैं मानता हूं कि इसकी आखिरी आखिरी चीज है, फ़ाइल को सिकोड़ना। सही रखरखाव इसके लिए आवश्यकता को कम करता है। लेकिन एक बार इसका बड़ा और आप इसे छोटा चाहते हैं, आपको इसे छोटा करना होगा। हालाँकि, सिकुड़ते समय, फ़ाइल को यथासंभव छोटा करना बेहतर होता है, फिर फ़ाइल को 8GB वेतन वृद्धि में सही आकार में बढ़ाएं। यह फ़ाइल में वीएलएफ की संख्या का अनुकूलन करेगा। देखें - sqlskills.com/BLOGS/KIMBERLY/post/…
ब्रायन नाइट

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

4

"truncate_only के साथ बैकअप" करने के बाद आपको सिकुड़ने के लिए निम्नलिखित आदेश जारी करना चाहिए

dbcc SHRINKFILE (logfilename,shrink_tosize)

जैसे

dbcc SHRINKFILE (mydatabase_Log,512)

3

आपके द्वारा ऊपर लिखी गई स्क्रिप्ट पुन: उपयोग के लिए लॉग सामग्री को चिह्नित करेगी। उस स्क्रिप्ट का अनुसरण करें:

USE <database>;

DBCC SHRINKFILE (<log logical file name>)

कि यह तुम्हारे लिए नीचे हटना होगा।

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