आप एक क्रमबद्ध लेन-देन का उपयोग कर रहे हैं जो किसी अन्य लेन-देन की प्रतीक्षा करता है जो उसी तालिका को ROLLBACK पर लॉक कर देता है ।
यदि यह अन्य लेन-देन रोलबैक नहीं करता है, बल्कि इसके बजाय प्रतिबद्ध है, तो आपको यह त्रुटि मिलेगी।
परिदृश्य इस प्रकार प्रतीत होता है:
-
Aliceअपना ब्राउज़र सत्र खोलता है जोDELETE FROM TABLE1 WHERE Version = 'v1'कॉल करता हैBobअपना सत्र खोलता है जोDELETE FROM TABLE1 WHERE Version = 'v1'कहता हैAlice. के बाद किया लेकिन उसके प्रतिबद्ध होने से पहले।
BobAlice. के बाद से लेन-देन का इंतजार है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 . के लिए फ़ाइल