3

동기화 프레임 워크를 사용하여 데이터베이스를 서버에 동기화하는 데스크톱 클라이언트가 있습니다. 가끔씩 테이블을 변경하는 "정리"문제가 발생합니다.변경 내용 추적, 테이블 앵커가 작동하지 않는 문제, 아이디어를 정리했습니다.

나는 약간의 연구를 수행했으며 테이블에 앵커를 재설정 한 다음 다시 동기화하는 코드를 제공하는 인터넷 게시물을 발견했습니다. 이는 테이블을 다시 다운로드하여 문제를 해결하도록하기위한 것입니다. "= 동기화에 :: =

catch (SyncException ex) 
      { 
       Exception ex2 = ex.InnerException; 
       if (ex2.Message.Contains("cleaned up")) 
       { 
        try 
        { 
         syncStats = syncAgent.Synchronize(true); 
         //pass in true so removes anchors 
        catch (Exception anothererror) 
        { 
         //This will hit with another error equaling “Cleaned-up” on a table. 
        } 
       } 

= 동기화 에이전트 :: =

public SyncStatistics Synchronize(bool reinit) 
     { 
      if (!reinit) 
       return base.Synchronize(); 
      try 
      { 
       ClientSyncProvider sqlCeProvider; 
       sqlCeProvider = (ClientSyncProvider)this.LocalProvider; 

       foreach (SyncTable st in this.Configuration.SyncTables) 
       { 
        if (st.SyncDirection != SyncDirection.Snapshot) 
        { 
         // Null anchors here 
         sqlCeProvider.SetTableReceivedAnchor(st.TableName, new SyncAnchor()); 
        } 
       } 
      } 
      catch (Exception ex) 
      { 
      } 
      return base.Synchronize(); 
     } 

이 코드는 변경 추적을 감지합니다

:

(Source here) 나는 코드과 같이 구현 정리 된 "오류가 발생하면 Synchronize (true)를 호출하고 각 테이블의 모든 앵커를 null로 설정 한 다음 다른 동기화를 호출합니다. 이것은 성공적으로 동기화하기위한 것입니다. 불행히도 이것이 사실이 아니며 "catch (ex anothererror) {"와 다른 "정리 된"예외가 발생합니다.

내가 잘못 가고있는 아이디어가 있습니까?

감사합니다. Kohan.

+0

"문제?" 이러한 문제점에 오류 번호 또는 오류 메시지가 있습니까? 문제를 해결할 때 오류 메시지의 텍스트가 어떻게 든 관련이 있다고 생각하지 않습니까? –

+1

메시지가 "SQL Server 변경 내용 추적 테이블 클라이언트에 대한 추적 정보를 정리했습니다. 이 오류를 복구하려면 클라이언트가 로컬 데이터베이스를 다시 초기화하고 다시 시도해야합니다." "문제"는 다음과 직접적으로 관련이 있습니다. 동기화가 실패하게되고, 도움을 줄 수있는 사람이 누구인지 정확히 알고 있어야합니다. 나는 내가 "문제"를 해결할 수 있기를 바라고 링크 된 게시물의 지침을 따라 갔다. 아아,이 경우가 아니며 단순히 누군가가 왜 그걸 볼 수 있는지 묻고있다. – 4imble

답변

0

어댑터에 문제가있을 수 있습니다. SQL 명령에서 @sync_initialized을 확인합니까?

증분 명령에서 초기화 된 동기화와 초기화되지 않은 동기화를 구분하지 않으면 항상 @last_recieved_anchorCHANGE_TRACKING_MIN_VALID_VERSION 사이의 검사를 수행하므로이 오류가 발생합니다.

내 증분 삽입 명령은이 구조를 따르

IF @sync_initialized = 0 
BEGIN 
//SELECT without limitation by the changetable. 
END 
ELSE 
BEGIN 
//SELECT limited by the changetable. 
IF CHANGE_TRACKING_MIN_VALID_VERSION(object_id(N'[WorkOrder]')) > @sync_last_received_anchor RAISERROR (N'SQL Server Change Tracking has cleaned up tracking information for table ''%s''. To recover from this error, the client must reinitialize its local database and try again',16,3,N'[WorkORder]') 
END 
+0

@ sync_initialized를 검사하는 것이 도움이되지 않는다. 내 상황에서. @ sync_initialized 검사를 포함하는 SqlSyncAdapterBuilder에 의해 생성 된 기본 쿼리를 사용합니다. – Brent

관련 문제