2012-09-17 12 views
5

में लॉकिंग टेबल मेरे पास एक टेबल के साथ एक SQL डेटाबेस है जिसे मैं लॉक करना चाहता हूं। मैं इकाई फ्रेमवर्क का उपयोग कर रहा हूँ। असल में, ऐसी कई प्रक्रियाएं होती हैं जो प्रत्येक डेटाबेस को समवर्ती रूप से लिखना चाहती हैं। उनमें से प्रत्येक कुछ तालिका में एक पंक्ति अद्यतन करना चाहता है। हालांकि, मैं चाहता हूं कि उनमें से केवल एक ही समय में ऐसा करने में सक्षम हो।इकाई फ्रेमवर्क

क्या कोई भी संपूर्ण टेबल लॉक करने का कोई तरीका है, जैसे किसी को भी नई पंक्तियां डालने या पंक्तियों को अपडेट करने से रोकने के लिए?

धन्यवाद, ईसाई

+2

यह डिफ़ॉल्ट व्यवहार है।लेनदेन का उपयोग करने के अलावा आपको कुछ भी नहीं करना चाहिए, अगर आप एक ऑपरेशन –

उत्तर

2

यह मेरे के लिए स्पष्ट क्यों आप इस चाहेगा नहीं है, लेकिन अगर तुम सच में पूरे तालिका आप कर सकते थे लॉक करना चाहते हैं:

  • पंक्ति और पृष्ठ ताला बंद कर दें

    : इतना है कि सब कुछ ताला

उदाहरण here से अनुकूलित एक मेज के बदले

ALTER INDEX [MyIndexName] ON [dbo].[MyTableName] SET (ALLOW_ROW_LOCKS = OFF, ALLOW_PAGE_LOCKS = OFF) 

नोट: इस मानती है कि आपके आवेदन पूरी तरह से "मालिक" इन तालिकाओं - Serializable अलगाव स्तर का उपयोग करने के कुछ अन्य एप्लिकेशन

  • आपके प्रश्नों सेट इस लागू करते हैं और तोड़ने के लिए नहीं करना चाहते

उदाहरण here से अनुकूलित:

TransactionOptions topt = new TransactionOptions(); 
topt.IsolationLevel = System.Transactions.IsolationLevel.Serializable; 
using (var tran = new TransactionScope(TransactionScopeOption.Required, topt)) { 
    //do stuff 
} 
+0

हाँ में कई टेबल बदल रहे हैं तो मैं यही देख रहा था। धन्यवाद! – Christian

0

संक्षिप्त विवरण से, यह संदिग्ध है कि एक तालिका लॉक वास्तव में इस समस्या को हल करने के लिए आवश्यक है। कुछ सामान्य समाधान जो अधिक स्केलेबल हैं उनमें शामिल हैं:

1) एक धारावाहिक लेनदेन बनाएं जो पहले बयान के रूप में ब्याज के रिकॉर्ड को पढ़ता या अपडेट करता है। सभी अद्यतनों को इस पैटर्न का पालन करने का प्रयास करना चाहिए।

2) (1) जैसे एक read_committed लेनदेन बनाएं, लेकिन एक समवर्ती अपवाद पर पुन: पढ़ने/पुनः प्रयास क्षमता शामिल करें।

यह दुर्लभ है कि किसी को कभी भी एक टेबल को लॉक करने की आवश्यकता होनी चाहिए। एक मामला यह आवश्यक हो सकता है जब मैन्युअल रूप से निर्धारित पहचान फ़ील्ड मान और किसी अन्य सत्र के साथ टकराव का मौका शामिल हो।

के लिए बस पर कॉल करें, एक लेनदेन बनाया जा सकता है और तालिका शुरुआत में बंद हो जाती है। रीड लिखने और लिखने या लिखने से रोकने के लिए अनन्य को रोकने के लिए लॉक "एक्स" (अनन्य) हो सकता है। इस उत्तर एक सपा का उपयोग करता है:

SO #3662766

एक विकल्प के रूप में, एक आवेदन ताला भी इस्तेमाल किया जा सकता है।

sp_getapplock

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