Недавно мы обновили 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 года:
версия 2008 года:
И я проверил, что наш сервер 2008 рассматривает второй как «доступный настраиваемый преобразователь» (я получил это, запустив sp_enumcustomresolvers). Проблема в том, что обе ссылки доступны в реестре, поэтому я предполагаю, что старые публикации ссылаются на версию 2005 года, а новые публикации пытаются ссылаться на версию 2008 года, которая действительно отличается от предыдущей.
Так вот вопрос: как сделать так, чтобы сервер учитывал только одну из этих 2-х версий, и это (конечно) без необходимости сбрасывать и пересоздавать существующие публикации (что превратило бы нашу жизнь в ад на ближайшие 2 недели ).