दिलचस्प पोस्ट
ड्रॉप डाउन प्रोटेक्टोरज ई 2 ए टेस्ट में विकल्प का चयन कैसे करें तत्व केन्द्रित नहीं रहेगा, खासकर जब स्क्रीन फिर से आकार देना पायथन में एक सूची खोलें? ASP.NET WebForms की तुलना में, एएसपी.नेट एमवीसी पृष्ठ का 'पृष्ठ जीवन चक्र' क्या है? कई इकाई फ़्रेमवर्क में कई को डालें / अपडेट करें मैं यह कैसे करुं? IOS में NSAttributedString में HTML को कनवर्ट करें एडीटी डिफ़ॉल्ट हैलो दुनिया नहीं बना है, लेकिन कमांड लाइन करता है मैं C ++ में सीएसवी फ़ाइल डेटा कैसे पढ़ सकता हूं और हेरफेर कर सकता हूं? PHP एक पथ के अंतिम भाग को कैसे निकालें मैं किसी विशेष (ईमेल) डोमेन से किसी भी उपयोगकर्ता को फ़ायरबेज डेटाबेस कैसे लॉक कर सकता हूं? पायथन में स्ट्रिंग ट्रिम करना एक बहुआयामी चर लंबाई सरणी एक समारोह में पासिंग पायथन सूची अवरोही क्रम में क्रमबद्ध करें त्रुटि 2006 (HY000): MySQL सर्वर दूर चला गया है स्ट्रिंग में प्रत्येक वर्ण के लिए

आप SQL सर्वर लेनदेन लॉग को कैसे साफ़ करते हैं?

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

Solutions Collecting From Web of "आप SQL सर्वर लेनदेन लॉग को कैसे साफ़ करते हैं?"

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

सबसे पहले, एक पूर्ण बैकअप लें

कभी भी यह सुनिश्चित किए बिना अपने डेटाबेस में कोई भी परिवर्तन न करें जिससे आप उसे कुछ गलत कर सकें।

यदि आप बिंदु-इन-टाइम रिकवरी के बारे में ध्यान रखते हैं

(और पॉइंट-इन-टाइम रिकवरी द्वारा, मेरा मतलब है कि आप पूर्ण या विभेदक बैकअप के अलावा किसी और को पुनर्स्थापित करने में सक्षम होने की परवाह करते हैं।)

संभवत: आपका डेटाबेस FULL पुनर्प्राप्ति मोड में है यदि नहीं, तो सुनिश्चित करें कि यह है:

 ALTER DATABASE testdb SET RECOVERY FULL; 

यहां तक ​​कि अगर आप नियमित रूप से पूर्ण बैकअप ले रहे हैं, तो लॉग फ़ाइल बढ़ेगी और बढ़ेगी जब तक आप लॉग बैकअप नहीं करते – यह आपकी सुरक्षा के लिए है, बेतरतीब ढंग से आपकी डिस्क स्थान पर नहीं खाती आपके पुनर्प्राप्ति उद्देश्यों के अनुसार, आपको इन लॉग बैकअप को काफी बार करना चाहिए। उदाहरण के लिए, यदि आपके पास एक व्यावसायिक नियम है जो बताता है कि आप किसी आपदा की स्थिति में 15 मिनट से अधिक डेटा खो सकते हैं, तो आपको एक नौकरी मिलनी चाहिए जो हर 15 मिनट में प्रवेश का बैक अप लेती है। यहाँ एक स्क्रिप्ट है जो वर्तमान समय के आधार पर टाइमस्टैंप फाइल नामों को उत्पन्न करेगी (लेकिन आप रखरखाव योजना आदि के साथ ऐसा कर सकते हैं, बस रखरखाव योजनाओं में किसी भी सिकुड़ विकल्प का चयन नहीं करते हैं, वे भयानक हैं)।

 DECLARE @path NVARCHAR(255) = N'\\backup_share\log\testdb_' + CONVERT(CHAR(8), GETDATE(), 112) + '_' + REPLACE(CONVERT(CHAR(8), GETDATE(), 108),':','') + '.trn'; BACKUP LOG foo TO DISK = @path WITH INIT, COMPRESSION; 

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

अब, आपके पास नियमित रूप से लॉग बैकअप चलने के बाद, लॉग फ़ाइल को अब जितना भी उड़ाया जा रहा है, उतनी अधिक उचित होने पर इसे कम करना उचित होगा। इसका अर्थ यह नहीं है कि SHRINKFILE को लॉग फ़ाइल 1 एमबी तक और फिर से चालू नहीं किया जा रहा है – भले ही आप लॉग को बैक अप कर रहे हों, फिर भी यह हो सकता है कि किसी समवर्ती लेन-देन के योग को समायोजित करने की आवश्यकता है। लॉग फ़ाइल autogrow घटनाएं महंगे हैं, क्योंकि SQL सर्वर को फाइलों को शून्य करना पड़ता है (जब इंस्टेंट फाइल आरंभीकरण चालू होता है तो डेटा फ़ाइलों के विपरीत) और उपयोगकर्ता लेन-देन को तब इंतजार करना पड़ता है जब ऐसा होता है आप ऐसा करना चाहते हैं, जितना संभव हो उतना छोटा हो, नियमित रूप से बढ़ना-सिकुड़ते रहें, और आप निश्चित रूप से अपने उपयोगकर्ताओं को इसके लिए भुगतान नहीं करना चाहते हैं।

ध्यान दें कि आपको सिकुड़ने से पहले दो बार लॉग अप करने की आवश्यकता हो सकती है (धन्यवाद रॉबर्ट)।

इसलिए, आपको अपने लॉग फाइल के लिए व्यावहारिक आकार के साथ आने की आवश्यकता है। यहां कोई भी नहीं है जो आपको बता सकता है कि आपके सिस्टम के बारे में बहुत कुछ जानने के बिना, लेकिन अगर आप अक्सर लॉग फ़ाइल को सिकुड़ते रहे हैं और यह फिर से बढ़ रहा है, तो यह एक बड़ा वॉटरमार्क संभवतः 10-50% अधिक है । मान लें कि 200 एमबी की बात आती है, और आप चाहते हैं कि किसी भी बाद की घटनाओं को 50 एमबी हो, तो आप लॉग फ़ाइल आकार को इस प्रकार समायोजित कर सकते हैं:

 USE [master]; GO ALTER DATABASE Test1 MODIFY FILE (NAME = yourdb_log, SIZE = 200MB, FILEGROWTH = 50MB); GO 

ध्यान दें कि अगर लॉग फ़ाइल वर्तमान में> 200 एमबी है, तो आपको इसे पहले चलाने की आवश्यकता हो सकती है:

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

यदि आप बिंदु-इन-टाइम रिकवरी के बारे में परवाह नहीं करते हैं

यदि यह टेस्ट डेटाबेस है, और आपको बिंदु-इन-टाइम रिकवरी के बारे में परवाह नहीं है, तो आपको यह सुनिश्चित करना चाहिए कि आपका डेटाबेस SIMPLE पुनर्प्राप्ति मोड में है।

 ALTER DATABASE testdb SET RECOVERY SIMPLE; 

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

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

 USE yourdb; GO CHECKPOINT; GO CHECKPOINT; -- run twice to ensure file wrap-around GO DBCC SHRINKFILE(yourdb_log, 200); -- unit is set in MBs GO 

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

कुछ चीजें जिन्हें आप नहीं करना चाहते हैं

  • TRUNCATE_ONLY विकल्प के साथ लॉग को वापस लें और फिर SHRINKFILE एक के लिए, यह TRUNCATE_ONLY विकल्प नापसंद कर दिया गया है और अब SQL सर्वर के वर्तमान संस्करणों में उपलब्ध नहीं है। दूसरा, यदि आप FULL पुनर्प्राप्ति मॉडल में हैं, तो यह आपके लॉग श्रृंखला को नष्ट करेगा और एक नया, पूर्ण बैकअप की आवश्यकता होगी।

  • डेटाबेस को अलग करें, लॉग फ़ाइल हटाएं, और पुन: अटैच करें । मैं इस बात पर ज़ोर नहीं दे सकता कि यह कैसे खतरनाक हो सकता है। आपका डेटाबेस वापस नहीं आ सकता है, यह संदेह के रूप में आ सकता है, आपको बैकअप वापस करना पड़ सकता है (यदि आपका कोई है) आदि।

  • "सिकुड़ डेटाबेस" विकल्प का उपयोग करें DBCC SHRINKDATABASE और रखरखाव योजना विकल्प ऐसा करने के लिए बुरे विचार हैं, खासकर यदि आप वास्तव में केवल एक लॉग समस्या समस्या को हल करने की जरूरत है फ़ाइल को लक्षित करें जिसे आप DBCC SHRINKFILE या DBCC SHRINKFILE का उपयोग करके इसे स्वतंत्र रूप से समायोजित और समायोजित करना चाहते हैं ALTER DATABASE ... MODIFY FILE (ऊपर के उदाहरण)।

  • लॉग फ़ाइल को 1 MB से हटाना यह मोहक दिखता है क्योंकि, हे, SQL सर्वर मुझे कुछ परिदृश्यों में ऐसा करने देगा, और यह जो भी रिक्त स्थान उपलब्ध कराता है उसे देखो! जब तक कि आपके डेटाबेस को केवल पढ़ने के लिए (और यह है, आपको उसे इस तरह के ALTER DATABASE का प्रयोग करना चाहिए), यह बिल्कुल कई अनावश्यक वृद्धि की घटनाओं का कारण होगा, क्योंकि लॉग को वसूली मॉडल की परवाह किए बिना मौजूदा लेनदेन को समायोजित करना है। अस्थायी रूप से उस स्थान को मुक्त करने का क्या मतलब है, बस एसक्यूएल सर्वर इसे धीरे-धीरे और दर्द से वापस ले सकता है?

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

सक्रिय होना

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

सबसे खराब संभव सेटिंग्स यहां 1 एमबी की वृद्धि या 10% वृद्धि है। अजीब बात है, ये एसक्यूएल सर्वर के लिए डिफॉल्ट हैं (जो मैंने शिकायत की है और मैंने कोई लाभ नहीं लिया है ) डेटा फ़ाइलों के लिए 1 एमबी और लॉग फाइलों के लिए 10% पूर्व में इस दिन और उम्र में बहुत छोटा है, और बाद में हर बार लंबे और लंबे समय तक घटनाओं की ओर जाता है (कहें, आपकी लॉग फ़ाइल 500 एमबी है, पहली वृद्धि 50 एमबी है, अगले विकास 55 एमबी है, अगले विकास 60.5 एमबी है आदि। आदि – और धीमी गति से आई / ओ पर, मुझे विश्वास करो, आप वास्तव में इस वक्र नोटिस जाएगा)।

आगे की पढाई

कृपया यहाँ बंद न करें; जबकि आप जिस लॉग सलाह को लॉग फाइलों में सिकुड़ते हैं, उनमें से बहुत कुछ स्वाभाविक रूप से खराब है और यहां तक ​​कि संभावित रूप से विनाशकारी भी हैं, ऐसे कुछ लोग हैं जो डेटा स्थान को मुक्त करने की तुलना में डेटा अखंडता के बारे में अधिक ध्यान रखते हैं।

एक ब्लॉग पोस्ट जिसे मैंने चार साल पहले लिखा था, जब मैंने कुछ "यहां लॉग फ़ाइल को हटाना है" स्प्रिंग अप पोस्ट किया था ।

एक ब्लॉग पोस्ट ब्रेंट ओजर ने चार साल पहले लिखे, एक एसक्यूएल सर्वर पत्रिका लेख के जवाब में कई संसाधनों की ओर इशारा करते हुए, जिसे प्रकाशित नहीं किया जाना चाहिए था ।

पॉल रान्डल के एक ब्लॉग पोस्ट में यह समझाया गया है कि क्यों टी-लॉग रखरखाव महत्वपूर्ण है और आपको अपनी डेटा फ़ाइलों को हटाना क्यों नहीं चाहिए, या तो

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

अस्वीकरण: कृपया ध्यान से नीचे टिप्पणियां पढ़ें, और मुझे लगता है कि आपने पहले ही स्वीकार किए गए उत्तर पढ़ा है। जैसा मैंने लगभग 5 साल पहले कहा था:

अगर किसी व्यक्ति की परिस्थितियों के लिए जोड़ने के लिए कोई टिप्पणी है, यह पर्याप्त या इष्टतम समाधान नहीं है तो कृपया नीचे टिप्पणी करें


  • डेटाबेस नाम पर राइट क्लिक करें

  • कार्य का चयन करें -> हटना -> डेटाबेस

  • फिर ठीक क्लिक करें!

मैं आमतौर पर विंडोज़ एक्सप्लोरर निर्देशिका को डेटाबेस फ़ाइलों को खोलता है ताकि मैं तत्काल प्रभाव देख सकूं।

मैं वास्तव में इस काम पर काफी आश्चर्यचकित था! आम तौर पर मैंने पहले डीबीसीसी का उपयोग किया है, लेकिन मैंने इसे करने की कोशिश की और उसने कुछ भी कम नहीं किया, इसलिए मैंने जीयूआई (2005) की कोशिश की और उसने 10 सेकंड में 17 जीबी को मुक्त किया

संपादित करें: पूर्ण पुनर्प्राप्ति मोड में यह काम नहीं कर सकता है, इसलिए आपको पहले लॉग को वापस करना होगा या साधारण पुनर्प्राप्ति में बदलना होगा, फिर फ़ाइल को छोटा करना होगा। [धन्यवाद इस के लिए @updatecascade]

ps: मुझे इसकी सराहना करते हैं कि कुछ ने इस के खतरों के बारे में क्या टिप्पणी की है, लेकिन मेरे पर्यावरण में यह कोई विशेष रूप से ऐसा करने से कोई समस्या नहीं हुई है क्योंकि मैं हमेशा पूर्ण बैकअप पहले करता हूं। इसलिए कृपया ध्यान रखें कि आपका वातावरण क्या है, और यह जारी रखने से पहले आपकी बैकअप रणनीति और नौकरी की सुरक्षा को प्रभावित करता है। जो मैं कर रहा था वह माइक्रोसॉफ्ट द्वारा प्रदान की जाने वाली सुविधा के लिए लोगों को इंगित करता था!

 USE AdventureWorks2008R2; GO -- Truncate the log by changing the database recovery model to SIMPLE. ALTER DATABASE AdventureWorks2008R2 SET RECOVERY SIMPLE; GO -- Shrink the truncated log file to 1 MB. DBCC SHRINKFILE (AdventureWorks2008R2_Log, 1); GO -- Reset the database recovery model. ALTER DATABASE AdventureWorks2008R2 SET RECOVERY FULL; GO 

से: http://msdn.microsoft.com/en-us/library/ms189493.aspx

आप पहले बैकअप करना चाह सकते हैं

[अनुरोध से अधिक जानकारी का जवाब दें, लेकिन मुझे आशा है कि यह उपयोगी है]

नीचे लेनदेन लॉग को छोटा करने के लिए एक स्क्रिप्ट है लेकिन मैं निश्चित रूप से इसे सिकुड़ने से पहले लेनदेन लॉग का बैकअप लेने की सिफारिश करता हूं।

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

यहां कई पोस्ट हैं जहां लोगों ने वसूली को पूरा करने के लिए लेनदेन लॉग में संग्रहीत डेटा का उपयोग किया

एसक्यूएल सर्वर 2008 में लेनदेन लॉग को कैसे देखें I

एसक्यूएल सर्वर 2008 में लॉग फ़ाइल (* .LDF) पढ़ें

 USE DATABASE_NAME; GO ALTER DATABASE DATABASE_NAME SET RECOVERY SIMPLE; GO --first parameter is log file name and second is size in MB DBCC SHRINKFILE (DATABASE_NAME_Log, 1); ALTER DATABASE DATABASE_NAME SET RECOVERY FULL; GO 

आपको त्रुटि मिल सकती है जो ऊपर दिये आदेशों को निष्पादित करते समय इस तरह दिखती हैं

 “Cannot shrink log file (log file name) because the logical log file located at the end of the file is in use “ 

इसका अर्थ है कि ब्लॉग प्रयोग में है। इस स्थिति में एक पंक्ति में कई बार इसे निष्पादित करने का प्रयास करें या डेटाबेस गतिविधियों को कम करने का कोई तरीका ढूंढें।

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

यदि आप SQL 7 या 2000 का प्रयोग कर रहे हैं, तो आप डेटाबेस विकल्प टैब में "चेकपॉइंट पर लॉग ऑन करें" को सक्षम कर सकते हैं। इसका एक ही प्रभाव है

यह स्पष्ट रूप से उत्पादन के वातावरण में अनुशंसित नहीं है, क्योंकि आप समय पर किसी बिंदु पर पुनर्स्थापित नहीं कर पाएंगे।

यहां एक सरल और बहुत ही असामान्य और संभावित खतरनाक तरीका है।

  1. बैकअप डीबी
  2. डीबी को अलग करें
  3. लॉग फ़ाइल का नाम बदलें
  4. डीबी संलग्न करें
  5. नई लॉग फाइल पुन: तैयार की जाएगी
  6. पुनर्नामित लॉग फ़ाइल को हटाएं

मुझे लग रहा है कि आप लॉग बैकअप नहीं कर रहे हैं (जो लॉग को छांटकर) मेरी सलाह है कि वसूली मॉडल को पूर्ण से सरल करने के लिए बदलना है इससे लॉग ब्लोट को रोक दिया जाएगा

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

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

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

BACKUP पर माइक्रोसॉफ्ट के लेख से

हम अनुशंसा करते हैं कि लेनदेन लॉग मैन्युअल रूप से छीनने के लिए आप NO_LOG या TRUNCATE_ONLY का उपयोग न करें, क्योंकि यह लॉग श्रृंखला को तोड़ता है अगले पूर्ण या अंतर डेटाबेस बैकअप तक, डेटाबेस मीडिया की विफलता से सुरक्षित नहीं है। केवल बहुत ही विशेष परिस्थितियों में मैनुअल लॉग ट्रांसीकरण का उपयोग करें, और तुरंत डेटा का बैकअप बनाएं।

इससे बचने के लिए, अपनी लॉग फ़ाइल को डिस्कनेक्ट करने से पहले डिस्क पर बैकअप लें। सिंटैक्स कुछ इस तरह दिखाई देगा:

 BACKUP LOG MyDatabaseName TO DISK='C:\DatabaseBackups\MyDatabaseName_backup_2013_01_31_095212_8797154.trn' DBCC SHRINKFILE (N'MyDatabaseName_Log', 200) 

अपने अवांछित विकास को रोकने के लिए SQL सर्वर लेनदेन लॉग को ठीक से बनाए रखा जाना आवश्यक है इसका मतलब है कि लेनदेन लॉग बैकअप अक्सर पर्याप्त रूप से चलाना। ऐसा करने से, आप पूर्ण होने के लिए ट्रांजैक्शन लॉग को जोखिम में लेते हैं और बढ़ने लगते हैं।

इस धागे में उल्लेखित उत्तरों के अलावा, मैं लेन-देन लॉग सामान्य मिथकों को पढ़ने और समझने की सलाह देता हूं। ये रीडिंग लेनदेन लॉग को समझने और यह तय करने में मदद कर सकती है कि इसे "साफ़" करने के लिए किस तकनीक का उपयोग करना है:

http://www.sqlshack.com/10-important-sql-server-transaction-log-myths/

मिथक: मेरा SQL सर्वर बहुत व्यस्त है, मैं SQL सर्वर लेनदेन लॉग बैकअप बनाना नहीं चाहता

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

http://blog.sqlxdetails.com/transaction-log-myths/

मिथक: नियमित लॉग सिकुंकिंग एक अच्छा रखरखाव अभ्यास है

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

पहले डेटाबेस रिकवरी मॉडल की जांच करें। डिफ़ॉल्ट रूप से एसक्यूएल सर्वर एप्रेस्रेस संस्करण सरल पुनर्प्राप्ति मॉडल में डेटाबेस बनाते हैं (यदि गलत नहीं है तो)।

बैकअप लॉग डाटाबेस Truncate_Only के साथ ही

डीबीसीसी श्रिंकफ़ाइल (आपका लैगिकल_लॉगफ़ाइलनाम, 50)

SP_helpfile आपको तार्किक लॉग फ़ाइल नाम देगा

संदर्भ:

http://support.microsoft.com/kb/873235

यदि आपका डेटाबेस पूर्ण रिकवरी मॉडल में है और यदि आप TL बैकअप नहीं ले रहे हैं, तो उसे सरल बनाएं।

डीबीसीसी श्रिंकफाइल ({logicalLogName}, TRUNCATEONLY) आदेश का उपयोग करें यदि यह टेस्ट डेटाबेस है और आप स्थान को सहेजने / पुनः प्राप्त करने की कोशिश कर रहे हैं, तो इससे मदद मिलेगी। याद रखें कि उस TX लॉग में एक तरह का न्यूनतम / स्थिर राज्य आकार होता है जो कि वे बड़े होते हैं आपके पुनर्प्राप्ति मॉडल के आधार पर आप लॉग को कम करने में सक्षम नहीं हो सकते हैं – अगर पूरी तरह से और आप TX लॉग बैकअप जारी नहीं कर रहे हैं तो लॉग को सिकुड़ नहीं किया जा सकता – यह हमेशा के लिए बढ़ेगा। यदि आपको टीएक्स लॉग बैकअप की ज़रूरत नहीं है, तो अपने पुनर्प्राप्ति मॉडल को सरल पर स्विच करें।

और याद रखें, किसी भी परिस्थिति में कभी भी लॉग (एलडीएफ) फ़ाइल को नष्ट नहीं करें !!! आप बहुत ज्यादा त्वरित डेटाबेस भ्रष्टाचार होगा। पकाया! किया हुआ! खोया डेटा! यदि छोड़ दिया "unrepaired" मुख्य MDF स्थायी रूप से भ्रष्ट हो सकता है

कभी भी हस्तांतरण लॉग कभी नहीं हटाएं – आप डेटा खो देंगे! आपके डेटा का हिस्सा TX लॉग में है (वसूली मॉडल की परवाह किए बिना) … अगर आप अलग-अलग TX लॉग फ़ाइल का नाम बदलते हैं और प्रभावी ढंग से आपके डेटाबेस का हिस्सा हटाते हैं

जिन लोगों ने TX लॉग को हटा दिया है, आप कुछ चेक-डी कमांड चला सकते हैं और अधिक डेटा खोने से पहले भ्रष्टाचार को ठीक कर सकते हैं।

इस विषय पर पॉल रान्डल के ब्लॉग को देखें http://sqlskills.com/BLOGS/PAUL/category/Bad-Advice.aspx#p4

इसके अलावा सामान्य रूप से MDF के पर shrinkfile का उपयोग न करें क्योंकि यह आपके डेटा को गंभीर रूप से टुकड़े कर सकता है। अधिक जानकारी के लिए अपनी बुरी सलाह अनुभाग देखें ("आपको अपनी डेटा फ़ाइलों को हटाना क्यों नहीं चाहिए")

पॉल की वेबसाइट देखें – वह इन बहुत सवालों को शामिल करता है पिछले महीने उन्होंने अपने मिथ ए डे शृंखला में इन मुद्दों में से कई के माध्यम से चलाया।

लॉग फाइल को छोटा करने के लिए:

  • बैकअप डेटाबेस
  • डेटाबेस को अलग करें, एंटरप्राइज़ प्रबंधक का उपयोग कर या निष्पादित करके: SP_DetachDB [DBName]
  • लेनदेन लॉग फ़ाइल हटाएं (या फ़ाइल का नाम बदलें, बस मामले में)
  • डेटाबेस का पुनः उपयोग करके फिर से संलग्न करें: Sp_AttachDB [DBName]
  • जब डेटाबेस संलग्न होता है, तो एक नया लेन-देन लॉग फ़ाइल बनाई जाती है।

लॉग फ़ाइल को संकोच करने के लिए:

  • बैकअप लॉग [DBName] No_Log के साथ
  • या तो डेटाबेस को सिकोड़ें:

    एंटरप्राइज़ प्रबंधक का उपयोग करना: – डेटाबेस पर राइट क्लिक करें, सभी कार्य, डेटाबेस को हटाना, फ़ाइलें, लॉग फ़ाइल का चयन करें, ठीक है।

    टी-एसक्यूएल का प्रयोग करना: – डीबीसीसी श्रिंकफाइल ([लॉग_लोगिकल_नाम])

आप sp_helpdb चलाकर या एंटरप्राइज़ प्रबंधक में डेटाबेस के गुणों को देखकर लॉग फ़ाइल का तार्किक नाम पा सकते हैं।

अधिकांश SQL सर्वर पर मेरे अनुभव के लिए लेनदेन लॉग का कोई बैकअप नहीं है। पूर्ण बैकअप या विभेदक बैकअप सामान्य व्यवहार हैं, लेकिन लेनदेन लॉग बैकअप वास्तव में बहुत कम हैं इसलिए ट्रांजैक्शन लॉग फ़ाइल हमेशा बढ़ती रहती है (डिस्क पूर्ण होने तक)। इस मामले में वसूली मॉडल को " सरल " पर सेट किया जाना चाहिए सिस्टम डेटाबेस "मॉडल" और "टेम्प्डीबी" को भी संशोधित करने के लिए मत भूलना

"Tempdb" डेटाबेस का बैकअप कोई मतलब नहीं है, इसलिए इस डीबी के पुनर्प्राप्ति मॉडल को हमेशा "सरल" होना चाहिए

  1. एमडीबी फ़ाइल का बैक अप लें।
  2. एसक्यूएल सेवाएं बंद करें
  3. लॉग फ़ाइल का नाम बदलें
  4. सेवा शुरू करें

(सिस्टम एक नई लॉग फ़ाइल बनाएगा।)

नाम बदलें लॉग फ़ाइल हटाएं या हटाएं

इसे इस्तेमाल करे:

 USE DatabaseName GO DBCC SHRINKFILE( TransactionLogName, 1) BACKUP LOG DatabaseName WITH TRUNCATE_ONLY DBCC SHRINKFILE( TransactionLogName, 1) GO 

डेटाबेस-> ठीक क्लिक करें गुण -> फ़ाइल -> अलग नाम के साथ पुराने लॉग फ़ाइल के समान एक दूसरे लॉग फ़ाइल को अलग नाम से सेट करें और पथ को सेट करें। डेटाबेस स्वचालित रूप से नए बनाए गए लॉग फ़ाइल को चुनता है।

  1. बैकअप डीबी
  2. डीबी को अलग करें
  3. लॉग फ़ाइल का नाम बदलें
  4. डीबी अटैच करें (जबकि एल्गमेंट को पुनः नामित .ldf (लॉग फ़ाइल) संलग्न करना। इसे चुनें और निकालें बटन दबाकर हटाएं)
  5. नई लॉग फाइल पुन: तैयार की जाएगी
  6. पुनर्नामित लॉग फ़ाइल को हटाएं

यह काम करेगा लेकिन पहले आपके डेटाबेस का बैकअप लेने के लिए सुझाव दिया गया है।

उदाहरण:-

डीबीसीसी एसक्यूएलपरफ (LOGSPACE)

TRUNCATE_ONLY के साथ बैकअप LOG Comapny

डीबीसीसी SHRINKFILE (कंपनी_लॉग, 500)

डीबीसीसी एसक्यूएलपरफ (LOGSPACE)

डीबी लेनदेन लॉग न्यूनतम आकार के लिए सिकोड़ें :

  1. बैकअप: लेनदेन लॉग
  2. संकुचित फ़ाइलें: लेनदेन लॉग
  3. बैकअप: लेनदेन लॉग
  4. संकुचित फ़ाइलें: लेनदेन लॉग

मैंने कई डीबी के परीक्षण किए: यह अनुक्रम काम करता है

यह आम तौर पर 2 एमबी को घटाता है

या एक स्क्रिप्ट द्वारा:

 DECLARE @DB_Name nvarchar(255); DECLARE @DB_LogFileName nvarchar(255); SET @DB_Name = '<Database Name>'; --Input Variable SET @DB_LogFileName = '<LogFileEntryName>'; --Input Variable EXEC ( 'USE ['+@DB_Name+']; '+ 'BACKUP LOG ['+@DB_Name+'] WITH TRUNCATE_ONLY ' + 'DBCC SHRINKFILE( '''+@DB_LogFileName+''', 2) ' + 'BACKUP LOG ['+@DB_Name+'] WITH TRUNCATE_ONLY ' + 'DBCC SHRINKFILE( '''+@DB_LogFileName+''', 2)' ) GO