私は、SyncFramework を使用して、ハブ アンド スポーク アーキテクチャ ウェアハウジング アプリケーションでのデータの統合を調整するクライアントを作成しました。同期トランザクションが処理されると、同期フレームワークは指定されたアンカー テーブルを @@DBTS の値で更新し、最後の同期がいつ処理されてサーバーにアップロードされたかを示します。このシナリオの一部として、1 つのクライアントが他のクライアントの代わりにデータを中継できる機能を提供したいと考えています。
これは、あるクライアントが倉庫と連絡を取ることができない場合に使用されます。そのデータベースは、ウェアハウスにアクセスできるクライアントによって取得および同期される可能性があります (DVD または USB フラッシュ メディアのデータベース バックアップとして交換されます)。
この理論の問題点は、スナップショットの取得時に SentAnchor がクライアント データベースに設定されていないと、次にこのプロセスが実行されたときに、データベース全体が 2 回目にレプリケートされることです。
私がやりたいことは、クライアント データベースのスナップショットを取得するときにその SentAnchor を更新して、次にコピーを取得するときに、同期フレームワークが実際にサーバーと通信したかのようにその SentAnchor を認識するようにすることです。
したがって、私の最初の衝動は、単純にアンカー テーブルを更新し、SentAnchor を @@DBTS に設定することでしたが、同期フレームワークが同じ値を別の形式で挿入し、最初に BinaryFormatter を実行するという問題がありました。
したがって、同じ固有の値、異なるヘッダー、および @@DBTS の値で更新しようとすると、SyncFramework は、それ自体に設定されていると予想される形式からそれを変換しようとしてエラーが発生します。
私がやりたいことは、同期フレームワークが使用する @@DBTS と同じ形式の TSQL ステートメントを介して設定することです。バックアップを作成するために既に実行されているステートメントで実行できる場合は、単一の 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 が使用する正しい fromat に同じ値を取得するために必要なものに置き換えます。
サーバーは 2008R2 Express です。