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

ORA-08177:इस लेन-देन के लिए एक्सेस को क्रमबद्ध नहीं कर सकता

आप एक क्रमबद्ध लेन-देन का उपयोग कर रहे हैं जो किसी अन्य लेन-देन की प्रतीक्षा करता है जो उसी तालिका को ROLLBACK पर लॉक कर देता है ।

यदि यह अन्य लेन-देन रोलबैक नहीं करता है, बल्कि इसके बजाय प्रतिबद्ध है, तो आपको यह त्रुटि मिलेगी।

परिदृश्य इस प्रकार प्रतीत होता है:

  1. Alice अपना ब्राउज़र सत्र खोलता है जो DELETE FROM TABLE1 WHERE Version = 'v1' कॉल करता है

    • Bob अपना सत्र खोलता है जो DELETE FROM TABLE1 WHERE Version = 'v1' कहता है Alice . के बाद किया लेकिन उसके प्रतिबद्ध होने से पहले।

    Bob Alice . के बाद से लेन-देन का इंतजार है Version = 'v1' . के साथ पंक्तियों को लॉक कर दिया

    • Alice अपना लेन-देन करता है

    • Bob का लेन-देन विफल हो जाता है Cannot serialize access

इसे हल करने के लिए, TRANSACTION ISOLATION LEVEL सेट करें करने के लिए READ COMMITTED :

transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted)

इस मामले में, Bob Alice . के बाद की क्वेरी फिर से जारी की जाएगी अपने परिवर्तन करता है, जैसे कि Bob का लेन-देन Alice . के बाद शुरू किया गया था एक प्रतिबद्ध था।

अपडेट करें

क्या आप कृपया अपने कनेक्शन का कोई अंश पोस्ट कर सकते हैं?

ऐसा करने के लिए, कनेक्ट करने के ठीक बाद यह आदेश जारी करें:

(New OracleCommand("ALTER SESSION SET SQL_TRACE=TRUE", connection, transaction)).ExecuteNonQuery();

, फिर $ORACLE_HOME\admin\udump . में देखें एक ताज़ा *.trc . के लिए फ़ाइल




  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. ऑनलाइन बनाम ऑफलाइन बैकअप

  3. ओरेकल के लिए एमएस एक्सेस आसान रूपांतरण/माइग्रेशन

  4. Oracle बाहरी तालिका उदाहरण

  5. किसी फ़ंक्शन को कॉल करने के लिए `SELECT` का उपयोग करना