2008-10-10 13 views
8

मैं कोई डीबीए नहीं हूं, और मुझे ओरेकल की लेनदेन प्रबंधन प्रक्रिया को समझने में थोड़ा मुश्किल समय है।ओरेकल - लेनदेन, रोलबैक सेगमेंट और undo_retention पैरामीटर कैसे काम करता है?

क्या मैं (सबसे विशेष रूप इस AskTom note - लेकिन टिप्पणी से परेशान नहीं है) इंटरनेट पर कुछ विश्वसनीय दिखने पृष्ठों को पढ़ने के द्वारा समझ से, जब एक सौदा लिए प्रतिबद्ध है, नए डेटा नहीं को सूचना दी है वास्तविक डेटा ब्लॉक अभी तक, लेकिन रोलबैक सेगमेंट पर लॉग रहता है। जब कोई डेटा पर एक चयन जारी करता है, या जब UNDO_RETENTION सेकंड पास हो जाते हैं - इनमें से जो भी दो घटनाएं होती हैं - पहले डेटा डेटा ब्लॉक पर लिखा जाता है (और तब)।

लेकिन हमारी कंपनी में किसी को, माना जाता है कि पता है, हाल ही में मुझसे विपरीत बताया, उसके अनुसार, जब एक सौदा लिए प्रतिबद्ध है, नए डेटा तुरंत डेटा ब्लॉक पर लिखा है, और रोलबैक खंड/पूर्ववत टेबलस्पेस पुराने डेटा को UNDO_RETENTION सेकंड की अवधि के लिए रखता है। यह पुराना डेटा इस समय के दौरान लेनदेन से पहले एससीएन पर शुरू किए गए प्रश्नों के उपयोग के लिए उपलब्ध रहता है।

तो, ओरेकल के अंदर वास्तव में क्या होता है, और क्या आप अपने उत्तर का बैक अप लेने के संदर्भ प्रदान कर सकते हैं?

हम ओरेकल 9.2.0.8 का उपयोग कर रहे हैं।

अग्रिम धन्यवाद।

उत्तर

13

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

1) UNDO_RETENTION के पास कुछ भी नहीं है जब डेटा परिवर्तन में आपके परिवर्तन लिखे गए हों, या तो स्मृति या डिस्क में। UNDO_RETENTION आपके परिवर्तन को पूर्ववत करने के लिए आवश्यक डेटा को कितनी देर तक बदलता है इसके बाद आप परिवर्तन करते हैं। इसका उद्देश्य यह है कि आपकी प्रतिबद्धता से पहले शुरू होने वाले अन्य प्रश्न या क्रमिक लेन-देन अभी भी उस डेटा को चाहते हैं। संदर्भ: http://download.oracle.com/docs/cd/B19306_01/server.102/b14231/undo.htm#sthref1477

2) जब आप कोई अद्यतन करते हैं, तो स्मृति में डेटा ब्लॉक संशोधित होते हैं।वे डिस्क पर लिखे जा सकते हैं या नहीं भी हो सकते हैं (यहां तक ​​कि आप प्रतिबद्ध होने से पहले, मुझे विश्वास है); यह पृष्ठभूमि प्रक्रिया द्वारा किया जाता है। साथ ही, फिर से जानकारी को फिर से लॉग बफर में लिखा जाता है। पूर्ववत खंड में पूर्ववत और संग्रहीत किया जाता है।

3) जब आप प्रतिबद्ध करते हैं, तो ओरेकल यह सुनिश्चित करता है कि आपकी रीडो जानकारी डिस्क पर लिखी गई है, और पूर्ववत डेटा को प्रतिबद्ध के रूप में चिह्नित करता है। लेकिन यह स्मृति में परिवर्तित डेटा ब्लॉक को डिस्क में नहीं लिखता है, न ही यह वापस जाता है और प्रत्येक ब्लॉक को प्रतिबद्ध के रूप में चिह्नित करता है। यह जितना संभव हो सके प्रतिबद्धता को बनाना है। संदर्भ: http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/transact.htm#sthref628

4) स्मृति में डेटा ब्लॉक को पृष्ठभूमि प्रक्रिया द्वारा डिस्क पर लिखे जाने पर या अगली बार उपयोग किए जाने पर (किसी चयन या किसी अन्य ऑपरेशन द्वारा) के रूप में चिह्नित किया जाएगा। AskTom नोट चर्चा कर रहा है। यह इस बारे में नहीं है कि डेटा में आपके परिवर्तन ब्लॉक में लिखे गए हैं; यह इस बारे में है कि वे ब्लॉक में ही प्रतिबद्ध हैं या नहीं।

+0

इस संपूर्ण उत्तर के लिए धन्यवाद। – Manur

+2

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

0

मेरी समझ (मूल रूप से) बाद में है, This link विवरण है।

डेटा ब्लॉक को लिखा जाना नहीं है, बस बफर में अपडेट किया गया है, वे डिस्क पर लिखे जा सकते हैं या नहीं भी। हालांकि आगे बढ़ने से पहले रेडो डिस्क पर लिखा जाना चाहिए।

0

मैं भी पर
इस link आधारित दूसरे संस्करण के लिए मतदान (जो ओरेकल 10.2 है, लेकिन मुझे लगता है कि यह अभी भी 9.2 के साथ-साथ करने के लिए लागू होता है)।

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

और

"जब स्वत: पूर्ववत प्रबंधन सक्षम किया गया है, वहाँ हमेशा एक मौजूदा पूर्ववत प्रतिधारण अवधि, जो समय की न्यूनतम राशि है कि Oracle डाटाबेस वर्ष बनाए रखने के-राइट करने से पहले जानकारी पूर्ववत् करने के लिए प्रयास करता है।"

संबंधित मुद्दे