एक अंतर बैकअप अपने आधार को निर्दिष्ट क्यों नहीं कर सकता है?


18

यह मेरी पहली DBA.SE पोस्ट है, इसलिए कृपया मुझे किसी भी गलती की सूचना दें, धन्यवाद!

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

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

क्या कारण है जो इस कार्यक्षमता को संभव होने से रोकता है? मुझे लगता है कि एक कारण होना चाहिए, मुझे नहीं पता कि यह क्या है।

नोट: मैं समझता हूं कि आधार को निर्दिष्ट नहीं किया जा सकता है, लेकिन मेरा प्रश्न यह है कि क्यों नहीं ? (मुझे "आप क्यों करेंगे?" के बारे में चर्चा करने में कोई दिलचस्पी नहीं है)

समानता

यहाँ मैं एक अंतर बैकअप कैसे समझ के लिए एक सादृश्य है:

मेरे पास कोशिकाओं में कुछ डेटा के साथ एक एक्सेल फाइल है।

1 दिन पर, मैं इस फ़ाइल की एक प्रति बनाता हूं और इसे कहीं और संग्रहीत करता हूं ("पूर्ण बैकअप")।

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

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

दिन 4 पर, मैं फिर से तुलना करता हूं और फिर से नोट बदलता हूं। सेल A1 के साथ जारी रखते हुए, अब यह "सारा" कहता है, भले ही वह दिन भर में 10 अन्य नाम था, और सभी I नोट "अब A1 सारा है"।

5 तारीख को, मेरी फ़ाइल गड़बड़ हो जाती है; इसलिए, मैं उस बैकअप प्रति को देखता हूं जो मैंने 1 दिन में बनाई थी, फिर अंतिम दिन 4 तारीखों में नोट किए गए थे, और मैं बैकअप प्रतिलिपि में दिए गए परिवर्तनों को लागू करता हूं और अब मेरे पास फ़ाइल "पुनर्स्थापित" है कि यह दिन 4 पर था तो, मैं 1 दिन पर बने बैकअप को देखता हूं, देखता हूं कि उस दिन 4 सेल A1 "सारा" के रूप में समाप्त हो गया, और बैकअप सेल A1 को "सारा" के रूप में बदल दिया।

अगर 2 तारीख को मैंने फाइल की एक और बैकअप कॉपी ("पूर्ण") बना ली होती तो यह क्यों होता? यह अभी भी तुलना करना संभव क्यों नहीं होगा (पढ़ें, "एक अंतर का बैकअप लें") फ़ाइल 3 या 4 पर दिन 1 पर बनाई गई प्रतिलिपि के साथ है? जैसा कि मैं इसे समझता हूं, एसक्यूएल सर्वर को मुझे 2 दिन (अगर एक बनाया गया था) पर पूर्ण बैकअप के लिए तुलना करने के लिए (जब एक और अंतर बैकअप लेने की आवश्यकता होगी) - कोई अन्य विकल्प नहीं।

जवाबों:


14

एक विभेदक बैकअप का उपयोग करता है जिसे अंतिम पूर्ण बैकअप के बाद संशोधित किए गए पृष्ठों की सूची बनाने के लिए अंतर परिवर्तन मानचित्र कहा जाता है । यह सूची एक "अंतर" सूची है, इसलिए बैकअप प्रकार का नाम है, और कारण केवल संबंधित पूर्ण बैकअप के शीर्ष पर बैकअप को कभी भी बहाल किया जा सकता है।

पूर्ण बैकअप का प्रदर्शन अंतर परिवर्तन मानचित्र को रीसेट करता है। उस बिंदु से आगे, संशोधित किसी भी पृष्ठ को मानचित्र में दर्ज किया गया है। यदि आप एक अंतर लेते हैं, तो उस बैकअप में केवल वे पृष्ठ होते हैं जिन्हें अंतिम पूर्ण बैकअप के बाद संशोधित किया गया है, और नक्शे में दर्ज किया गया है।

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

जब आप एसक्यूएल सर्वर से डिफरेंशियल बैकअप लेने के लिए कहते हैं, तो डिफरेंशियल के लिए एकमात्र "बेस", डिफरेंशियल बैकअप के शुरू होने के समय डेटाबेस में मौजूद सिंगल डिफॉल्ट चेंज मैप होता है। यही कारण है कि आप अंतर बैकअप के लिए आधार निर्दिष्ट नहीं कर सकते हैं।


@MartinSmith की एक टिप्पणी के जवाब में - आप पूर्ण बैकअप की एक संख्या से अधिक अंतर बैकअप को पुनर्स्थापित करने के लिए COPY_ONLYबैकअप का उपयोग करने में सक्षम हो सकते हैं । इस परिदृश्य पर विचार करें:

  1. BACKUP DATABASE xyz TO DISK = 'path_to_backup.bak';
  2. BACKUP DATABASE xyz TO DISK = 'path_to_backup_2.bak' WITH COPY_ONLY;
  3. BACKUP DATABASE xyz TO DISK = 'path_to_backup_3.bak' WITH COPY_ONLY;
  4. BACKUP DATABASE xyz TO DISK = 'path_to_backup_4.bak' WITH COPY_ONLY;
  5. BACKUP DATABASE xyz TO DISK = 'path_to_backup_diff.bak' WITH DIFFERENTIAL;

चरण 5 में अंतर बैकअप को चरण 1 से 4 में उठाए गए किसी भी बैकअप पर पुनर्स्थापित किए जाने में सक्षम होना चाहिए, क्योंकि चरण 1 में पूर्ण बैकअप होने पर ही अंतर परिवर्तन मानचित्र केवल साफ हो जाता है। COPY_ONLYचरण 2, 3, और 4 में बैकअप, करते नहीं परिवर्तन मानचित्र रीसेट करें। के बाद से अंतर परिवर्तन नक्शा जम जाता है पूर्ण बैकअप के बाद किए गए परिवर्तनों, लगातार से प्रत्येक COPY_ONLYबैकअप काम करने के लिए विभेदक बैकअप के खिलाफ के लिए पर्याप्त जानकारी शामिल है किसी भी पिछले 4 बैकअप की।

यद्यपि ऐसा लगता है कि यह काम करना चाहिए, व्यवहार में, निम्नलिखित त्रुटि में एक copy_only बैकअप परिणामों के शीर्ष पर एक अंतर को बहाल करना:

Msg 3136, स्तर 16, राज्य 1, पंक्ति 1
इस अंतर बैकअप को पुनर्स्थापित नहीं किया जा सकता क्योंकि डेटाबेस को सही स्थिति में पुनर्स्थापित नहीं किया गया है।
Msg 3013, लेवल 16, स्टेट 1, लाइन 1
RESTORE DATABASE असामान्य रूप से समाप्त हो रहा है।

मैंने डिफरेंशियल और copy_only restores के परीक्षण के लिए SQL Server 2012 प्लेटफॉर्म रिप्रो बनाया है , और फाइल को gist.github.com पर सहेजा है - WARNING स्क्रिप्ट RestoreTestअपने पहले चरण के रूप में नामित किसी भी डेटाबेस को छोड़ देगी ।


पूर्ण बैकअप करने पर केवल डिफरेंशियल चेंज मैप को रीसेट करता है यदि यह नहीं है COPY_ONLY- यदि ओपी को 1 दिन पर नियमित पूर्ण बैकअप लेना है और COPY_ONLY2 दिन पर पूर्ण बैकअप लेना है तो उसी आधार से बाद के अंतर को लागू करने से क्या समस्याएं होंगी दिन 2 बैकअप के लिए?
मार्टिन स्मिथ

मैंने अभी इसका परीक्षण किया है और व्यवहार में यह एक copy_only पर बाद के अंतर को बहाल करने की अनुमति नहीं देता है, हालांकि "यह अंतर बैकअप बहाल नहीं किया जा सकता है क्योंकि डेटाबेस को पहले की स्थिति में ठीक नहीं किया गया है।" - मुझे यकीन नहीं है कि अगर कोई कारण है तो यह काम नहीं करेगा या इसे लागू नहीं किया गया है।
मार्टिन स्मिथ

1
@MartinSmith - शौट मैंने इसे अब भी मान्य किया है।
मैक्स वर्नोन

5

आप जो सुविधा चाहते हैं, वह सिद्धांत रूप में मौजूद हो सकती है। यह वर्तमान डेटाबेस संरचनाओं के साथ कुशल नहीं होगा (मैक्स वर्नोन का उत्तर देखें)। SQL सर्वर को या तो अलग-अलग मानचित्रों का एक सेट बनाए रखना होगा या पूर्ण बैकअप के लिए वर्तमान DB सामग्री की तुलना करना चाहिए जो आप आधार के रूप में निर्दिष्ट करते हैं।

ऐसे अनुप्रयोग हैं जो बड़ी फ़ाइलों को काटते हैं। आप दो पूर्ण बैकअप बना सकते हैं और केवल परिवर्तित डेटा वास्तव में संग्रहीत किया जाएगा। यह कस्टम बेस के साथ एक अंतर की तरह है। exdupeउदाहरण के लिए ऐसा कर सकते हैं।

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

आपके द्वारा वर्णित सुविधा मौजूद क्यों नहीं है? प्रत्येक फीचर बजट का उपभोग करता है, जिसके कारण अन्य सुविधाएँ मौजूद नहीं होती हैं। यह एक स्पष्ट रूप से प्राथमिकता सूची में इसे काफी दूर नहीं कर पाया। मुझे यकीन नहीं है कि यह किसके लिए अच्छा होगा। कस्टम ठिकानों का उपयोग करने के लिए काफी गूढ़ आवश्यकता की तरह लगता है।


3

अंतर बैकअप के साथ लेन-देन लॉग बैकअप को भ्रमित न करें, उनके अलग-अलग उद्देश्य हैं! जिसे आप "अंतर बैकअप" कह रहे हैं, जिससे आप "कोशिकाओं के सभी परिवर्तनों को नोट करते हैं", वास्तव में एक लेनदेन लॉग है

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

लेन-देन लॉग बैकअप का उद्देश्य यह है कि आप लेनदेन को समय-समय पर एक मनमाने ढंग से इंगित करें - अक्सर, लेकिन निश्चित रूप से "सबसे हाल ही में कुछ भी होने के लिए" नहीं।

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

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

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


मुझे लगता है कि मैं सादृश्य खराब हो सकता है, एक संपादन के लिए अतिरिक्त ... खेद
elmer007

आपके नए सादृश्य के लिए संपादित।
dpw

1

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

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

मूल बातें:

डेटाबेस में डेटा तार्किक घटकों (तालिकाओं, विचारों, procs, ट्रिगर, आदि) में व्यवस्थित होता है जो उपयोगकर्ता को दिखाई देता है। कम से कम, एक डेटाबेस भी भौतिक रूप से दो (डेटा और लॉग फ़ाइल) या अधिक (द्वितीयक डेटा फ़ाइल) डिस्क पर फ़ाइलों के रूप में लागू किया जाता है।

  • एक डेटाबेस में पेज होता है जो रिकॉर्ड्स को स्टोर करने के लिए उपयोग की जाने वाली डेटा स्टोरेज की मूलभूत इकाई है ।
  • एक डेटाबेस पेज एक 8192-बाइट (8KB) ​​एक डेटाबेस डेटा फ़ाइल का हिस्सा है।
  • डेटाबेस फ़ाइल में 8 भौतिक रूप से सन्निहित पृष्ठ (8 * 8KB = 64KB) एक सीमा बनाते हैं ।
  • एक IAM (इंडेक्स एलोकेशन मैप) पेज एक सिंगल फाइल में लगभग 4GB की कीमत के स्पेस को ट्रैक करता है, जिसे 4GB की सीमा पर रखा गया है। इन 4GB विखंडू को GAM अंतराल कहा जाता है

क्यों एक अंतर बैकअप केवल सबसे हाल ही में पूर्ण बैकअप पर आधारित हो सकता है। - या - अगर एक अंतर बैकअप सब कुछ है जो पिछले पूर्ण बैकअप के बाद बदल गया है, तो अंतर मेरे चयन के किसी भी बैकअप के आधार पर क्यों नहीं हो सकता है?

एक्सेल के बारे में आपकी सादृश्यता के आधार पर, आप जो कर रहे हैं वह वही है जो पूर्व में बदल गया है। यह लेन-देन लॉग से सभी प्रतिबद्ध लेन-देन को लागू कर रहा है with STOP AT(नोट: 5 तारीख को फ़ाइल गड़बड़ हो जाती है और आप दिन 4 पर रोक रहे हैं)

प्रत्येक डेटा फ़ाइल के प्रत्येक 4GB अनुभाग (जिसे GAM अंतराल कहा जाता है) में एक विशेष डेटाबेस पेज होता है, जिसे अंतर बिटमैप कहा जाता है, जो उस 4GB अनुभाग के कुछ हिस्सों (विलुप्त होने वाले) को ट्रैक करता है, जो पिछले पूर्ण बैकअप के बाद बदल गया है, जो डेटा को बदल गया है या दर्शाता है। डेटाबेस में जोड़ा गया है।

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

आप इस स्क्रिप्ट का उपयोग यह जानने के लिए भी कर सकते हैं कि पिछले पूर्ण बैकअप के बाद डेटाबेस में कितना बदलाव आया है?

विभेदक आधार जानकारी masterडेटाबेस में संग्रहीत है - sys.database_fileया ( sys.master_filesजब डेटाबेस read_only या ऑफ़लाइन है) उपयोगी है।

3 महत्वपूर्ण स्तंभ हैं जो अंतर आधार से संबंधित जानकारी संग्रहीत करते हैं ।

  • differential_base_lsnअंतर बैकअप के लिए आधार है। डेटा एक्सटेंशन जो बाद में बदले जाते हैं differential_base_lsn, उन्हें अंतर बैकअप में शामिल किया जाएगा।
  • differential_base_guidकी अद्वितीय पहचानकर्ता है आधार बैकअप जिस पर एक विभेदक बैकअप आधारित है।
  • differential_base_timeसमय आ गया है कि से मेल खाती हैdifferential_base_lsn

आरटीओ को गति देने के लिए एक अंतर बैकअप उपयोगी होता है (रिकवरी टाइम ऑब्जेक्टिव = आपके डेटाबेस को पुनर्प्राप्त करने के लिए समय लगता है) अधिक लगातार पूर्ण बैकअप के विपरीत जो बड़े डेटाबेस के लिए एक समस्या होगी या लेनदेन लॉग बैकअप की मात्रा को बहाल कर सकते हैं क्योंकि वे बड़े हो सकते हैं समय के साथ।

नोट: एक COPY_ONLY पूर्ण बैकअप विभेदक आधार को रीसेट नहीं करता है, इसलिए एक COPY_ONLY बैकअप विभेदक आधार के रूप में कार्य नहीं कर सकता है।

संदर्भ:



2
@PaSSRandal ने अभिलेखों को संग्रहित करने के लिए पृष्ठ मौजूद हैं। उनके ब्लॉग पर और इसलिए मैंने इसे संदर्भित किया है। लॉजिकल संदर्भ में लेना जो आप बता रहे हैं (संदर्भ के आधार पर) यह सच भी है!
परिजन शाह
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.