2010-08-06 10 views
6

मुझे समझ में ओरेकल अवरुद्ध के बारे में थोड़ा - कैसे अपडेट अन्य अपडेट ब्लॉक तक लेन-देन पूर्ण, कैसे लेखकों पाठकों आदिअवरुद्ध करने, लॉक करने और अलगाव स्तर के बीच संबंध क्या है?

मैं निराशावादी और optimisic लॉकिंग की अवधारणा को समझने, और के बारे में विशिष्ट बैंकिंग पाठ्यपुस्तक उदाहरण को ब्लॉक नहीं करती खोए गए अपडेट आदि खोना

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

मैं थोड़ा अस्पष्ट हूं हालांकि ये अवधारणाएं कैसे संबंधित हैं और बातचीत करती हैं। उदाहरण के लिए:

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

इन विषयों को स्पष्ट करने के लिए कोई भी शब्द वास्तव में सराहना की जाएगी!

+0

आपके कुछ प्रश्न (विशेष रूप से विभिन्न ग्राहकों के बीच wrt प्रभावित) का उत्तर यहां दिया जा सकता है: http://en.wikipedia.org/wiki/Isolation_%28database_systems%29 –

उत्तर

3
  • ओरेकल किसी भी प्रकार के लॉकिंग के लिए अनुमति देता है - आप अपना ऐप कैसे बनाते हैं इसका उपयोग किया जाता है। पूर्व-निरीक्षण में, यह वास्तव में डेटाबेस निर्णय नहीं है।

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

  • आमतौर पर आपको इसके बारे में चिंता करने की आवश्यकता नहीं है। ओरेकल में, पाठकों ने कभी लेखकों को अवरुद्ध नहीं किया, और लेखक कभी पाठकों को अवरुद्ध नहीं करते। ओरेकल का व्यवहार विभिन्न एएनएसआई अलगाव स्तरों के साथ नहीं बदलता है। उदाहरण के लिए, ओरेकल में "गंदे पढ़ने" जैसी कोई चीज़ नहीं है। टॉम Kyte बताते हैं कि गंदे पढ़ने की अनुमति देने की भावना है पढ़ने को रोकने से बचने के लिए, जो ओरेकल में कोई मुद्दा नहीं है।

मैं दृढ़ता से पढ़ने टॉम Kyte उत्तम पुस्तक "विशेषज्ञ Oracle डाटाबेस वास्तुकला", जिसमें इन और अन्य विषयों काफी स्पष्ट रूप से संबोधित कर रहे सिफारिश करेंगे।

+0

ओरेकल के विभिन्न व्यवहारों के साथ कुछ अलग अलगाव स्तर हैं । उदाहरण के लिए सीरिलिज़ेबल के परिणामस्वरूप प्रतिबद्धता के समय "लेनदेन को व्यवस्थित नहीं किया जा सकता" त्रुटि हो सकती है, जो सामान्य अलगाव स्तर में नहीं देखी जाएगी। –

+0

यह एकमात्र अपवाद है जिसे मैं जानता हूं, और इसका आमतौर पर उपयोग नहीं किया जाता है। यदि आपको इसका उपयोग करने की आवश्यकता है, तो आपको इसके बारे में पता होना चाहिए।ओरेकल के बहु-संस्करण कार्यान्वयन अन्य एएनएसआई अलगाव स्तरों का ख्याल रखता है। – DCookie

2

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

निराशावादी लॉकिंग डेटा को लॉक कर रहा है जब आप इसे पढ़ते हैं ताकि आप सुनिश्चित हो सकें कि अगर आप इसे अपडेट करने का निर्णय लेते हैं तो कोई भी इसे बदल नहीं देता है।

यह एक आवेदन निर्णय, नहीं के रूप में एक Oracle निर्णय है:

चयन एक्स, वाई, जेड table1 से जहां एक = 2 ​​

मिलान रिकॉर्ड लेकिन

चयन एक्स ताला नहीं होगा, वाई, जेड से तालिका 1 जहां अद्यतन के लिए एक = 2 ​​

होगा। तो अगर आप तय करने के लिए अगर आप आशावादी ताला लगा

SELECT x, y, z FROM table1 WHERE a = 2 

... जैसे समय बीतता जाता के साथ ठीक कर रहे हैं ...

UPDATE table1 
    SET x = 1, y = 2, z = 3 
WHERE a = 2 

(आप कोई परिवर्तन किसी और इस बीच में बनाया अधिलेखित कर दिया हो सकता था)

या निराशावादी होने की जरूरत:

SELECT x, y, z FROM table1 WHERE a = 2 FOR UPDATE 

... समय गुजरता है ...

UPDATE table1 
    SET x = 1, y = 2, z = 3 
WHERE a = 2 

(आप यह सुनिश्चित करें कि कोई भी डेटा बदल गया है जब से तुम यह पूछे कर रहे हैं।)

अलगाव Oracle में उपलब्ध स्तरों के लिए यहाँ की जाँच करें। http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/consist.htm#CNCPT621

1

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

वास्तव में किसी भी डेटाबेस/स्टोरेज इंजन जो लेनदेन से काम करता है उसे लॉकिंग के कुछ रूप करना चाहिए।

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

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

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

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