Я написал клиент, который использует SyncFramework для координации консолидации данных в приложении хранилища с концентратором и распределенной архитектурой.
При обработке транзакций синхронизации среда синхронизации обновляет указанную таблицу привязок значением @@ DBTS, указывающим, когда была обработана и загружена последняя синхронизация на сервер.
Я хотел бы предложить в рамках этого сценария возможность позволить одному клиенту передавать данные от имени одного из других.
Это будет использоваться в тех случаях, когда один клиент может не иметь возможности связаться со складом; его база данных может быть извлечена и синхронизирована клиентом, который имеет доступ к хранилищу (заменяется резервной копией базы данных на DVD или USB-носителе).
Проблема этой теории заключается в том, что без установки SentAnchor в клиентской базе данных при получении моментального снимка при следующем выполнении этого процесса вся база данных реплицируется во второй раз.
Что я хотел бы сделать, так это когда я получаю снимок клиентской базы данных, обновляю ее SentAnchor, чтобы в следующий раз, когда я получу копию, среда синхронизации узнает свой SentAnchor , как если бы она имела на самом деле общался с сервером.
Таким образом, мой первый импульс состоял в том, чтобы просто обновить таблицу привязки, установить SentAnchor на @@ DBTS, однако проблема в том, что инфраструктура синхронизации вставляет то же значение в другом формате, сначала запускает его через BinaryFormatter.
То же самое внутреннее значение, разные заголовки, и когда я пытаюсь просто обновить значение @@ DBTS, SyncFramework выдает ошибку, пытаясь преобразовать его обратно в формат, который он сам установил.
То, что я хотел бы сделать, это установить через оператор TSQL, тот же формат для @@ DBTS, который использует каркас синхронизации; Я не хочу писать приложение для выполнения одного оператора SQL, если это можно сделать в операторе, уже выполняемом для создания резервной копии.
Что-то вроде ...
USE MyDB
GO
BACKUP DATABASE MyDb
TO DISK = 'F:\01032012MyDb.bak'
WITH FORMAT,
NAME = '20120103 Full Backup of MyDb'
GO
UPDATE Anchor SET SentAnchor = @@DBTS
GO
По существу, замена @@ DBTS выше на все, что необходимо для получения того же значения в правильном формате, который будет использовать SyncFramework.
Серверы 2008R2 Express.