Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर पर DEADLOCK का अनुकरण कैसे करें?

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

--Two global temp tables with sample data for demo purposes.
CREATE TABLE ##Employees (
    EmpId INT IDENTITY,
    EmpName VARCHAR(16),
    Phone VARCHAR(16)
)
GO

INSERT INTO ##Employees (EmpName, Phone)
VALUES ('Martha', '800-555-1212'), ('Jimmy', '619-555-8080')
GO

CREATE TABLE ##Suppliers(
    SupplierId INT IDENTITY,
    SupplierName VARCHAR(64),
    Fax VARCHAR(16)
)
GO

INSERT INTO ##Suppliers (SupplierName, Fax)
VALUES ('Acme', '877-555-6060'), ('Rockwell', '800-257-1234')
GO

अब SSMS में दो खाली क्वेरी विंडो खोलें। सत्र 1 के लिए कोड को एक क्वेरी विंडो में और सत्र 2 के लिए कोड को दूसरी क्वेरी विंडो में रखें। फिर दो सत्रों में से प्रत्येक को चरण दर चरण निष्पादित करें, आवश्यकतानुसार दो क्वेरी विंडो के बीच आगे-पीछे करें। ध्यान दें कि प्रत्येक लेन-देन में एक संसाधन पर लॉक होता है जिसे अन्य लेनदेन भी लॉक करने का अनुरोध कर रहा है।

Session 1                   | Session 2
===========================================================
BEGIN TRAN;                 | BEGIN TRAN;
===========================================================
UPDATE ##Employees
SET EmpName = 'Mary'
WHERE EmpId = 1
===========================================================
                             | UPDATE ##Suppliers
                             | SET Fax = N'555-1212'
                             | WHERE SupplierId = 1
===========================================================
UPDATE ##Suppliers
SET Fax = N'555-1212'
WHERE SupplierId = 1
===========================================================
<blocked>                    | UPDATE ##Employees
                             | SET Phone = N'555-9999'
                             | WHERE EmpId = 1
===========================================================
                             | <blocked>
===========================================================

एक गतिरोध परिणाम; एक लेन-देन समाप्त होता है और दूसरा लेन-देन निरस्त कर दिया जाता है और क्लाइंट को त्रुटि संदेश 1205 भेजा जाता है।

किसी भी खुले लेनदेन को करने (या रोलबैक) करने के लिए "सत्र 1" और "सत्र 2" के लिए एसएसएमएस क्वेरी विंडो बंद करें। अंत में, अस्थायी तालिकाओं को साफ करें:

DROP TABLE ##Employees
GO
DROP TABLE ##Suppliers
GO



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. अल्पविराम से अलग किए गए मानों वाला स्तंभ खोजना

  2. MS SQL सर्वर क्षमता MySQL FIELD () फ़ंक्शन के समान क्या है?

  3. SQL सर्वर की संख्या धीमी है

  4. SQL क्वेरी दिन के अनुसार समूह करने के लिए

  5. SQL सर्वर के साथ एकल तालिका में शामिल होकर मैं सारांश कैसे बना सकता हूँ?