@@ DBTS и BInaryFormatter - PullRequest
       24

@@ DBTS и BInaryFormatter

1 голос
/ 04 января 2012

Я написал клиент, который использует 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.

1 Ответ

3 голосов
/ 06 января 2012

проблема с настройкой SentAnchor заключается в том, что вы можете пропустить загрузку изменений.установив значение, вы фактически сообщили Sync Framework, что оно отправило изменения до этого значения @@ DBTS.

Я предлагаю вам изучить использование SqlSyncProvider.

...