2016-09-06 11 views
0

Unten ist mein Code, der die Synchronisierung zwischen zwei SQL Server 2008 ausführt. Das Programm synchronisiert erfolgreich Daten zwischen den zwei Servern ohne Problem. Das Problem ist jedoch, dass ich in den Logs, die ich während dieses Vorgangs erstelle, eine sehr große Anzahl von Transaktionen feststellen kann, die von Server2 zu Server1 gehen - immer in dieser Richtung und immer sehr ähnlich. Um herauszufinden, warum dies geschieht, möchte ich eine andere Protokolldatei erstellen, die die tatsächlichen Zeilendaten aufzeichnet, die jedes Mal, wenn das Skript die beiden Server synchronisiert, von einem Server auf einen anderen kopiert werden. Gibt es eine Möglichkeit, dies mit Sync Framework zu tun, oder wäre es besser, dafür ein anderes Dienstprogramm in SQL Server zu verwenden? Ich bin mit Datenbanken nicht sonderlich vertraut, daher wäre die einfachste und einfachste Lösung für mich die ideale Lösung.Verfolgen von Änderungen in Microsoft Sync Framework

//Connection string to the client (what the data flows INTO) 
SqlConnection clientConnection = new SqlConnection("Data Source=OMITTED;Initial Catalog=OMITTED;Integrated Security=SSPI"); 

//Connection string to the database (what the data flows FROM) 
SqlConnection serverConnection = new SqlConnection("Data Source=OMITTED;Initial Catalog=OMITTED;Integrated Security=SSPI"); 

//Create a sync orchestrator 
SyncOrchestrator syncOrchestrator = new SyncOrchestrator(); 

//Set local provider of orchestrator to a sync provider (S2) 
syncOrchestrator.LocalProvider = new SqlSyncProvider("OMITTED", clientConnection); 

//Set remote provider of orchestrator to a server sync provider (S1) 
syncOrchestrator.RemoteProvider = new SqlSyncProvider("OMITTED", serverConnection); 

//Set the direction of sync session to UPload and Download 
syncOrchestrator.Direction = SyncDirectionOrder.UploadAndDownload; 

//Subscribe for errors that occur when applying changes to the client 
((SqlSyncProvider)syncOrchestrator.LocalProvider).ApplyChangeFailed += new EventHandler<DbApplyChangeFailedEventArgs>(Program_ApplyChangeFailed); 

//Execute the synchronization process 
SyncOperationStatistics syncStats = syncOrchestrator.Synchronize(); 

//Access specific information about the given file 
FileInfo myFile = new FileInfo(LogFilePath); 

//If the log file does not yet have any data (it's blank), include some header information 
//Otherwise, just append the file with new data 
if (!(myFile.Length > 0)) 
{ 
    string header = "Run Time,Changes Uploaded,Changes Downloaded"; 
    string data = syncStats.SyncStartTime + "," + syncStats.UploadChangesTotal + "," + syncStats.DownloadChangesTotal; 

    LogFileText.Add(header); 
    LogFileText.Add(data); 
} 
else 
{ 
    string data = syncStats.SyncStartTime + "," + syncStats.UploadChangesTotal + "," + syncStats.DownloadChangesTotal; 
    LogFileText.Add(data); 
} 

Antwort

1

, wenn Sie einen Handler für ChangesSelected oder ChangesApplied erstellen, es werde ein Datensatz dort sein, dass die tatsächlichen Daten enthält, die ausgewählt oder angelegt wurde.

+0

Sie sagen, dass ich einen benutzerdefinierten Event-Handler dafür erstellen und auf einige Objektinformationen von Sync Framework zugreifen könnte oder dass dies bereits ein verfügbares Element bei der Verwendung von Sync Framework ist, die ich nur dem Code hinzufügen muss? –

+0

das ist sofort verfügbar. Sie müssen nur den Event-Handler schreiben ... – JuneT

Verwandte Themen