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

ओरेकल ट्रेस फ़ाइल से गतिरोध त्रुटि का कारण ढूँढना

सबसे पहले, select कथन ओरेकल में कभी भी कुछ भी लॉक नहीं करता है, केवल डेटा के अंतिम उपलब्ध संगत संस्करण का उपयोग करता है। यह select ... for update जो update . जैसे डेटा को लॉक कर देता है Oracle 9i के बाद से, लेकिन कोई for update . नहीं हैं प्रश्न से प्रश्न में खंड।

Resource Name          process session holds waits  process session holds waits
TM-000151a2-00000000       210      72    SX   SSX      208      24    SX   SSX

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

Resource Name          process session holds waits  process session holds waits
TM-000151a2-00000000       208      24    SX   SSX      210      72    SX   SSX

यह (दूसरी पंक्ति) ठीक उसी स्थिति को प्रदर्शित करता है, लेकिन विपरीत दिशा में:सत्र #24 SSX लॉक उपलब्ध होने की प्रतीक्षा करता है, लेकिन सत्र #72 द्वारा अवरुद्ध किया जाता है जो पहले से ही उसी टेबल पर SX लॉक रखता है।

इसलिए, सत्र #24 और सत्र #72 एक दूसरे को अवरुद्ध करते हैं:गतिरोध होता है।

दोनों प्रकार के लॉक (SX और SSX) टेबल-लेवल लॉक हैं।
स्थिति को समझने के लिए मैं फ्रेंक पचोट के इस लेख को पढ़ने की सलाह देता हूं।

नीचे इस लेख का उद्धरण दिया गया है, जो आपकी स्थिति के लिए सीधे प्रासंगिक है (ध्यान दें कि SSX और SRX संक्षिप्ताक्षर समान हैं):

<ब्लॉकक्वॉट>

रेफ़रेंशियल अखंडता भी TM ताले प्राप्त करती है। उदाहरण के लिए, जब आप एक डिलीट जारी करते हैं, या पैरेंट टेबल पर कुंजी पर अपडेट करते हैं, तो अनइंडेक्स्ड फॉरेन कीज़ के साथ सामान्य समस्या चाइल्ड टेबल पर S लॉक की ओर ले जाती है। इसका कारण यह है कि एक सूचकांक के बिना, ओरेकल के पास एक समवर्ती सम्मिलन को रोकने के लिए लॉक करने के लिए कोई भी निचला स्तर संसाधन नहीं है जो संदर्भात्मक अखंडता का उल्लंघन कर सकता है।
जब विदेशी कुंजी कॉलम एक नियमित इंडेक्स में अग्रणी कॉलम होते हैं, तो पहली इंडेक्स एंट्री पेरेंटवैल्यू को एक संसाधन के रूप में इस्तेमाल किया जा सकता है और एक पंक्ति स्तर TXlock के साथ लॉक किया जा सकता है।
और क्या होगा यदि रेफरेंशियल अखंडता में एक डिलीट कैस्केड है? एस मोड के अलावा, चाइल्ड टेबल में पंक्तियों को अपडेट करने का इरादा है, जैसा कि रो एक्स (आरएक्स) मोड के साथ होता है। यह वह जगह है जहां शेयर रो एक्सक्लूसिव (SRX) होता है:S+RX=SRX।

तो, सबसे संभावित रूप यह है कि सत्र #72 और सत्र #24 EMPLOYEE में कुछ पंक्तियों को हटा देता है एक ही समय में तालिका, और on delete cascade . हैं EMPSAL_EMP_ID . के लिए बाधा EMPLOYEE_SALARY . पर अनुक्रमणिका की अनुपस्थिति के साथ संयोजन में तालिका जिसमें EMPSAL_EMP_ID पहले सूचीबद्ध कॉलम।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-01653:टेबल स्पेस में तालिका का विस्तार करने में असमर्थ ORA-06512

  2. पैकेज निष्पादित करते समय त्रुटि आ रही है

  3. GI 12.2 अपग्रेड के लिए ASM में VOTE डिस्कग्रुप बढ़ाएँ

  4. Oracle SQL - सप्ताह के अनुसार योग और समूह डेटा

  5. ORA-04091:तालिका [blah] उत्परिवर्तित हो रही है, ट्रिगर/फ़ंक्शन इसे नहीं देख सकता है