SQL सर्वर लॉग फ़ाइल को छोटा करने के लिए कमांड क्या है?


192

मुझे एक सहयोगी को भेजने से पहले एलडीएफ फ़ाइल को खाली करना होगा। मैं SQL सर्वर को लॉग को छोटा करने के लिए कैसे मजबूर करूं?

जवाबों:


131

अगर मुझे अच्छी तरह से याद है ... क्वेरी विश्लेषक या समकक्ष में:

BACKUP LOG  databasename  WITH TRUNCATE_ONLY

DBCC SHRINKFILE (  databasename_Log, 1)

2
यह निश्चित रूप से डेटाबेस रिकवरी मॉडल को SIMPLE (Blorgbeard के उत्तर में) के रूप में सेट करने से बेहतर है क्योंकि यदि आपका पुनर्प्राप्ति मॉडल पूर्ण है, तो आपने इसे एक कारण के लिए सेट किया है।
स्कॉट व्हिटलॉक

52
truncate_only एसक्यूएल सर्वर 2008 में हटा दिया गया है, ताकि आप सरल वसूली करने के लिए डाटाबेस स्विच करना पड़ेगा msdn.microsoft.com/en-us/library/ms143729(SQL.90).aspx
जस्टिन मूर

10
SQL सर्वर 2012 के लिए यह काम करता है, लेकिन बिना WITH TRUNCATE_ONLY
net_prog

4
SQL_2015 के लिए net_prog ने जो कहा, उसे जोड़कर मैंने इसके लिए पहली पंक्ति को प्रतिस्थापित किया BACKUP LOG DatabaseNameHere TO DISK='NUL:'
एरोन न्यूटन

'TRUNCATE_ONLY' एक मान्यता प्राप्त बैकप विकल्प नहीं है। (एसक्यूएल सर्वर 2019 आरसी 1)
टामसज गंडोर

304

प्रबंधन स्टूडियो में:

  • लाइव वातावरण पर ऐसा न करें, लेकिन यह सुनिश्चित करने के लिए कि आप अपने देव db को जितना हो सके कम करें:
    • डेटाबेस पर राइट-क्लिक करें Properties, फिर चुनें Options
    • सुनिश्चित करें कि "रिकवरी मॉडल" "सरल" पर सेट है, न कि "पूर्ण"
    • ओके पर क्लिक करें
  • डेटाबेस पर फिर से राइट-क्लिक करें, चुनें Tasks-> Shrink->Files
  • फ़ाइल प्रकार को "लॉग" में बदलें
  • ओके पर क्लिक करें।

वैकल्पिक रूप से, यह करने के लिए SQL:

 ALTER DATABASE mydatabase SET RECOVERY SIMPLE
 DBCC SHRINKFILE (mydatabase_Log, 1)

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


1
आपके जवाब ने मेरा दिन बचा लिया है! मुझे "राइट-क्लिक - टास्क -> सिकोड़ें" विकल्प का पता नहीं था। धन्यवाद!
रेने

7
आप लाइव माहौल में क्या करते हैं? पहले लॉग बैकअप?
जॉन Bubriski

1
मैं कोई डीबीए नहीं हूं, लेकिन हां, मेरा मानना ​​है कि लॉग का बैकअप लेने से यह छोटा हो जाएगा: Technet.microsoft.com/en-us/library/ms179478.aspx
Blorgbeard

2
@JohnBubriski यदि आप सरल के अलावा किसी पुनर्प्राप्ति मॉडल का उपयोग कर रहे हैं, तो लॉग डेटा पुनर्प्राप्त करने या वापस लेन-देन करने के लिए आधार हैं। इसलिए, उत्पादन में, आपको लॉग इन फ़ाइलों को सिकोड़ने से पहले इन लॉग का बैकअप लेना होगा। अन्यथा, कोई वास्तविक पुनर्प्राप्ति संभावना नहीं होगी। दुर्भाग्य से, यदि आप पुनर्प्राप्ति स्थिति में हैं, तो आपको DB को पूरी तरह से पुनर्प्राप्त करने के लिए सभी लेन-देन लॉग बैकअप को फिर से लोड करना होगा। मज़ा समय, सुनिश्चित करने के लिए! :)
को परिभाषित करता है

1
SQL Server 2012 में मुझे use mydatabaseक्रियान्वित करने से पहलेdbcc shrinkfile
knb

62

SQL Server 2008 के लिए, कमांड है:

ALTER DATABASE ExampleDB SET RECOVERY SIMPLE
DBCC SHRINKFILE('ExampleDB_log', 0, TRUNCATEONLY)
ALTER DATABASE ExampleDB SET RECOVERY FULL

इसने मेरी 14GB लॉग फ़ाइल को 1MB तक कम कर दिया।


5
जैसा कि प्रश्न अस्पष्ट है कि किस संस्करण और स्वीकृत उत्तर SQL Server 2008 पर लागू नहीं है, यह उत्तर अभी भी आयु की परवाह किए बिना मान्य है।
जेम्स लॉ

धन्यवाद, यह मुझे एक बड़ी लॉग फ़ाइल को कम करने में मदद करता है जो DBCC SHRINKFILE के साथ प्रतिक्रिया नहीं करता
क्रिश्चियन Navelot

6
जब आप पूरा हो जाए तो रिकवरी मॉडल को पूर्ण में बदलना न भूलें!
दान बेखर

ऐसा करने से पहले आपको बैकअप लेना चाहिए (या अन्य ट्रंकेशन विकल्पों में से)। यदि आप एक पूर्ण बैकअप करते हैं और एसएसएमएस में 'केवल कॉपी बैकअप' की जांच करते हैं, तो आपको लॉग इन की आवश्यकता नहीं है। (यह सिर्फ बैकअप में एक बिंदु है)।
साइमन_वेवर

37

SQL 2008 के लिए आप nulडिवाइस के लिए लॉग इन बैकअप कर सकते हैं :

BACKUP LOG [databaseName]
TO DISK = 'nul:' WITH STATS = 10

और फिर DBCC SHRINKFILEलॉग फ़ाइल को छोटा करने के लिए उपयोग करें।


2
यह केवल एक ही है जो मेरी स्थिति में काम करना समाप्त कर रहा है ... मुझे TRUNCATE_ONLY
TomXP411

नोट: इसमें काफी समय लग सकता है, यहां तक ​​कि एसएसडी पर (इसे त्यागने में सक्षम होने के लिए लॉग को पढ़ना होगा)। मध्यम संचालित Azure VM की 30GB लॉग फ़ाइल के लिए 40% करने में 10 मिनट का समय लगता है। प्रतिशत को संसाधित करने के लिए SSMS में 'संदेश' ले जाना सुनिश्चित करें।
सिमोन_विएवर

3

truncate_only के साथ बैकअप लॉग logname एक dbcc संकोचन कमांड के बाद


0

चूंकि मेरे लिए जवाब टिप्पणियों में दफन था। SQL सर्वर 2012 और उसके बाद के लिए, आप निम्न का उपयोग कर सकते हैं:

BACKUP LOG Database TO DISK='NUL:'
DBCC SHRINKFILE (Database_Log, 1)

-5

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

प्रबंधन स्टूडियो में वापस डेटाबेस संलग्न करें। अटैच विंडो में फाइलों की सूची से लॉग फाइल को हटा दें।

DB संलग्न करता है और एक नई खाली लॉग फ़ाइल बनाता है। आपके द्वारा सब कुछ ठीक होने की जाँच करने के बाद, आप नामांकित लॉग फ़ाइल को हटा सकते हैं।

आपको शायद उत्पादन डेटाबेस के लिए इसका उपयोग नहीं करना चाहिए।


4
ऐसा कभी मत करो! लॉग में डेटा हो सकता है अभी तक डेटा फ़ाइल के लिए प्रतिबद्ध नहीं है। आप ऐसे डेटा को खो देंगे।
पॉल

यदि, आपके जवाब में, आप इसे उत्पादन में नहीं आजमाने की चेतावनी देते हैं, तो यह बिल्कुल भी पोस्ट करने लायक नहीं है।
स्टेन शॉ

9
मैं डाउनवोटर्स से असहमत हूं - यह एक विकल्प है। प्रशासकों को सिर्फ उनके परिदृश्य को समझने की जरूरत है। उदाहरण के लिए - अगर कोई खुला लेन-देन नहीं होता है तो कोई 'अनकम्यूटेड' डेटा नहीं होगा।
गेरार्ड ओनली

3
यह एकमात्र समाधान है जिसने मेरे लिए काम किया। मेरी ड्राइव भर गई थी और मैं बैकअप या सिकुड़ नहीं सकता था और कुछ भी काम नहीं कर रहा था। धन्यवाद!
ब्रायन

3
मैं सहमत हूँ; यह सबसे अच्छा अभ्यास नहीं है, लेकिन अगर आपके पास ब्रायन के परिदृश्य जैसे कोई अन्य विकल्प नहीं हैं, तो यह एक मूल्यवान उपकरण है।
स्कॉटफॉस्टर 1000
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.