0

次のコードを使用しても、WindowsXP32ビット/SQLServer Express 2008(x86)で復元されたデータベースで、データベースのSyncFramework2.1要素のレプリカキーマップとscope_infoテーブルのscope_id値が変更されないという問題が発生しました。 )。Windows764ビット/SQLServer Express 2008(x86)である他のクライアントでは機能します:

SqlSyncStoreRestore databaseRestore = new SqlSyncStoreRestore(clientConn); databaseRestore.PerformPostRestoreFixup();

サブ質問1:動作しませんが、例外もスローされないため、トラブルシューティングが非常に困難になります。これは、x64コンピューター(Visual Studio x86を使用)で構築した小さなコンソールアプリケーション(ターゲットx86)から実行されます。32/64ビットのものが原因ではないかと思います。どんな手掛かり??しかし、それで、これは私に不思議に思いました:

サブ質問2:「SyncFrameworkのC#のPerformPostRestoreFixup()を使用するのと同等のSQLクエリはありますか?」

私はSyncFrameworkにかなり慣れていませんが、MicrosoftSQLServerデータベースの同期の全体像をまだ完全には理解していません。SyncOrchestrator/SqlSyncProviderコンボが組み込みのSQL変更追跡機能を使用していないことに気づきました。私には信じられないほど驚きました!それは今、私をさらに苦痛な質問に悩まさせました:

サブ質問3:組み込みのSQL Server変更追跡と同期フレームワークは、同期スキームを構築するための2つの完全に独立したプラットフォームですか?私は英語で正しい単語を使用していることを望みます。言い換えれば、彼らのそれぞれは完全にお互いに気づいていませんか?

よろしくお願いします!私はすっごく失われたLOLです!

敬具、

Zyxy

4

3 に答える 3

0

質問1-syncfxトレースを有効にしてみましたか?

[VSプロジェクトのプロパティ]->[ビルド]タブのプラットフォームターゲットは、インストールされているSyncFxのプラットフォームと一致している必要があります。たとえば、x86プラットフォームターゲットにはSyncFxx86が必要です

x86 / x64に不一致がある場合、通常はCOM例外が発生します。

質問2-SQLプロファイラーを実行して、PerformPostRestoreFixupが何であるかを確認できます。ただし、同期メタデータ処理が含まれているため、これを行うフレームワークを使用します。

質問3-SQL変更追跡は単なる変更追跡です。それを使用するには、同期アプリが必要です。

SQL CTは何が変更されたかを追跡し、何が変更されたかを照会できるようにします。それ自体は同期プラットフォームではありません。

Sync Fxと同じように、クエリを実行するには同期アプリが必要です。または、独自のSQLクエリを手動でコーディングして、変更をクエリすることもできます。

SyncFxの古いSQLCeClientSyncProvider/DBServerSyncProvider / Sync Agent(ローカルデータベースキャッシュプロジェクトアイテムで使用されているもの)は、SQLCTを使用できます。

于 2012-11-09T02:06:45.603 に答える
0

更新:値を変更しなかったが、例外もスローしなかった理由は何ですか?以下はおそらく説明です。scope_idが更新されない理由に関する質問に完全に答えることはできませんが、追加のヒントを確実に提供します。

PerformPostRestoreFixup()は、データベース内のすべてのスコープに適用されます。scope_id値を正常に変更した別の(有効な)スコープがデータベースに定義されていました。ただし、2番目のスコープ(scope_idを変更できなかったスコープ)は別のスキーマ(デフォルトの.dboではない)に格納されています。スコープが表示されなかったか、無効と見なされたため、わざわざ通知されなかったと思います。その2番目のスコープのプロビジョニングを解除しようとすると、次のエラーが発生しました。


テーブル'[scope_info]'に'syncScope'という名前の有効なスコープが見つかりません。このスコープが存在し、構成テーブル'[scope_config]'に対応する有効な構成があることを確認してください。

したがって、これら2つの問題の根本的な原因は同じである可能性があります。

2番目のスコープは存在し、selectステートメントを使用してそのdarnscope_idを確認できます。では、構成が有効かどうかをどのように判断できますか?復元が成功した後、突然無効になるのはなぜですか?私はそれを絞り込むと思いますが、私には十分ではありません;-)誰かがひどいLOLを与えた場合に備えて、私は私の発見と解決策を投稿し続けます!冗談ですが、ある日、その日の気分に応じて、誰が助けになるか(または混乱するか)を知っています;-)乾杯!

于 2012-11-20T19:42:47.837 に答える
0

わかりました。JuneTがSyncFx2.1 SDKのドキュメントを教えてくれたおかげで(ここで、または別のディスカッションスレッドで読んだことがありますか?)、まだ試していなかったプロパティがあることに気付きました。Sync Fx 2.0(およびその他?)に非dboスキーマの問題とマルチスコープデータベースの問題があることをオンラインで読んで、私はそれを試してみようと思いました。コンソールアプリに次のC#行を追加するだけで、問題は解決しました。

databaseRestore.ObjectSchema = "syncSchemaName";

JuneTの多くは、最終的にはいくつかの良い読み方を指摘してくれたので、それを答えとしてマークします。どうもありがとう!!

于 2012-11-21T16:58:59.583 に答える