मेरे पास एक SQL2012 DB है जिसमें एक लॉग फ़ाइल बहुत तेज़ी से बढ़ रही है। मेरे पास एक तृतीय पक्ष प्रोग्राम है जो पूर्ण डेटाबेस बैकअप कर रहा है इसलिए मैं इसके बारे में चिंतित नहीं हूं। मेरे पास लॉग फ़ाइल को सिकोड़ने के लिए SQL प्रबंधक में चलाने का आदेश है और यह काम कर रहा है लेकिन यह एक बहुत ही मैन्युअल कार्य है।

मैं एक स्क्रिप्ट बनाने की कोशिश कर रहा हूं जिसे मैं हर 2 सप्ताह में चलाने के लिए शेड्यूल कर सकता हूं, लेकिन एक BAT फ़ाइल काम नहीं करेगी, ऐसा लगता है जैसे sqlcmd -S servername\instancename -E कमांड चलाने के बाद यह बस 1> पर जाती है और रुक जाती है। मुझे यूएसई और डीबीसीसी कमांड चलाने की जरूरत है लेकिन यह सुनिश्चित नहीं है कि इसे कैसे प्राप्त किया जाए।

मैंने ऑनलाइन देखने की कोशिश की है लेकिन मुझे इस DBCC SHRINKFILE कार्य को चलाने के लिए डबल क्लिक स्क्रिप्ट बनाने का कोई तरीका नहीं मिल रहा है।

तो sqlcmd का उपयोग करके, मैं यह कर सकता हूं:

USE DBNAME
GO
DBCC SHRINKFILE (DBNAME_20070302091322_Log, 1);
GO

मैन्युअल रूप से चलने पर फ़ाइल सिकुड़ कर 10mb से कम हो जाती है और यह सही है। मुझे बस इस कार्य को स्वचालित करने की आवश्यकता है।

0
Mo Heyns 10 सितंबर 2019, 11:56
कृपया इस पर एक नज़र डालें What’s So Bad About Shrinking Databases with DBCC SHRINKDATABASE? brentozar.com/archive/2017/12/…
 – 
Squirrel
10 सितंबर 2019, 12:04
2
sqlcmd में डेटाबेस नाम निर्दिष्ट करने के लिए एक -d db_name पैरामीटर है। कृपया डॉक्टर docs.microsoft देखें। com/en-us/sql/tools/…
 – 
Squirrel
10 सितंबर 2019, 12:07
आपके तृतीय पक्ष कार्यक्रम को लेन-देन लॉग बैकअप भी करने की आवश्यकता है। यह वही है जो आपके लॉगफाइल को असीम रूप से बढ़ने से रोकेगा। कुछ भी "मैन्युअल रूप से" सिकोड़ना यहाँ सही समाधान नहीं है। यदि आप केवल FULL बैकअप ले रहे हैं लेकिन कोई लेन-देन लॉग बैकअप नहीं ले रहे हैं, तो आप अपने डेटाबेस को केवल SIMPLE पुनर्प्राप्ति पर स्विच कर सकते हैं।
 – 
alroc
10 सितंबर 2019, 12:21
सरल काम कर सकता है लेकिन मुझे लॉग चाहिए। मैं सोमवार को एक पूर्ण डीबी बैकअप करता हूं और फिर मैं मंगलवार से शुक्रवार तक लॉग बैकअप करता हूं क्योंकि लॉग को छोटा माना जाता है। तो मेरा विचार केवल शनिवार को लॉग फ़ाइल को सिकोड़ना है ताकि यदि डीबी बुधवार को दुर्घटनाग्रस्त हो जाए तो मैं डीबी को पुनर्स्थापित कर सकता हूं और लॉग चला सकता हूं और ठीक उसी जगह पर वापस आ सकता हूं जहां मैं कुछ घंटों के लापता टुकड़ों के साथ था।
 – 
Mo Heyns
10 सितंबर 2019, 12:38
ठीक है, तो आपका कितना लेन-देन लॉग स्थान वास्तव में उपयोग में है? लॉग बैकअप के ठीक से पूर्ण होने के बाद लॉग को साफ़ कर दिया जाता है, इसलिए यदि इसे एक विशेष आकार में विकसित किया जाता है और आप नियमित लॉग बैकअप ले रहे हैं, तो यह आपके लॉग बैकअप शेड्यूल को समायोजित करने के लिए आवश्यक आकार है। यदि आप छोटे लॉग चाहते हैं, तो अपने लॉग बैकअप की आवृत्ति बढ़ाएँ, और सुनिश्चित करें कि आप केवल-कॉपी लॉग बैकअप नहीं ले रहे हैं। आप एक लॉगफाइल को सिकोड़ने की कोशिश कर रहे संसाधनों को बर्बाद कर रहे हैं जो अपने मूल आकार में वापस बढ़ने जा रहा है।
 – 
alroc
10 सितंबर 2019, 12:41

2 जवाब

मेरे पास एक SQL2012 DB है जिसमें एक लॉग फ़ाइल बहुत तेज़ी से बढ़ रही है

इस मामले में आपको डेटाबेस पुनर्प्राप्ति मॉडल और log_reuse_wait_desc को सत्यापित करना होगा जिसे आप निम्न आदेश के साथ पहचान सकते हैं:

Select name, recovery_model_desc, log_reuse_wait_desc
from sys.databases

यदि पुनर्प्राप्ति मॉडल पूर्ण पर सेट है:

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

लॉग फ़ाइल/चेकप्वाइंट/के बारे में अधिक जानकारी के लिए log_reuse_wait ..

यदि पुनर्प्राप्ति मॉडल सरल पर सेट है:

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

आपके पास साधारण पुनर्प्राप्ति मॉडल में शेड्यूल LOG backup नहीं है, क्योंकि लॉग फ़ाइल चौकियां स्वचालित रूप से जोड़ दी जाएंगी और चेकपॉइंट के आधार पर लॉग को छोटा कर दिया जाएगा।

1
Shekar Kola 10 सितंबर 2019, 13:01

तो ऐसा लगता है कि आपकी मदद से मैं इसे काम करने में कामयाब रहा। मेरे पास -i विकल्प के साथ एक बैट है जहां डीबीसीसी कमांड है।

यहाँ वह बल्ला है

Sqlcmd -S sqlserver\instance -E -d डेटाबेसनाम -i c:\test.sql -o c:\out.txt

यहाँ hte test.sql है

डेटाबेस नाम का उपयोग करें GO DBCC SHRINKFILE (DBLOGFILENAME_Log, 1); जाओ

परीक्षण और उसके कार्य।

-1
Mo Heyns 10 सितंबर 2019, 12:51
यह अभी भी गलत समाधान है जो भी समस्या आपको लगता है कि आप हल कर रहे हैं।
 – 
alroc
10 सितंबर 2019, 13:25
इसलिए जब मैं एपीपी को फिर से काम करने में कामयाब रहा क्योंकि लॉग फ़ाइल मेरी डीबीसीसी श्रिंक फ़ाइल हैक का उपयोग करके 500 जीबी पर बैठी थी, तो मैंने बैकअप ऐप बैकअप कैसे कर रहा है और सटीक सेटिंग्स क्या हैं, इस बारे में और अधिक जानकारी प्राप्त करने के लिए चला गया। वह सब मुझे इस तथ्य के बाद दिया गया था और मैं सेटअप या किसी भी चीज़ का हिस्सा नहीं था। मैंने पुनर्प्राप्ति मॉडल को पूर्ण रूप से बदलने का प्रबंधन किया, क्लाउड पर लॉग बैकअप करने के लिए बैकअप ऐप को भी बदल दिया और लॉग के अधिकतम आकार को डीबी आकार प्लस 10GB में बदल दिया। इसलिए अगर मैं इसे सही ढंग से समझता हूं तो मेरी लॉग फ़ाइल अब कोई समस्या नहीं होनी चाहिए।
 – 
Mo Heyns
10 सितंबर 2019, 17:09