6

से अपग्रेड करते समय संघर्ष समाधानकर्ता को अद्यतन करने के लिए कैसे करें हमने हाल ही में SQL Server 2005 से SQL Server 2008 (R2, SP1) में अपग्रेड किया है। इस अपग्रेड में कुछ प्रकाशन शामिल थे, जहां सभी टेबल "बाद के जीत" सिद्धांत के आधार पर एक डिफ़ॉल्ट संघर्ष समाधानकर्ता के साथ प्रकाशित होते हैं। इसका स्मार्ट नाम 'माइक्रोसॉफ्ट एसक्यूएल सर्वर डेटाटाइम (बाद में जीत) संघर्ष रिजॉल्वर' है, और संबंधित डीएलएल फ़ाइल ssrmax.dll है।SQL-Server 2005 से SQL-Server 2008

जैसा कि आप सभी जानते हैं, एक बार टेबल विवाद समाधानकर्ता के साथ प्रकाशित होने के बाद, एक ही संघर्ष समाधानकर्ता का उपयोग इस तालिका का उपयोग करके बाद के प्रकाशनों में किया जाना चाहिए। पर्याप्त मेला, लेकिन, नए प्रकाशनों के लिए पहले प्रकाशित टेबल जोड़ने, और बहुत ही संघर्ष समाधानकर्ता को निर्दिष्ट इस तालिका के लिए इस्तेमाल किया जा करने के लिए जब, हम एक त्रुटि संदेश हो रही है:

use [myDb] 
exec sp_addmergearticle 
    @publication = N'myDb_Pub', 
    @article = N'Tbl_blablabla', 
    @source_owner = N'dbo', 
    @source_object = N'Tbl_blablabla', 
    @type = N'table', 
    @description = N'', 
    @creation_script = N'', 
    @pre_creation_cmd = N'drop', 
    @schema_option = 0x000000000C034FD1, 
    @identityrangemanagementoption = N'none', 
    @destination_owner = N'dbo', 
    @force_reinit_subscription = 1, 
    @column_tracking = N'false', 
    @article_resolver = N'Microsoft SQL Server DATETIME (Later Wins) Conflict Resolver', 
    @subset_filterclause = N'', 
    @resolver_info = N'ddmaj', 
    @vertical_partition = N'false', 
    @verify_resolver_signature = 0, 
    @allow_interactive_resolver = N'false', 
    @fast_multicol_updateproc = N'true', 
    @check_permissions = 0, 
    @subscriber_upload_options = 0, 
    @delete_tracking = N'true', 
    @compensate_for_errors = N'false', 
    @stream_blob_columns = N'false', 
    @partition_options = 0 
GO 

और इस त्रुटि हम मिलता है:

The article '...' already exists in another publication with a different article resolver. 

को समझने के लिए एक ही संघर्ष रिसोल्वर के रूप में 'एक ही संघर्ष समाधानकर्ता' मशीन द्वारा नहीं माना जाता है की कोशिश कर करके, मुझे पता चला एक ही नाम, विभिन्न संस्करणों, रजिस्ट्री में के साथ दो संघर्ष रिसोल्वर थीं:

वें ई 2005 संस्करण:

  • फ़ाइल ssrmax.dll,
  • संस्करण 2005.90.4035.0,
  • cls_id D604B4B5-686B-4304-9613-C4F82B527B10

2008 संस्करण:

  • फ़ाइल ssrmax.dll,
  • संस्करण 2009.100.2500.0,

cls_id 77209412-47CF-49AF-A347-DCF7EE481277 और मैं जाँच की है कि हमारा 2008 सर्वर 'उपलब्ध कस्टम समाधानकर्ता' (मैं sp_enumcustomresolvers चलाकर यह मिल गया) के रूप में एक दूसरे के विचार कर रहा है। समस्या यह है कि रजिस्ट्री में दोनों संदर्भ उपलब्ध हैं, इसलिए मुझे लगता है कि पुराने प्रकाशन 2005 संस्करण का संदर्भ देते हैं, जबकि नए प्रकाशन 2008 संस्करण में रेफर करने का प्रयास करते हैं, जो वास्तव में पिछले एक से अलग है।

तो सवाल यह है कि: मैं सर्वर को इन 2 संस्करणों में से केवल एक को कैसे मान सकता हूं, और यह (निश्चित रूप से) मौजूदा प्रकाशनों को छोड़ने और फिर से बनाने के बिना (जो अगले 2 के लिए हमारे जीवन को नरक में बदल देगा) सप्ताह)।

उत्तर

0

अच्छा .. इसलिए किसी को भी कोई जवाब नहीं मिला। लेकिन मुझे लगता है कि मैं (अंत में) इसे मिला। मान लीजिए ... यह मेटामोडेल में कहीं है (हमेशा की तरह)!

  • सदस्यता में कोई आइटम जोड़ते समय, संग्रहीत प्रक्रिया द्वारा उपयोग किए जाने वाले नए संघर्ष रिज़ॉलर संदर्भ [वितरण] से आते हैं।[MSmerge_articleresolver] तालिका
  • लेकिन, मौजूदा सदस्यता के लिए, पिछले संघर्ष समाधानकर्ता संदर्भ प्रकाशन डेटाबेस, यानी [sysmergearticles], [sysmergeextendedarticlesview] की प्रणाली तालिकाओं में जमा हो जाती है, और [sysmergepartitioninfoview]

तो हमारे पास है एक तरफ SQLSERVER 2005 के साथ प्रकाशित एक आइटम प्रारंभिक, जहां प्रकाशन 2005 डेटाबेस रिज़ॉल्यूवर का संदर्भ देता है, प्रकाशन डेटाबेस मेटामोडेल के अनुसार। दूसरी तरफ, मशीन एक ही आइटम को नए प्रकाशन में जोड़ने का प्रयास करेगी, इस बार विघटन डेटाबेस में उपलब्ध संघर्ष रिज़ॉल्वर के डिफ़ॉल्ट संदर्भ के साथ, जो वास्तव में 2005 से अलग है ....

इसे दर्शाने के लिए, आप निम्न

USE distribution 
go 
SELECT article_resolver, resolver_clsid 
    FROM [MSmerge_articleresolver] WHERE article_resolver like '%Later Wins%' 
    GO 

तो जांच कर सकते हैं,

USE myPublicationDatabase 
go 
SELECT article_resolver, resolver_clsid 
    FROM [sysmergearticles] WHERE article_resolver like '%Later Wins%' 
    GO 
SELECT article_resolver, resolver_clsid 
    FROM [sysmergeextendedarticlesview] WHERE article_resolver like '%Later Wins%' 
    GO 
SELECT article_resolver, resolver_clsid 
    FROM [sysmergepartitioninfoview] WHERE article_resolver like '%Later Wins%' 
    GO 

तो ऐसा लगता है कि मैं या तो वितरण डेटाबेस में संदर्भ या प्रकाशन डेटाबेस में संदर्भ अद्यतन करना चाहिए। आइए इसे एक बार आज़माकर देखते हैं!

+0

किया जोड़ सकते हैं, और काम कर रहे। –

0

धन्यवाद, फिर से प्रकाशक पर कुछ ऐसा था जहां ग्राहक लेख में सीएलएसआईडी था जिसने सर्वर पर कोई समझ नहीं ली (रेजीडिट के साथ देखा) लेकिन जब प्रकाशन में लेख जोड़ने की कोशिश की गई तो त्रुटि उत्पन्न होगी।

clisd से सदस्यता लेख के लिए sysMergeArticles तालिका के resolver_clsid क्षेत्र अपडेट किया गया यह

{ 

declare @resolver_clsid nvarchar(50) 

exec sys.sp_lookupcustomresolver N'Microsoft SQL Server DATETIME (Earlier Wins) Conflict Resolver', @resolver_clsid OUTPUT 


select @resolver_clsid 

} 

पाने के लिए कोशिश कर रहा था और उसके बाद लेख

संबंधित मुद्दे