2008-12-22 15 views
5

मैं एमएस एसक्यूएल सर्वर में अद्यतन करने के लिए एक पंक्ति का चयन, और यह मैं जब तक या तो अद्यतन या रद्द करने, कौन-सा विकल्प बेहतर है बंद कर दिया करना चाहते हैं: -निराशावादी ताला

1) एक प्रश्न संकेत का प्रयोग करें जैसे UPDLOCK 2) लेनदेन 3) किसी भी अन्य विकल्प के लिए पुनरावर्तनीय पढ़ने अलगाव स्तर का उपयोग करें।

धन्यवाद, चक।

उत्तर

3

न तो। जब आपका उपयोगकर्ता डेटा इनपुट कर रहा है, तो आप लगभग लेनदेन को कभी भी नहीं खोलना चाहते हैं। यदि आप में हैं, तो इस तरह निराशावादी ताला लगाने के लिए, लोग आम तौर पर अपनी कार्यक्षमता को घुमाकर ऐसा करते हैं।

आप जो कर रहे हैं उसके पूर्ण विनाश पर विचार करें। मैंने एक बार उस प्रणाली पर काम किया जिसने इस तरह लॉकिंग लागू किया। आप अक्सर स्टेल लॉक के टन में भाग लेते हैं, और जब आप इन पर फॉइस्ट करते हैं तो आपके उपयोगकर्ता बहुत जल्दी उलझन में आ जाते हैं और क्रोधित हो जाते हैं। हमारे मामले में हमारे लिए समाधान पूरी तरह से इस लॉकिंग कार्यक्षमता को हटाना था।

+1

ध्यान दें कि ओपी की स्थिति के अंत उपयोगकर्ता द्वारा डेटा के प्रवेश के साथ कुछ भी नहीं हो सकता है। – RoadWarrior

8

यदि आप एंड-यूजर जैसे किसी अन्य संसाधन पर इंतजार कर रहे हैं, तो डेव मार्कले की सलाह लें और ऐसा न करें।

अन्यथा, निम्नलिखित T-SQL कोड का प्रयास करें:

BEGIN TRAN 

SELECT * 
FROM authors AU 
WITH (HOLDLOCK, ROWLOCK) 
WHERE AU.au_id = '274-80-9391' 

/* Do all your stuff here while the row is locked */ 

COMMIT TRAN 

HOLDLOCK संकेत विनम्रता एसक्यूएल सर्वर पूछता ताला धारण करने के लिए जब तक आप लेन-देन के लिए प्रतिबद्ध। ROWLOCK संकेत विनम्रतापूर्वक SQL सर्वर से एक पृष्ठ या टेबल लॉक जारी करने के बजाय केवल इस पंक्ति को लॉक करने के लिए कहता है।

ध्यान रखें कि यदि कई पंक्तियां प्रभावित होती हैं, तो SQL सर्वर पहल करेगा और पेज लॉक में आगे बढ़ेगा, या आपके पास पंक्ति सर्वर ताले की पूरी सेना होगी जो आपके सर्वर की मेमोरी भरती है और प्रसंस्करण को कम कर देती है।

0

बस ध्यान दें कि ROWLOCK SQL सर्वर का उपयोग करने के बावजूद यदि आवश्यक हो तो अभी भी एक पूर्ण पृष्ठ लॉक लेना चुन सकता है।

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