2011-05-02 4 views
0

SQL CE 3.5, Microsoft.Synchronization.Data.SqlServerCe 3.1 및 MSSQL 2008을 사용하고 모든 삽입에 대해 ApplyChangeFailed 이벤트와 동일한 예외가 발생합니다 ServerSyncProvider를 참조하십시오.동기화 오류 : "SQL Server 변경 내용 추적이 정리되었습니다 ..."

"SQL Server 변경 내용 추적은 테이블의 추적 정보를 지 웠습니다. '' '% s' '' '.이 오류를 복구하려면 클라이언트가 다음을 수행해야합니다. 로컬 데이터베이스를 다시 초기화하고 다시 동기화를 시도하십시오. " 행 삽입 할 때

나는 SQL의이 조각을 가지고 : "CHANGE_TRACKING_MIN_VALID_VERSION (OBJECT_ID (N ''[TargetMetricValue] ''))> @sync_last_received_anchor의 RAISERROR (N''SQL 서버 변경 내용 추적이 에 대한 추적 정보를 정리 한 경우 이 오류를 복구하려면 클라이언트가 로컬 데이터베이스를 다시 초기화하고 다시 동기화해야합니다. '', 16,3, N ''[TargetMetricValue] '') "및 "@ sync_last_received_anchor = 0"

CHANGE_TRACKING_MIN_VALID_VERSION (object_id (N "[TargetMetricValue] '))은 146113을 반환하고 위의 예외가 throw됩니다.

ServerSyncProvider 클래스 메서드에서 ApplyChanges는 => serverSyncProvider.ApplyChanges (groupMetadata, dataSet, syncSession)라고합니다.

groupMetadata.NewAnchor = NULL, groupMetadata.TablesMetadata [0] = NULL .LastReceivedAnchor.Anchor, groupMetadata.TablesMetadata [0] = .LastSentAnchor.Ancor 바이트 [] {127,35,6,0,0,0, 0,0}

I는 LastReceivedAnchor가 sync_last_received_anchor 관련된 내기하지만 syncAgent.Synchronize 호출 한 후 유효한 값을 얻을 해달라고() I가 null하세요 GetTableSentAnchor 대한 I 값 바이트를 얻을 GetTableReceivedAnchor SqlCeClientSyncProvider 방법에서도

[] {127,35,6,0,0,0,0,0}.

그렇다면 그 값에 대해 null (0)이 누락 될 수 있습니다. 첫 번째 의견에 따라

UPDATE : 그것은 연결 문자열 등의 app.config에 선언의 xyz.sdf 내가 초기 CE의 DB 파일이

: '이름을 추가 = "인 localConnection"를 ConnectionString = "데이터 소스 = | DataDirectory를 | \ 데이터 \ xyz.sdf, 최대 데이터베이스 크기 = 3968 "의 providerName ="System.Data.SqlServerCe.3.5 " '

그것은이 코드로 초기화 것 :

public SyncAgent() 
    { 
     systemTables = new List<string> {"__syncArticles", "__syncSubscriptions", "__syncTransactions"}; 
     ClientSyncProvider = new SqlCeClientSyncProvider(ConfigurationManager.ConnectionStrings["localConnection"].ConnectionString, true); 
     LocalProvider = ClientSyncProvider; 
     InitializeAllSyncTables(); 
    } 
+0

클라이언트 데이터베이스를 어떻게 초기화 했습니까?로컬 데이터베이스 캐시 마법사를 사용하여 Sync Fx 코드를 생성 했습니까? 아니면 직접 코드를 입력 했습니까? – JuneT

+0

미리 정의 된 sdf 파일입니다. 게시물 업데이트에 대한 자세한 내용이 있습니다. –

+0

여하튼, 보존 및 정리 창을 늘려 보셨습니까? http://social.microsoft.com/Forums/en-US/syncgeneral/thread/cc3d49e0-f188-4d93-b2dd-473137ae9fc6 및 http://www.sqlmonster.com/Uwe/Forum을 이미 보았을 수 있습니다. aspx/sql-server-ce/3911/MSFT-Client-must-reinintialize-database-error –

답변

0

어떤 시체의 경우, 이 문제를 해결하는 방법에 대한 질문이있을 때까지이 게시물 Programming Microsoft Synchronization Services for ADO.NET (Devices)을 확인하십시오. 이는 매우 유용합니다. 또한 동기화 앵커를 찾을 수 없으므로 새 데이터베이스에 대한 일괄 처리가 실패하므로 클라이언트 데이터베이스에서 일괄 처리하기 전에 클라이언트 데이터베이스를 인스턴스화하는 방법을 찾으십시오. 또는 클라이언트 데이터베이스에서 직접 sdf 파일을 다운로드하십시오.

나는 똑같은 시나리오에 직면했다. 나는 두 개의 다른 InitializeNewAnchorCommand() 메소드를 사용했다. 하나는 일괄 처리를위한 코드이고 다른 하나는 코드에서 직접 인스턴스화 된 데이터베이스를 얻을 수있는 원샷 데이터베이스 싱크이다.

여기 제가 가지고있는 것이고, 저에게는 효과적이었습니다.

try 
{ 
    // Synchronize 
    syncStats = syncAgent.Synchronize(); 
    App.SyncStats = syncStats; 
} 
catch (SyncException exception) 
{ 
    if (exception.Message.Contains(" Unable to obtain a new server anchor.")) 
    {      
     syncSnapShotStats = syncSnapShotAgent.Synchronize(); 
     App.SyncStats = syncSnapShotStats; 
    } 
    else 
    { 
     throw; 
    } 
}