Как обновить средство разрешения конфликтов при обновлении с SQL-Server 2005 до SQL-Server 2008

Недавно мы обновили SQL Server 2005 до SQL Server 2008 (R2, SP1). Это обновление включало некоторые публикации, где все таблицы публикуются с помощью средства разрешения конфликтов по умолчанию, основанного на принципе «поздние победы». Его интеллектуальное имя — «Microsoft SQL Server DATETIME (поздние победы) разрешения конфликтов», а соответствующий DLL-файл — ssrmax.dll.

Как вы все знаете, как только таблица опубликована с помощью разрешения конфликтов, этот же самый разрешатель конфликтов должен использоваться во всех последующих публикациях, использующих эту таблицу.Справедливо, но при добавлении ранее опубликованных таблиц в новые публикации и указании того же самого разрешения конфликтов будет использоваться для этой таблицы, мы получаем сообщение об ошибке:

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 недели ).

6
задан Philippe Grondier 15 June 2012 в 16:05
поделиться