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