2011-10-18 25 views
10

तो मैं एक डेडलॉक समस्या here की तरह दिखने की कोशिश कर रहा हूं। मैंने डीबीसीसी ट्रेसीन (1222, -1) और डीबीसीसी ट्रेसीन (1204, -1) का उपयोग करके डेडलॉक लॉगिंग सक्षम कर दी है। मैं यह सुनिश्चित करने के लिए परीक्षण करना चाहता हूं कि लॉगिंग डेडलॉक पकड़ लेता है, तो मैं एमएस एसक्यूएल 2005 में किसी को कैसे उत्पन्न कर सकता हूं? धन्यवाद,जानबूझकर डेडलॉक का कारण कैसे बनें?

+0

यदि आपकी अन्य पोस्ट में समस्या अवरुद्ध करने के विरोध में डेडलॉक्स है तो आपको टाइमआउट त्रुटि के बजाय डेडलॉक त्रुटि मिलनी चाहिए। –

उत्तर

30

यहाँ कुछ T-SQL जानबूझकर एक गतिरोध पैदा करने के लिए है।

वस्तु निर्माण:

CREATE TABLE dbo.DeadLockTest (col1 INT) 
INSERT dbo.DeadLockTest SELECT 1 

CREATE TABLE dbo.DeadLockTest2 (col1 INT) 
INSERT dbo.DeadLockTest2 SELECT 1 

एक नई क्वेरी विंडो खोलें और इस कोड को पेस्ट करें और इसे निष्पादित करें:

BEGIN TRAN 
UPDATE dbo.DeadLockTest SET col1 = 1 

एक और नई क्वेरी विंडो खोलें और पेस्ट और निष्पादित इस कोड:

BEGIN TRAN 
UPDATE dbo.DeadLockTest2 SET col1 = 1 
UPDATE dbo.DeadLockTest SET col1 = 1 

अपनी पहली क्वेरी विंडो पर वापस जाएं (पहले BEGIN TRAN sta के साथ tement) और इस कोड को निष्पादित करें:

UPDATE dbo.DeadLockTest2 SET col1 = 1 

वोला! यह एक डेडलॉक है।

5

यह काम करना चाहिए:

  • सम्मिलित दो रिकॉर्ड, ए और बी
  • ओपन दो लेन-देन।
  • दूसरे लेनदेन में पहले लेनदेन और बी में रिकॉर्ड ए अपडेट करें।
  • जब आप जानते हैं यकीन है कि के लिए उन अपडेट किया जाता है:
    • अद्यतन रिकॉर्ड बी पहले लेनदेन और एक दूसरे सौदे में में।
संबंधित मुद्दे