इस लेख में, आइए हम मर्ज प्रतिकृति में पंक्ति-स्तर और स्तंभ-स्तरीय ट्रैकिंग विकल्पों की समीक्षा करें और मर्ज प्रतिकृति के दौरान विरोधों का पता लगाने में इनका उपयोग कैसे किया जाता है।
प्रतिकृति मर्ज करें: मर्ज प्रतिकृति का उपयोग डेटा को प्रकाशक से ग्राहक तक और ग्राहक से प्रकाशक तक दोनों तरीकों से दोहराने के लिए किया जाता है।
वस्तुओं का प्रारंभिक स्नैपशॉट लिया जाता है और ग्राहकों पर लागू किया जाता है। वृद्धिशील डेटा परिवर्तन और स्कीमा परिवर्तन ट्रिगर का उपयोग करके ट्रैक किए जाते हैं और ग्राहकों पर लागू होते हैं जब ग्राहक प्रकाशक के साथ सिंक्रनाइज़ करता है।
संघर्ष:
मर्ज प्रतिकृति में, ग्राहक और प्रकाशक दोनों स्वतंत्र हैं, और डेटा को किसी भी नोड पर संशोधित किया जा सकता है।
जब प्रतिकृति चक्र के भीतर प्रकाशक और ग्राहक दोनों पर डेटा संशोधित किया जाता है, और जब ग्राहक प्रकाशक के साथ सिंक्रनाइज़ करता है, तो एक विरोध उत्पन्न होता है। मर्ज एजेंट संघर्ष समाधानकर्ता के आधार पर दोनों पक्षों के विजेता का निर्धारण करता है। डिफ़ॉल्ट रूप से, विजेता का निर्धारण क्लाइंट या सर्वर सदस्यता, पुल या पुश सदस्यता आदि जैसे विभिन्न मापदंडों द्वारा किया जाता है।
संघर्ष का पता लगाना:
विरोध का पता लगाना इस बात पर निर्भर करता है कि हम लेख के लिए किस प्रकार की ट्रैकिंग को कॉन्फ़िगर करते हैं।
- पंक्ति-स्तरीय ट्रैकिंग: यदि दोनों सिरों पर एक ही पंक्ति के किसी कॉलम में डेटा परिवर्तन किए जाते हैं, तो इसे एक विरोध माना जाता है।
- स्तंभ-स्तरीय ट्रैकिंग: यदि दोनों सिरों पर एक ही कॉलम पर डेटा परिवर्तन किए जाते हैं, तो यह परिवर्तन एक विरोध के रूप में योग्य है।
समाधानकर्ता:
जब कोई विरोध होता है, तो समाधानकर्ता विजेता डेटा को दोनों सिरों पर लागू करते हैं।
डिफ़ॉल्ट रूप से, यदि प्रकाशक और ग्राहक के बीच कोई विरोध होता है, तो प्रकाशक हमेशा जीतता है।
यदि दो ग्राहकों के बीच कोई विरोध होता है, तो विजेता का निर्धारण क्लाइंट/सर्वर सब्सक्राइबर और पुल/पुश सब्सक्रिप्शन द्वारा किया जाता है।
डिफ़ॉल्ट रिज़ॉल्वर के अलावा, कुछ कस्टम रिज़ॉल्वर भी हैं। हम आने वाले लेखों में कस्टम रिज़ॉल्वर पर चर्चा करेंगे।
पंक्ति-स्तरीय ट्रैकिंग के साथ मर्ज प्रतिकृति कॉन्फ़िगर करें:
प्रकाशक डेटाबेस:pub_db
सब्सक्राइबर डेटाबेस:sub_db
आइए "TBL_EMP" तालिका बनाएं और इसे मर्ज प्रतिकृति में जोड़ें।
CREATE TABLE TBL_EMP (EmpID INT, Emp_FName varchar(100),Emp_Lname varchar(100)) INSERT INTO TBL_EMP VALUES (1,'Jhon','P') INSERT INTO TBL_EMP VALUES (2,'Alison','P') INSERT INTO TBL_EMP VALUES (3,'Angela','P')
मर्ज प्रतिकृति को कॉन्फ़िगर करने के लिए, प्रकाशक को स्थानीय वितरण या दूरस्थ वितरण का उपयोग करने के लिए कॉन्फ़िगर किया जाना चाहिए।
एक बार वितरण कॉन्फ़िगर हो जाने के बाद, SSMS में प्रतिकृति फ़ोल्डर में नेविगेट करें और स्थानीय प्रकाशनों पर राइट-क्लिक करें।
अगला क्लिक करें और प्रकाशन डेटाबेस का चयन करें, अगला click क्लिक करें और मर्ज प्रतिकृति का चयन करें, 2008 या बाद के संस्करण का चयन करें और तालिका को प्रतिकृति में जोड़ें।
अब लेख के गुणों पर क्लिक करें और हाइलाइट किए गए लेख के गुणों का चयन करें।
पंक्ति-स्तरीय ट्रैकिंग बनने के लिए ट्रैकिंग स्तर चुनें।
डिफ़ॉल्ट रूप से, यह पंक्ति-स्तरीय ट्रैकिंग होगी। ठीक, अगला, अगला क्लिक करें . यदि आप ग्राहक को विशिष्ट डेटा भेजना चाहते हैं तो एक फ़िल्टर जोड़ें, अन्यथा अनदेखा करें, सक्षम करें बनाएं स्नैपशॉट तुरंत , एजेंट सुरक्षा को अपनी आवश्यकताओं के अनुसार कॉन्फ़िगर करें, सक्षम करें प्रकाशन बनाएं , प्रकाशन का नाम निर्दिष्ट करें और समाप्त करें . क्लिक करें ।
एक बार प्रारंभिक स्नैपशॉट जेनरेट हो जाने पर, सब्सक्राइबर जोड़ें।
प्रकाशक पर प्रतिकृति फ़ोल्डर में आपके द्वारा बनाए गए प्रकाशन पर नेविगेट करें, राइट-क्लिक करें और नई सदस्यता चुनें।
अगला क्लिक करें , प्रकाशन का चयन करें, अगला क्लिक करें और अपनी आवश्यकताओं के अनुसार पुल या पुश सदस्यता का चयन करें। इस मामले में, मैंने पुश सब्सक्रिप्शन का इस्तेमाल किया।
सदस्यता डेटाबेस चुनें और अगला . क्लिक करें , मर्ज एजेंट के लिए लॉगिन क्रेडेंशियल कॉन्फ़िगर करें, और अगला . क्लिक करें ।
अपनी आवश्यकताओं के अनुसार एजेंट शेड्यूल चुनें। इस मामले में, मैंने केवल मांग पर चलाएं . का उपयोग किया . अगला क्लिक करें , तुरंत प्रारंभ करें . चुनें और ग्राहक को सदस्यता प्रकार के रूप में चुनें, अगला . क्लिक करें , सक्षम करें सदस्यता बनाएं , अगला . क्लिक करें और समाप्त करें ।
एक बार प्रारंभिक स्नैपशॉट लागू होने के बाद, रिकॉर्ड को अपडेट करने के लिए प्रकाशक पर नीचे दिए गए कथन को चलाएँ।
update TBL_EMP set Emp_Fname = 'Amanda' where empid = 1
अब, सब्सक्राइबर डीबी पर, अंतिम नाम को अपडेट करने के लिए नीचे दिए गए स्टेटमेंट को चलाएँ।
update TBL_EMP set Emp_Lname = 'A' where empid = 1
अब, प्रकाशक डेटाबेस और सब्सक्राइबर डेटाबेस दोनों में एक ही प्रतिकृति चक्र के भीतर एक ही पंक्ति को संशोधित किया गया है।
ट्रैकिंग विकल्प के अनुसार हम सेट करते हैं यानी पंक्ति-स्तरीय ट्रैकिंग, परिवर्तन को एक विरोध माना जाता है और मर्ज एजेंट के चलने पर संघर्ष तालिका में लॉग किया जाएगा।
आपके द्वारा बनाए गए प्रकाशन पर नेविगेट करें और सदस्यता देखने के लिए प्रकाशन का विस्तार करें। सदस्यता पर राइट-क्लिक करें, सिंक्रनाइज़ेशन स्थिति देखें चुनें और प्रारंभ करें क्लिक करें।
मर्ज एजेंट के सफलतापूर्वक चलने के बाद, सब्सक्राइबर के पास जाएं और नीचे दिए गए कथन का उपयोग करके डेटा की जांच करें।
use sub_db select * from TBL_EMP where empid = 1
हम देख सकते हैं कि प्रकाशक की ओर से किए गए परिवर्तन की जीत हुई है और ग्राहक के परिवर्तन की हार हुई है।
विरोध की जानकारी विरोध तालिका में संग्रहीत की जाती है और इसे विरोध दर्शक में देखा जा सकता है।
प्रकाशक पर नेविगेट करें, उस पर राइट-क्लिक करें और विरोध देखें चुनें।
विरोध तालिका का चयन करें और विवरण देखने के लिए ठीक क्लिक करें।
ट्रैकिंग स्तर बदलना
आइए अब हम ट्रैकिंग स्तर को कॉलम-स्तरीय ट्रैकिंग में बदलते हैं। प्रकाशन पर नेविगेट करें, उस पर राइट-क्लिक करें और प्रकाशक गुण चुनें। आलेख क्लिक करें, तालिका चुनें, आलेख गुण क्लिक करें, हाइलाइट किए गए तालिका आलेख के गुण सेट करें, स्तंभ-स्तरीय ट्रैकिंग चुनें, ठीक क्लिक करें, ठीक क्लिक करें और फिर पुन:प्रारंभ के लिए चिह्नित करें पर क्लिक करें।
यह सभी ग्राहकों को पुन:प्रारंभ करने के लिए चिह्नित करेगा क्योंकि हम मौजूदा ट्रैकिंग स्तर को एक नए में बदल रहे हैं।
प्रकाशन पर नेविगेट करें, प्रकाशन पर राइट-क्लिक करें और स्नैपशॉट एजेंट की स्थिति देखें . क्लिक करें , प्रारंभ करें . क्लिक करें एक नया स्नैपशॉट उत्पन्न करने के लिए। स्नैपशॉट बनाने के अन्य तरीके भी हैं।
अब, किसी रिकॉर्ड को अपडेट करने के लिए प्रकाशक के विरुद्ध नीचे दिए गए कथन को चलाएँ।
update TBL_EMP set Emp_Fname = 'Amanda' where empid = 2
अब, अंतिम नाम अपडेट करने के लिए सब्सक्राइबर डीबी के सामने नीचे दिए गए स्टेटमेंट को चलाएँ।
update TBL_EMP set Emp_Lname = 'A' where empid = 2
मर्ज एजेंट को मैन्युअल रूप से चलाएँ। भले ही हमने दो अलग-अलग कॉलम अपडेट किए हों और ट्रैकिंग लेवल को कॉलम लेवल पर सेट किया हो, फिर भी मुझे रिकॉर्ड में विरोध दिखाई दे रहा है।
हम विरोध व्यूअर में विवरण देख सकते हैं। मौजूदा ट्रैकिंग स्तर को बदलने से काम नहीं चला। इसलिए, मैंने प्रकाशन को फिर से कॉन्फ़िगर किया, प्रारंभिक स्नैपशॉट बनाने से पहले ट्रैकिंग स्तर को कॉलम-स्तरीय ट्रैकिंग पर सेट किया। एक स्नैपशॉट बनाया गया और प्रकाशन में एक ग्राहक जोड़ा गया।
सब्सक्राइबर पर प्रारंभिक स्नैपशॉट लागू होने के बाद, प्रकाशक डेटाबेस में निम्नलिखित कथन चलाएँ।
update TBL_EMP set Emp_Fname = 'Amanda' where empid = 3
ग्राहक डेटाबेस में निम्नलिखित कथन चलाएँ।
update TBL_EMP set Emp_Lname = 'A' where empid = 3
मर्ज एजेंट को मैन्युअल रूप से चलाएँ। अब, ग्राहक डेटाबेस में, TBL_EMP तालिका को क्वेरी करें।
प्रकाशक और ग्राहक के अपडेट एक विरोध के रूप में योग्य नहीं हैं क्योंकि दोनों अलग-अलग कॉलम पर हैं, और ट्रैकिंग स्तर कॉलम-स्तरीय ट्रैकिंग पर सेट है। विरोध तालिका में कोई विरोध लॉग नहीं किया गया है, प्रकाशक और ग्राहक दोनों पर अलग-अलग कॉलम पर अपडेट खो नहीं गए हैं।
आइए हम प्रकाशक और ग्राहक पर एक ही कॉलम को अपडेट करें।
प्रकाशक डेटाबेस के विरुद्ध निम्नलिखित कथन निष्पादित करें।
use pub_db update TBL_EMP set Emp_Lname = 'B' where empid = 1
सब्सक्राइबर डेटाबेस के विरुद्ध निम्नलिखित कथन निष्पादित करें।
use sub_db update TBL_EMP set Emp_Lname = 'C' where empid = 1
मर्ज एजेंट चलाएँ और सब्सक्राइबर पर TBL_EMP तालिका को क्वेरी करें। सब्सक्राइबर पर अपडेट खो गया है और विरोध लॉग हो गया है।
प्रदर्शन:
जब बड़े अपडेट होते हैं तो पंक्ति-स्तरीय ट्रैकिंग की तुलना में कॉलम-स्तरीय ट्रैकिंग के साथ प्रदर्शन ओवरहेड हो सकता है। लेकिन मेरे मामले में, मैंने बड़े अपडेट के मामले में पंक्ति-स्तर और स्तंभ-स्तरीय ट्रैकिंग दोनों के लिए सिंक्रनाइज़ेशन समय में कोई अंतर नहीं देखा क्योंकि तालिका संरचना में सरल हो सकती है (यानी बहुत कम कॉलम) और ग्राहक और दोनों प्रकाशक एक ही SQL सर्वर इंस्टेंस पर हैं।
नोट:
- डिफ़ॉल्ट रूप से, मर्ज प्रतिकृति कॉन्फ़िगर होने पर यह हमेशा पंक्ति-स्तरीय ट्रैकिंग होती है।
- ट्रैकिंग स्तर विकल्प एक तालिका पर निर्भर करता है। तो, आपके पास एक टेबल पर एक रो-लेवल और दूसरी टेबल पर एक कॉलम लेवल हो सकता है।
- ये विकल्प केवल तभी मदद करते हैं जब किसी अपडेट के आधार पर किसी विरोध का पता चलता है, उसका समाधान नहीं।
- यदि मौजूदा ट्रैकिंग स्तर को बदलना काम नहीं करता है तो प्रकाशन को फिर से कॉन्फ़िगर करें।
- अपनी व्यावसायिक आवश्यकताओं के अनुसार ट्रैकिंग स्तर सेट करें।