मैंने देखा है कि जब आप एक ट्रांसेक्शनल प्रतिकृति स्थापित करते हैं, तो SQL सर्वर मैन्युअल रूप से पहचान रेंज प्रबंधन सेट करेगा। इसका मतलब यह है कि मेरे सदस्यता डेटाबेस में, जब मैं एक तालिका में एक नया रिकॉर्ड सम्मिलित करने की कोशिश करता हूं, जिसका पीके एक पहचान स्तंभ है, तो यह मुझे एक त्रुटि देगा और कहेगा कि इसने "1", "2" का पीके डालने की कोशिश की "," 3 ", आदि इसका कारण यह है कि सब्सक्राइबर पर सभी पहचान कॉलमों के लिए वर्तमान पहचान मूल्य बीजक मूल्य (आमतौर पर 1) पर रीसेट हो जाता है बजाय इसके कि यह प्रकाशक पर क्या था।
मैं समझता हूं कि SQL सर्वर ऐसा क्यों करता है - आपको सब्सक्राइबर टेबल को केवल पढ़ने के लिए छोड़ना चाहिए। हालाँकि, मेरा परिदृश्य थोड़ा अपरंपरागत है - मैं समय-समय पर प्रतिकृति के माध्यम से अपने ग्राहक को अपडेट करता हूं, उस DB का तत्काल बैकअप बनाता हूं, फिर मैं उस ग्राहक को कुछ अपडेट करना चाहता हूं जिसे WON'T को प्रकाशक के पास वापस नहीं भेजा जाएगा, फिर जब मैं ग्राहक को फिर से अपडेट करने जाता हूं, तो मैं इसके डेटाबेस को पहले के बैकअप से पुनर्स्थापित करता हूं और नवीनतम अपडेट खींचता हूं। क्योंकि मैं इन अद्यतनों के बीच में ग्राहक को अपडेट करना चाहता हूं (यदि आप करेंगे तो अस्थायी अस्थायी), मुझे काम करने के लिए पहचान कॉलम की आवश्यकता है और दोहराया जाने पर 1 पर रीसेट करने की नहीं।
मैंने अपना प्रकाशन सेट करते समय स्वचालित पहचान रेंज प्रबंधन को चालू करने का प्रयास किया, लेकिन जब मुझे प्रकाशन में तालिका जोड़ने की कोशिश की जाती है, तो बस मुझे निम्न त्रुटि मिलती है:
Msg 21231, स्तर 16, राज्य 1, प्रक्रिया sp_MSrepl_addarticle, लाइन 2243
स्वचालित पहचान रेंज समर्थन केवल उन प्रकाशनों के लिए उपयोगी है जो ग्राहकों को अपडेट करने की अनुमति देते हैं।
क्या कोई रास्ता है जिससे मुझे इस समस्या का सामना करना पड़ सकता है? मैं एसक्यूएल सर्वर के लिए इस प्रतिकृति को प्रस्तुत करना चाहता हूं जैसे कि यह केवल सब्सक्राइबर अंत में पढ़ा गया था क्योंकि मैं अपडेट करने की योजना नहीं बनाता हूं जिसे प्रकाशक को वापस धकेल दिया जाएगा , लेकिन मैं अस्थायी अपडेट करना चाहता हूं जो अगले प्रतिकृति से पहले मिटा दिया जाएगा।
मैंने यह भी माना है कि स्नैपशॉट प्रतिकृति मेरे उपयोग पैटर्न के लिए ट्रांसेक्शनल प्रतिकृति की तुलना में अधिक उपयुक्त विधि हो सकती है, लेकिन परेशानी यह है कि स्नैपशॉट प्रतिकृति को पूरे darn DB को हर एक अपडेट भेजने की आवश्यकता होती है ; क्योंकि मैं नवीनतम प्रतिकृति के बाद DB का तत्काल बैकअप लेने की योजना बना रहा हूं, मुझे हर बार उस पूरे स्थानांतरण को करने की आवश्यकता नहीं है; पिछली बार से सिर्फ बदलाव।
Is there any way I can get round this problem?
आप के रूप में सेट पहचान स्तंभ के लिए है नहीं प्रतिकृति के लिए का उपयोग कर sys.sp_identitycolumnforreplication के लिए SQL सर्वर 2005 और ऊपर। जब आप प्रतिकृति के लिए पहचान कॉलम नहीं बदलते हैं तब भी आपको अपने लेखों को फिर से जारी नहीं करना पड़ता है। बस जीयूआई का उपयोग न करें।