2012-10-02 6 views
7

एसक्यूएल सर्वर 2008 R2 में स्नैपशॉट अलगाव स्तर के लिए, निम्न MSDN ADO.Net दस्तावेज में उल्लेख किया गया है में एक और स्नैपशॉट लेन-देन में लिखते हैं:Do स्नैपशॉट isolation स्तर में लिखते ब्लॉक एसक्यूएल सर्वर 2008 R2

के लेन-देन को संशोधित डेटा डेटा को पढ़ने वाले लेन-देन को अवरुद्ध नहीं करता है, और डेटा पढ़ने वाले लेन-देन डेटा लिखने वाले लेन-देन को अवरुद्ध नहीं करते हैं, क्योंकि वे सामान्य रूप से SQL सर्वर में डिफ़ॉल्ट रीड कमेटेड अलगाव स्तर के अंतर्गत होंगे।

इस बात का कोई जिक्र नहीं है कि क्या लिखना ब्लॉक लिखता है, जब दोनों लेनदेन स्नैपशॉट अलगाव मोड में होते हैं। तो मेरा प्रश्न इस प्रकार है: एक स्नैपशॉट लेनदेन 1 ब्लॉक में लिखता है एक और SNAPHOT लेनदेन 2 में एक ही टेबल पर लिखता है?

नवीनतम अद्यतन

मेरे सवाल पर सोच का एक बहुत करने के बाद, मैं नीचे के रूप में पैरा में उल्लेख किया है एक निष्कर्ष पर आ रहा हूँ। आशा है कि दूसरों को इस पर अधिक प्रकाश डाला जा सकता है।

कोई रिलेशनल डेटाबेस जिसमें लिखते ब्लॉक नहीं करती लिखते नहीं है। दूसरे शब्दों में, लिखते हैं हमेशा ब्लॉक लिखते हैं। राइट्स में आईएनएसईआरटी या अपडेट या डिलीट जैसे बयान शामिल होंगे। यह सच है इससे कोई फर्क नहीं पड़ता कि आप किस अलगाव स्तर का उपयोग करते हैं, क्योंकि सभी रिलेशनल डेटाबेस को डेटा स्थिरता को लागू करने की आवश्यकता होती है, जब डेटाबेस में एकाधिक लेखन होते हैं। बेशक, इस अवरोध के लिए एक साथ लिखने के लिए विरोधाभासी लिखने की आवश्यकता होती है (जैसा कि उसी तालिका में डालने या उसी पंक्ति को अद्यतन करने के लिए) होता है।

+0

यह भी देखें: http: // stackoverflow।com/प्रश्न/1044164/का उपयोग कर-isolationlevel-स्नैपशॉट-लेकिन-db-है-अब भी ताला लगा – StuartLC

उत्तर

3

नहीं। वे ब्लॉक नहीं करेंगे। इसके बजाय, trans2 में UPDATE आदेश त्रुटि संख्या 3960.

क्योंकि कैसे SNAPSHOT अलगाव स्तर से काम करता है की

साथ विफल हो जाएगा, किसी भी UPDATE आदेश विफल हो सकता है। एकमात्र तरीका आप बता सकते हैं कि त्रुटि 3 9 60 को पकड़ने और संभालने के लिए (इसे आशावादी समेकन कहा जाता है क्योंकि आप इस स्थिति को अक्सर होने की उम्मीद नहीं करते हैं)।

मैंने इस अनुभव का परीक्षण समाप्त कर दिया, क्योंकि यह दस्तावेज़ीकरण से पूरी तरह से स्पष्ट नहीं है। This blog post हालांकि यह अच्छी तरह से दिखाता है।


धारणा: दोनों trans1 और trans2 एक ही तालिका में एक ही पंक्ति UPDATEing कर रहे हैं। दो अलग-अलग पंक्तियों को अपडेट करना ठीक काम करना चाहिए।

+0

IGOs ​​- अपने उत्तर के लिए धन्यवाद। INSERTS के साथ दो स्नैपशॉट लेनदेन के बारे में कैसे? दोनों नई पंक्तियों को डालने की कोशिश कर रहे हैं। वे अभी भी एक-दूसरे को अवरुद्ध करेंगे? – Sunil

+0

@Sunil 'INSERT's अपने अद्यतन पढ़ने के बाद (यह मानते हुए कि आप एक ही प्राथमिक कुंजी सम्मिलित करने का प्रयास नहीं कर रहे हैं) – ligos

+0

@Sunil एक दूसरे को ब्लॉक नहीं करना चाहिए,' INSERT's एक दूसरे को (विभिन्न प्राथमिक कुंजी कल्पना करते हुए) गतिरोध नहीं है। वे क्षणिक रूप से अवरुद्ध हो सकते हैं क्योंकि एक नई पहचान कुंजी बनाई गई है और वास्तव में डेटा लिखा गया है, लेकिन वे किसी फ़ाइल लॉक के लिए प्रतीक्षा नहीं करते हैं या अवरुद्ध नहीं करते हैं। 'अद्यतन करें। मैंने 'DELETE की जांच करने की कोशिश नहीं की (क्योंकि मैं शायद ही कभी उनका उपयोग करता हूं), लेकिन मुझे संदेह है कि वे 'अद्यतन' के समान होंगे। – ligos

4

लिगोस वास्तव में गलत है - यदि दो अलग-अलग लेन-देन स्नैपशॉट के साथ एक ही रिकॉर्ड को अपडेट करने का प्रयास कर रहे हैं, लेनदेन 2 तब तक अवरुद्ध हो जाएगा जब तक लेनदेन 1 लॉक जारी नहीं करता है। फिर, और केवल तभी, आपको त्रुटि 3 9 60 मिल जाएगी। मुझे एहसास है कि यह धागा 2 साल से अधिक पुराना है, लेकिन मैं वहां मिस-सूचना से बचने के लिए चाहता था।

भी लिंक Ligos का संदर्भ ठीक उसी बात मैं ऊपर उल्लेख कर रहा हूँ (अंतिम गैर-लाल पैरा बाहर की जाँच)

लिखें बनाम लिखें केवल नहीं अवरुद्ध हो जाएगा कहते हैं अगर दो रिकॉर्ड (यानी। पंक्तियाँ) अद्यतन करने की कोशिश कर रहे हैं

संबंधित मुद्दे