ट्रिगर का उपयोग करके क्रॉस डेटाबेस में डेटा का ऑडिट और सिंक्रोनाइज़ करना
के बारे में
यह कुछ कोड का एक बहुत ही अलग किया गया संस्करण है जिसे हमने पिछली क्लाइंट साइट पर स्थापित किया था। उनके पास अलग-अलग सर्वर (ग्राहक और डायलर) पर दो बहुत अलग डेटाबेस थे, जिन्हें वास्तविक समय में कुछ डेटा को सिंक्रोनाइज़ करने की आवश्यकता होती थी।
इसे करने के कुछ तरीके थे, नौकरी या ट्रिगर से जुड़ी प्रतिकृति, या संग्रहीत प्रक्रियाएं, उनके उदाहरण में इसे नौकरी होना था, क्योंकि हमारे पास डेटाबेस में से किसी एक के लिए स्रोत कोड नहीं था, हालांकि मेरा पसंदीदा विधि कुछ इस तरह से ट्रिगर्स का उपयोग करेगी ...
SQL
USE ClaytabaseAcadamyGOCREATE TABLE Customer(CustomerID INT IDENTITY(1,1) CONSTRAINT PK_CustomerID PRIMARY KEY,CustomerName NVARCHAR(100),CustomerStatus INT--,Other Customer Data...)CREATE TABLE CustomerAudit(CustomerAuditID INT IDENTITY(1,1) CONSTRAINT PK_CustomerAuditID PRIMARY KEY,CustomerAuditType NVARCHAR(100),CustomerAuditDate DATETIME DEFAULT GETDATE(),CustomerID INT,CustomerName NVARCHAR(100),CustomerStatus INT) CREATE TABLE Dialler(CustomerID INT CONSTRAINT PK_DiallerCustomerID PRIMARY KEY,CustomerStatus INT,CustomerName NVARCHAR(100),DiallerStatus INT--Other Dialler Records)GO
क्या ये सहायक था?
तो अब हमने कुछ बहुत ही बुनियादी टेबल बनाए हैं जो ग्राहक डेटा स्टोर कर सकते हैं। आगे हम डायलर साइड पर अपडेट रिकॉर्ड्स को हैंडल करने के लिए कुछ स्टोर्ड प्रोसीजर बनाएंगे।
संग्रहीत प्रक्रियाओं के रूप में मैंने इसे करने का कारण डेटा की मात्रा को कम रखना है (मैं सर्वर 1 को सर्वर 2 पर डेटाबेस रिकॉर्ड नहीं भेजना चाहता), यह प्रभावी रूप से वेब वातावरण में सामान्य रूप से क्या किया जाएगा।
SQL
USE ClaytabaseAcadamyGOCREATE PROC DiallerUpdate(@CustomerID INT,@CustomerName NVARCHAR(100),@CustomerStatus INT) AS BEGINUPDATE Dialler SET CustomerStatus=@CustomerStatus,CustomerName=@CustomerNameWHERE CustomerID=@CustomerIDENDGOCREATE PROC DiallerInsert(@CustomerID INT,@CustomerName NVARCHAR(100),@CustomerStatus INT) AS BEGININSERT INTO Dialler(CustomerID,CustomerName,CustomerStatus,DiallerStatus)SELECT @CustomerID,@CustomerName,@CustomerStatus,0ENDGOCREATE PROC DiallerDelete(@CustomerID INT) AS BEGINDELETE FROM DiallerWHERE CustomerID=@CustomerIDENDGO
क्या ये सहायक था?
अब हमने इन्हें बना लिया है, हम एक ट्रिगर बनाने पर आगे बढ़ सकते हैं जो डेटा भेजने का काम संभालेगा और जैसा कि हम कर रहे हैं, हम अपने रिकॉर्ड का ऑडिट भी कर सकते हैं।
SQL
USE ClaytabaseAcadamyGOCREATE TRIGGER CustomerInsert ON Customer AFTER INSERTAS BEGINDECLARE @CustomerID INT,@CustomerName NVARCHAR(100),@CustomerStatus INT--Get Record DetailsSELECT @CustomerID=CustomerID,@CustomerName=CustomerName,@CustomerStatus=CustomerStatus FROM inserted--Add to AuditINSERT INTO CustomerAudit(CustomerAuditType,CustomerID,CustomerName,CustomerStatus)SELECT 'Record Created',@CustomerID,@CustomerName,@CustomerStatus--Call Insert ProcedureEXEC dbo.DiallerInsert @CustomerID,@CustomerName,@CustomerStatusENDGOCREATE TRIGGER CustomerUpdate ON Customer AFTER UpdateAS BEGINDECLARE @CustomerID INT,@CustomerName NVARCHAR(100),@CustomerStatus INT--Get Record DetailsSELECT @CustomerID=CustomerID,@CustomerName=CustomerName,@CustomerStatus=CustomerStatus FROM inserted--Add to AuditINSERT INTO CustomerAudit(CustomerAuditType,CustomerID,CustomerName,CustomerStatus)SELECT 'Record Updated',@CustomerID,@CustomerName,@CustomerStatus--Call Update ProcedureEXEC dbo.DiallerUpdate @CustomerID,@CustomerName,@CustomerStatusENDGO CREATE TRIGGER CustomerDelete ON Customer AFTER DELETEAS BEGINDECLARE @CustomerID INT,@CustomerName NVARCHAR(100),@CustomerStatus INT--Get Record DetailsSELECT @CustomerID=CustomerID,@CustomerName=CustomerName,@CustomerStatus=CustomerStatus FROM deleted--Add to AuditINSERT INTO CustomerAudit(CustomerAuditType,CustomerID,CustomerName,CustomerStatus)SELECT 'Record Deleted',@CustomerID,@CustomerName,@CustomerStatus--Call Delete ProcedureEXEC dbo.DiallerDelete @CustomerIDENDGO
क्या ये सहायक था?
और यह बहुत कुछ है, अब हमारे पास डेटा का ऑडिट है, और दोनों पक्षों के रिकॉर्ड मिलीसेकंड के भीतर समन्वयित किए जाएंगे ... यदि इसे क्रॉस सर्वर करने की आवश्यकता है, तो EXEC कमांड को {servername} में बदलें। {डेटाबेसनाम} .{स्कीमा}.DialerDelete आदि/
यहां हम इसका परीक्षण कर सकते हैं।
SQL
USE ClaytabaseAcadamyGO--Insert DataINSERT INTO Customer(CustomerName,CustomerStatus) SELECT ' Name 1',0INSERT INTO Customer(CustomerName,CustomerStatus) SELECT ' Name 2',0INSERT INTO Customer(CustomerName,CustomerStatus) SELECT ' Name 3',0UPDATE Customer SET CustomerStatus=2 WHERE CustomerID=1UPDATE Customer SET CustomerName=' Name 4' WHERE CustomerID=2DELETE FROM Customer WHERE CustomerID=3--Review DataSELECT * FROM DiallerSELECT * FROM CustomerSELECT * FROM CustomerAudit
Results
Dialler Records | |||
CustomerID | CustomerStatus | CustomerName | DiallerStatus |
1 | 2 | Name 1 | 0 |
2 | 0 | Name 4 | 0 |
Customer Records | ||
CustomerID | CustomerName | CustomerStatus |
1 | Name 1 | 2 |
2 | Name 4 | 0 |
Audit Records | ||||
CustomerAuditID | CustomerAuditType | CustomerID | CustomerName | CustomerStatus |
1 | Record Created | 1 | Name 1 | 0 |
2 | Record Created | 2 | Name 2 | 0 |
3 | Record Created | 3 | Name 3 | 0 |
4 | Record Updated | 1 | Name 1 | 2 |
5 | Record Updated | 2 | Name 4 | 0 |
6 | Record Deleted | 3 | Name 3 | 0 |