Используйте Sync Framework с отслеживанием изменений SQL 2008 как на локальном, так и на удаленном уровне

Я хочу иметь возможность использовать Microsoft Sync Framework для синхронизации двух баз данных SQL 2008, которые обе используют функцию отслеживания изменений SQL 2008. Один будет сервером, а другой - локальным экземпляром SQLExpress, использующим модель концентратора и луча.

Есть несколько подсказок, что это удалось другим, а именно Синхронизация баз данных SQL Server 2008 через HTTP с помощью WCF и Sync Framework. Однако для этого решения требуется «SqlExpressClientSyncProvider, доступный на сайте проекта MSF Codeplex в качестве поставщика синхронизации клиента». На этот же SqlExpressClientSyncProvider намекают и в другом месте. Однако его либо больше нет, либо он очень хорошо скрывается от моих попыток его найти.

Большинство ссылок и предложений, с которыми я столкнулся при поиске, в конечном итоге указывают на сайт образцов MSDN, на котором есть несколько примеров (например, этот http://code.msdn.microsoft.com/Database-SyncSQL-Server-a9752fac), которые демонстрируют использование инфраструктуры синхронизации с помощью настраиваемого аудита изменений, который добавляет в схему много видимых накладных расходов, таких как таблицы захоронений, триггеры и т. д. Этого я хочу избежать.

Я был бы счастлив получить ссылку на биты для SqlExpressClientSyncProvider, однако я подозреваю, что он создан для работы с MSF 1.0. Если есть способ «MSF 2.1» сделать это через классы SqlProvider или что-то в этом роде, это было бы здорово.


person davidpricedev    schedule 08.11.2011    source источник
comment
какой метод вы выбрали для решения своей проблемы?   -  person Brent    schedule 23.01.2014
comment
@Brent, в конце концов я выбрал собственное решение для синхронизации. Руководства вызвали серьезные проблемы с производительностью, и количество усилий, затраченных на запуск MSF, было втрое больше, чем при написании моего собственного. Однако изучение того, как работает MSF, помогло мне лучше понять проблему.   -  person davidpricedev    schedule 24.01.2014


Ответы (1)


Отслеживание изменений SQL Server поддерживается только в более старом автономном поставщике (SqlCeClientSyncProvider / DbServerSyncProvider), который является теми же поставщиками, которые используются элементом проекта кэша локальной базы данных в Visual Studio.

более новый SqlSyncProvider / SqlCeSyncProvider использует настраиваемый механизм отслеживания, и потребуется большая настройка, чтобы заставить его работать с отслеживанием изменений Sql, за исключением написания собственного настраиваемого поставщика.

SqlExpressClientSyncProvider - это образец поставщика, который с тех пор был удален MS с сайта загрузки.

в этой ссылке все еще есть некоторые фрагменты: http://www.8bit.rs/blog/2009/05/debugging-sql-express-client-sync-provider/

person JuneT    schedule 08.11.2011
comment
То есть вы в основном говорите, что, хотя отслеживание изменений на сервере Sql кажется лучшим способом, которым MicroSoft устарел с версии 2.1? Похоже, что в очень ограниченных примерах, похоже, отсутствуют части и они полагаются на Sync 1.0 SyncAgent и SyncAdapter. Позволяет ли отслеживание изменений сервера Sql изменять динамическую схему? Я реализовал 2.1 с традиционным методом SyncOrchestrator и функциями Deprovision / Re-Provision. Однако раздувание базы данных из-за всех дополнительных таблиц отслеживания и т. Д. Является проблемой SqlExpress для таблиц, с которыми мы синхронизируемся. - person Brent; 23.01.2014
comment
Эта ссылка отличная, единственное место, где я смог найти подходящие примеры. Однако они работают только в двунаправленном режиме, и теперь мне нужно поддерживать разные направления для каждой таблицы. - person Brent; 19.02.2014
comment
направление синхронизации находится на уровне группы синхронизации или области синхронизации. вам следует сгруппировать таблицы со связанным направлением синхронизации в одной группе синхронизации, в противном случае вам придется создать отдельную группу синхронизации для каждой таблицы. - person JuneT; 20.02.2014
comment
re: SQL Change Tracking, он фактически создает системные таблицы, вы просто этого не видите. аналогично, связь с отслеживанием изменений SQL означает, что вы не можете автоматически поддерживать выпуски / разновидности, которые его не поддерживают (например, SQL Azure). - person JuneT; 20.02.2014
comment
Спасибо за направление, у меня было несколько SyncDirection в одной SyncGroup, но все еще не могу работать. Теперь тыкаешься в него больше. В SqlExpressClientSyncProvider используется ли строка Dictionary ‹, SyncAnchor› m_DownloadedTables; иметь значение? Я могу полностью удалить его и привязку к серверу, и он отлично работает в двух направлениях. Только с использованием Sql Server 2008/2012 [Express] - person Brent; 20.02.2014
comment
Знаете ли вы какие-либо примеры Sql CT, которые работают с DownloadOnly или UploadOnly? Я ничего не могу найти в Интернете и не могу получить ничего, кроме двунаправленной работы. - person Brent; 20.02.2014
comment
не знаю, какую ошибку вы получаете, но если двунаправленный работает, загрузка или выгрузка должны работать. внутренне двунаправленный делает то же самое. - person JuneT; 21.02.2014
comment
Понятно! Потратил почти неделю только на получение других SyncDirections. Мне пришлось установить SqlSyncAdapterBuilder.SyncDirection = SyncDirection.Bidirectional для генерации всех команд. Затем я могу установить для каждого SyncTable.SyncDirection значение UploadOnly / DownloadOnly. - person Brent; 21.02.2014
comment
Просто понял, когда у меня было несколько SyncDirections, работающих, мои 3 группы синхронизации фактически все основывались на одной строке. Использование нескольких SyncGroups не удается из-за ограничений внешнего ключа между таблицами в разных группах. Однако многонаправленная синхронизация отлично работает с одной SyncGroup. - person Brent; 27.02.2014