6

최근에 SQL Server 2005를 SQL Server 2008 (R2, SP1)로 업그레이드했습니다. 이 업그레이드에는 모든 게시가 "이후의 승"원칙에 따라 기본 충돌 해결 프로그램으로 게시되는 일부 발행물이 포함되었습니다. 스마트 이름은 'Microsoft SQL Server DATETIME (Later Wins) Conflict Resolver'이며 해당 dll 파일은 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. 

, 나는 레지스트리에서 같은 이름, 다른 버전, 두 개의 충돌 해결 프로그램이 있었다 발견 :

th 전자 2005 버전 :

  • 파일 ssrmax.dll,
  • 버전 2005.90.4035.0,
  • cls_id D604B4B5-686B-4304-9613-C4F82B527B10

2008 버전 :

  • 파일 ssrmax.dll,
  • 버전 2009.100.2500.0,
  • 는 77209412-47CF-49AF-A347-DCF7EE481277에게

을 cls_id 그리고 나는 우리의 2008 서버가 '사용 가능한 사용자 지정 해결'(나는 sp_enumcustomresolvers을 실행하여이있어)로 두 번째를 고려하고 있음을 확인. 문제는 두 참조 모두 레지스트리에서 사용할 수 있다는 것입니다. 따라서 이전 발행물은 2005 버전을 참조하고 새로운 출판물은 이전 버전과 실제로 다른 2008 버전을 참조하려고합니다.

그래서 질문은 : 서버에 어떻게이 2 가지 버전 중 하나만 고려해도되고 (물론) 기존 출판물을 삭제하고 다시 만들지 않고 (다음 2 년 동안 우리 삶을 지옥으로 바꿀 필요가 없음) 주).

답변

0

음 .. 아무도 대답이 없습니다. 그러나 나는 그것을 마침내 얻었다 고 생각한다. 추측 하건데 ... 그것은 (대체로) 메타 모델 어딘가에있다!

  • 구독에 항목을 추가 할 때 새 충돌 해결 프로그램이 [배포]의 저장 프로 시저에서 사용하도록 참조합니다.[MSmerge_articleresolver] 그러나, 기존의 구독, 이전 충돌 해결 참조가 게시 데이터베이스, 즉 [sysmergearticles], [sysmergeextendedarticlesview]의 시스템 테이블에 저장된다 [sysmergepartitioninfoview]

그래서 우리는

  • 을 테이블이
  • 한 쪽에서 게시 데이터베이스 메타 모델에 따라 게시가 2005 충돌 해결 프로그램을 참조하는 SQLSERVER 2005로 처음 게시 된 항목입니다. 다른면에서 머신은 새로운 항목에 동일한 항목을 추가하려고합니다. 이번에는 2005 년과는 다른 배포판 데이터베이스에서 사용할 수있는 충돌 해결 프로그램에 대한 기본 참조가 있습니다.

    는이를 설명하기 위해, 당신은

    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 
    

    그래서 내가 배포 데이터베이스에서 참조 또는 게시 데이터베이스에서 참조 중 하나를 업데이트해야한다는 것, 그리고 다음

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

    확인할 수 있습니다. 시도 해보자!

    +0

    완료를 추가 할 수 있으며, 작업 clisd에 가입 기사 sysMergeArticles 테이블의 resolver_clsid 필드 업데이트되었습니다. –

    0

    감사합니다. 구독자의 기사가 서버에서 아무런 의미가없는 Regedit (Regedit)와 비슷한 재 게시자가 있지만 게시에 기사를 추가하려고하면 오류가 발생합니다.

    { 
    
    declare @resolver_clsid nvarchar(50) 
    
    exec sys.sp_lookupcustomresolver N'Microsoft SQL Server DATETIME (Earlier Wins) Conflict Resolver', @resolver_clsid OUTPUT 
    
    
    select @resolver_clsid 
    
    } 
    

    을 얻으려고 한 후 기사에게

    관련 문제