रखते हुए (आंशिक) बैकअप SQL सर्वर FILESTREAM का उपयोग करते समय छोटा


12

मेरे पास लगभग 1TB FILESTREAMडेटा वाला एक डेटाबेस है जिसे मुझे बैकअप की आवश्यकता नहीं है (यदि डेटा हटा दिया गया था तो यह एक-दो घंटों में अपने आप पुन: निर्मित हो जाएगा, इसलिए यह महत्वपूर्ण नहीं है)। अधिकांश डेटा को हर दो दिनों में बदल दिया जाता है, इसलिए अंतर बैकअप वास्तव में आकार को बनाए रखने में मदद नहीं करेगा।

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

SIMPLEरिकवरी मोड विशिष्ट FILEGROUPएस के बैकअप करने की मेरी क्षमता को दूर ले जाता है , इसलिए मुझे नहीं लगता कि यह एक विकल्प भी होगा।

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

क्या Simpleरिकवरी मोड में आंशिक बैकअप बनाने का कोई तरीका है ( FILESTREAMकेवल पढ़ने के लिए टेबल सेट किए बिना )? यदि नहीं, तो क्या मेरी समस्या का कोई अन्य समाधान है?

जवाबों:


3

इसके कारण समस्या यह थी कि लॉग फ़ाइल (जो भी बैकअप हो जाती है) अब अनावश्यक रूप से बड़ी है क्योंकि इसमें FILESTREAM डेटा शामिल है।

मुझे यकीन नहीं है कि अगर आपका मतलब है कि लॉग फ़ाइल बहुत बड़ी है या लॉग फाइल बैकअप बहुत बड़ी हो गई है।

यदि यह पूर्व है तो आप लॉग अप का समर्थन कितनी बार कर रहे थे? एप्लिकेशन डिज़ाइन के आधार पर आप अधिक बार बैक अप करके आकार को कम करने में सक्षम हो सकते हैं (और प्रत्येक 5 मिनट बहुत बार नहीं है)। हालांकि अगर आप पहले से ही ऐसा कर रहे थे और यह अभी भी गुब्बारा कर रहा था तो आप शायद किस्मत से बाहर हैं। बड़े लॉग फ़ाइल में फिर से समस्या क्यों है?

यदि यह बाद की बात है - ऐसा लग रहा था जैसे आप साधारण रिकवरी मॉडल के साथ जारी रखने के लिए खुश थे और समय सीमा में कोई बिंदु नहीं है, अगर यह आपके पास बहुत अधिक बैकअप है; किस स्थिति में पूर्ण मोड में रहें और अपने लॉग बैकअप को छोड़ दें।


मुझे लॉग बैकअप का एहसास नहीं था जो अक्सर असामान्य नहीं थे! आपकी "बड़ी लॉग फ़ाइल फिर से समस्या क्यों है?" प्रश्न वास्तव में मेरे बारे में सोच रहा था और मेरे पास इसका जवाब नहीं था। तो, आप के लिए +100!
डेविड मर्डोक

3

पुनर्प्राप्ति मोड के लिए सेट किए गए डेटाबेस के लिए एक समाधान SIMPLE में केवल-पढ़ने के लिए फ़ाइल समूह (जो कि आपका आदर्श विकल्प नहीं है) में FILESTREAM डेटा है, और फिर इस तरह DIFFERENTIAL के साथ केवल पढ़ने / लिखने वाले फ़ाइल समूहों का बैकअप लिया जा रहा है:

BACKUP DATABASE [name] READ_WRITE_FILEGROUPS TO DISK = '' WITH DIFFERENTIAL, COMPRESSION;

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


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

2

मुझे यह एक विकल्प के रूप में प्रदान करने में गंदा लगता है, लेकिन यदि आप अपने डेटाबेस में FILESTREAM डेटा को अलग करना चुनते हैं, तो आप ट्रिगर के माध्यम से अलग-अलग dbs में तालिकाओं के बीच RI बनाए रख सकते हैं :

ट्रिगर -> टिप्पणी -> सीमाएं:
एक ट्रिगर केवल वर्तमान डेटाबेस में बनाया जाता है; हालाँकि, एक ट्रिगर वर्तमान डेटाबेस के बाहर वस्तुओं को संदर्भित कर सकता है।

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

... मुझे अभी नहाना है ...


1

मुझे पता है कि यह सवाल पहले से ही उत्तर दिया गया है, लेकिन एक और समाधान है जो दूसरों की मदद कर सकता है। हाल ही में मैंने ब्रेंट ओजर के ब्लॉग से सीखा कि अभी आपके लॉग बैकअप को छोड़ने का विकल्प है:

BACKUP LOG MyDb TO DISK='NUL:'

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


मैं अभी भी लॉग बैकअप को अनुसूचित नौकरी के रूप में चलाने की सलाह दूंगा, यह सुनिश्चित करने के लिए कि अप्रत्याशित गतिविधि लॉग फ़ाइल के आकार को अनुचित तरीके से ड्राइव न करे।
RDFozz
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.