Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

क्या तालिका में विभिन्न पंक्तियों को अद्यतन और हटाते समय गतिरोध संभव है?

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

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

फिर से, ऊपर मांगी गई जानकारी पोस्ट करें, और मुझे विश्वास है कि हम आपके गतिरोध का मूल कारण निर्धारित कर सकते हैं।

7/30/2012 को जोड़ा गया **

निम्नलिखित जोड़ना, अब जबकि डेडलॉक ट्रेस फ़ाइल की आपूर्ति की गई है:ठीक है, सबसे पहले, ट्रेस फ़ाइल सामग्री के आधार पर, यह एक साधारण गतिरोध है क्योंकि सत्र ओवरलैपिंग/पंक्तियों पर टकराने के कारण वे लॉक करने का प्रयास कर रहे हैं। गतिरोध के बारे में आपकी पिछली टिप्पणियों के बावजूद भिन्न . पर है पंक्तियाँ, मैं यहाँ आपको यह बताने के लिए हूँ कि यह विशेष गतिरोध उसी पर पंक्ति-स्तरीय लॉकिंग के कारण है पंक्तियाँ।

तथ्य यह है कि गतिरोध ग्राफ़ दिखाता है कि लॉक किस मोड में है 'X' (अनन्य) है और जिस मोड पर लॉक की प्रतीक्षा की जाती है वह 'X' है, मुझे बताता है कि यह सरल पंक्ति-स्तरीय लॉकिंग है।

इस मामले में, SID 20 "RPT_TABLE.TEMP_TABLE_T1 से हटाएं जहां TEMP_T1_ID=:1" निष्पादित कर रहा है और पहले से ही है पंक्तिबद्ध AAAPDIAAMAAAEfIAAA पर ताला।

इस बीच, SID 790 "RPT_TABLE.T1_UPDATE_StoredProc" को क्रियान्वित कर रहा है, जबकि पहले से ही पंक्तिबद्ध AAAPDIAAMAAAEfGAAA पर लॉक है।

ट्रेसफाइल के "पंक्तियों पर प्रतीक्षा की गई" खंड से ध्यान दें, कि SID 20 उस पंक्ति पर प्रतीक्षा कर रहा है जो SID 790 रखती है और SID 790 उस पंक्ति पर प्रतीक्षा कर रही है जिसे SID 20 धारण कर रहा है। यह एक क्लासिक गतिरोध है।

कुछ अतिरिक्त जानकारी:

  • एनक्यू प्रकार TX है (गतिरोध ग्राफ देखें), इसलिए, यह निश्चित रूप से नहीं है अनुक्रमित विदेशी चाबियों के कारण लॉकिंग। यदि यह अनइंडेक्स किए गए FK के कारण लॉक हो रहा था, तो एनक्यू प्रकार TM होगा, TX नहीं। (कम से कम एक अन्य मामला है जहां टीएम एनक्यू शामिल हैं, और यह अनइंडेक्स्ड एफके नहीं है। इसलिए, यह न मानें कि टीएम एनक्यू का मतलब हमेशा अनइंडेक्स्ड एफके होता है।)

  • जिस मोड पर लॉक की प्रतीक्षा की जा रही है वह 'X' (अनन्य) है, इसलिए यह रो-लेवल लॉकिंग है। यदि प्रतीक्षा मोड 'S' (साझा) था, तो यह नहीं . होता पंक्ति-स्तरीय लॉकिंग हो। बल्कि, यह आईटीएल की कमी या पीके या यूके प्रवर्तन हो सकता है।

आशा है कि इससे मदद मिलेगी!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle तालिका को गतिशील रूप से पिवट करना

  2. Oracle में वर्तमान तिथि कैसे प्राप्त करें

  3. Oracle डाटाबेस प्रमाणन परीक्षा के 50 प्रकार

  4. ओरेकल के साथ एन-हाइबरनेट में लंबे तार त्रुटि का कारण बनते हैं

  5. डंपिंग डेटा ब्लॉक