2012-11-21 6 views
0

2 개의 데이터베이스를 동기화하는 응용 프로그램이 있습니다. 중앙 데이터베이스는 Sql Server 2008에서 호스팅되고 로컬 데이터베이스는 Sql Compact 3.5 데이터베이스입니다.Sql Compact 3.5 동기화 실패

가끔씩 동기화 범위에 포함 된 테이블 중 하나의 스키마를 업그레이드해야하며 다시 프로비저닝을 해제하고 프로비저닝하지 않으므로 this 접근 방식을 사용하고 Sql Compact 용으로 다음과 같은 내용이 있습니다.

public void UpdateProvisionSchema(string connString, string scopeName, string newConfigData) 
{ 
    _log.Verbose("UpdateProvisionSchema: " + scopeName); 

    try 
    { 
     string query = string.Format("SELECT [scope_config_id] FROM [scope_info] WHERE [sync_scope_name]='{0}'", scopeName); 
     Guid config_id = (Guid)SqlCompactManager.ExecuteScalar(connString, query); 

     string updateCommand = string.Format("UPDATE scope_config SET [config_data]='{0}' WHERE [config_id] ='{1}'", newConfigData, config_id); 
     SqlCompactManager.ExecuteCommand(connString, updateCommand); 
    } 
    catch (Exception ex) 
    { 
     _log.Error(ex, string.Format("Failed to upgrade schema for scope {0}", scopeName)); 
     throw new Exception(string.Format("Update of provisioned schema failed for scope: {0}", scopeName)); 
    } 
} 

및 수동으로 내 테이블의 구성 범위를 변경합니다. 내가 빈 테이블을 프로비저닝하여 생성하기 때문에 내가 보낸 범위 설정이 올바른 것 같습니다.

동기화 범위에 포함 된 테이블에 데이터 열을 추가했는데 (데이터는 중앙 데이터베이스에서 로컬 데이터베이스로만 다운로드 됨) 이제 ApplyChangeFailed에서 오류가 발생합니다.

Sql Compact 데이터베이스에서 문제가있는 동기화 범위에 포함 된 테이블에는 중앙 테이블에없는 __sysTrackingContext라는 열이 있습니다.

처음으로 테이블을 만들고 프로비저닝 한 다음 2 개의 새로운 열 (BusinessType, HideCommentAndSerialNumber)을 추가했습니다. |

.. :

중앙 : 나는 열을 DbApplyChangeFailedEventArgs보고 살펴보면, 나는 다음을 참조 사업 유형 | HideCommentAndSerialNumber | sync_update_peer_timestamp | sync_update_peer_key | sync_create_peer_timestamp | sync_create_peer_key |

로컬 :

.. | __sysTrackingContext | 사업 유형 | sync_update_peer_key | HideCommentAndSerialNumber | sync_update_peer_timestamp | sync_create_peer_key | sync_create_peer_timestamp |

내가 뭘 잘못하고 있니?

답변

0

문제점을 발견했습니다. 범위는 문제가 발생했을 때만 중앙 데이터베이스에서 로컬 데이터베이스로 데이터를 다운로드합니다.

내가 테이블 스키마를 업데이트 할 때, 나는 한 다음 - 문제는 있었다 두 데이터베이스

에 갱신 프로비저닝 스키마 - 두 데이터베이스에 을 새로운 컬럼의 값을 업데이트 - 두 데이터베이스 에 열을 추가 두 데이터베이스의 열 값을 업데이트하는 스크립트를 실행했습니다. 중앙 데이터베이스에서만 실행하면되고 동기화 중에는 데이터가 클라이언트에 다운로드됩니다.

나는 이것을 바꿨다. 비슷한 시나리오 (이미 동기화 된 범위에있는 테이블의 열 유형 추가/제거/변경)에서도 이전과 동일하게 작동했습니다.

관련 문제