2012-03-15 2 views
0

J'utilise ApexSQL Diff API pour synchroniser les bases de données serveur et client avec différentes origines d'identité. Après la synchronisation, je réinitialise les deux bases de données.Synchroniser les bases de données puis resemencer sans condition de concurrence

Il existe une condition de concurrence. Si le serveur ajoute de nouvelles lignes après la synchronisation mais avant de les réimprimer, il aura un mauvais identifiant. ApexSQL gère ses propres connexions de base de données, donc je ne peux pas synchroniser à l'intérieur d'une transaction.

Exemple:

  1. Reseed base de données client à 1000.
  2. base de données du serveur Reseed à 0.
  3. Ajouter trois lignes au client. Ils ont l'ID 1000,1001,1002.
  4. Ajoutez trois lignes au serveur. Ils ont ID 0,1,2.
  5. Synchroniser. Le serveur a maintenant des lignes avec l'ID 0,1,2,1000,1001,1002.
  6. L'ajout des lignes du client a implicitement réensemencé le serveur à 1003.
  7. Une ligne est ajoutée au serveur par un autre processus. Il a l'ID 1003.
  8. Le client réinitialise le serveur à 3 ... trop tard!

Répondre

0

Nous y sommes allés avec des ID négatifs pour les clients, parant ainsi réensemencement le serveur :-)

Questions connexes