allemand   anglais - États-Unis   chinois - simplifié   espagnol   français   hollandais   portugais - ibérique  

Home




Usenet Posting #9 - Trigeminal Software, Inc. (French)


Sujet: INFO: Éclaircissements sur l'illégalité de copier ou de bouger des répliquas.
(Parution initiale, le 4/24/99)
Il y a beaucoup de confusion sur ce sujet et j'espère que ce message expliquera à tout le monde exactement pourquoi il est mauvais de bouger ou de copier des répliquas.

Tout d'abord, je commence par dire que la RÉPLICATION est un outil très efficace qui nous permet de faire des choses qu'il serait autrement impossible de réaliser. Ce message ne cherche pas à démolir la réplication, il est plutôt destiner à faire penser les gens qui utilisent la réplication d'une façon pour laquelle elle ne fut pas conçue... en montrant les raisons pour lesquelles cela est dangereux pour leur application et leur données.

************************************

Le BUT DE LA RÉPLICATION: Si vous avez deux copies, ou plus, d'une base de données JET, elles sont considérées identiques à au plus une synchronisation près. Plusieurs utilisateurs peuvent effectuer un ou des changements sur leur copie propre, mais à la fin, ils atteindront la "convergence" et leur résultat sera le même. Le support est pour des utilisateurs connectés, ou occasionnellement connectés, mais aucunement pour les utilisateurs isolés. La réplication de Microsoft Jet n'a pas de scénario pour les cas où il n'y a pas de véritable connexion directe, indirecte, ou par Internet, point..

************************************

DERRIÈRE LE RIDEAU lors d'un DÉPLACEMENT ou d'un COPIE: Chaque fois que Microsoft Jet ouvre un répliqua, pour quelque raison que ce soit, il y a une vérification quand au nom de la machine et du chemin actuel. En cas de modification, le répliqua se voit attribué un nouveau numéro de  ReplicaID (car des fâcheuses conséquences peuvent se produire si deux répliquas différents possèdent le même numéro de ReplicaID). Ainsi, si vous partez d'un ensemble de quatre répliquas et que vous en déplacez un, Jet pensera qu'il y a maintenant cinq répliquas dans l'ensemble.

Ceci s'applique dans n'importe lequel des scénarios suivants:

1) Copiez le répliqua sur une disquette que vous utiliserez chez vous ou ailleurs


2) Copiez ou déplacez le fichier depuis DOS ou depuis l'Explorer


3) Déplacez le fichier sur un disque ZIP amovible de sorte que vos travaillez sur ce fichier à partir de deux machines, à moins que les deux machines aient exactement le même nom et que le disque soit connu de la même façon, même si le fichier demeure sur le disque.

4) Envoyez le fichier par courrier électronique


5) Toute autre façon que vous pouvez imaginer de copier un fichier, incluant de le télécharger d'Internet ou d'un serveur, etc.

Par contre, cela ne se produit pas dans les scénarios suivants:

1) Utiliser la méthode MoveReplica du TSI Synchronizer ou depuis le menu de commandes du Replication Manager


2) Utiliser le Briefcase Reconciler

Maintenant, cette mauvaise façon de faire est entravée par une bug, une nuisance et par trois problèmes de conception qui peuvent devenir très critiques et devenir la cause de corruption ou de pertes de données.

************************************
BUG #1: Il y a un petit bug isolé dans la manipulation de Jet lorsqu'il gère le changement de ReplicaID pour un répliqua... il n'effectue pas le ménage sur l'information quand à quel Synchroniser doit gérer le dit répliqua. Donc, si vous utiliser  Jet Synchronizier pour une réplication par Internet, ou indirecte, et que vous déplacez cette copie déjà gérée ailleurs, Jet suppose que l'ancien Synchronizer en est toujours le gestionnaire. Si ce n'est pas le cas, il y a risque de problèmes lors de synchronisations subséquentes. Si le répliqua est sans gestionnaire, cela n'est pas un problème, par contre. Ce bug fut confirmé par les gens de Microsoft, mais comme ce bug ne se produit que dans un scénario non supporté, son importance ne fut pas jugée suffisante pour risquer une correction lors d'une révision de service (service release). Une voie d'évitement est de dissocier le répliqua de son gestionnaire, ou de n'utiliser que des répliquas non gérés.

************************************
NUISANCE #1: À chaque copie ou à chaque déplacement, la liste des répliquas s'allonge, d'où un désagrément lorsque vous regardez la dite liste depuis Access Tools|Replication|Synchronize et dans le Replication Manager. Si vous transférez en va et vient, entre deux ordinateurs, vous vous retrouvez avec une multitude de répliquas bidon  "c:\foo\bar.mdb" dans la dite liste. Enlever ces items n'est pas trivial: Jet peut éjecter de la liste un répliqua qu'on désire ouvrir si son répertoire est toujours présent, mais que le répliqua ne s'y trouve plus, et alors Jet peut propager cette information lors de synchronisations... mais il faut le faire pour chaque répliqua bidon... Il y a également d'autres façons, moins parfaites ou moins efficaces que celle-ci.

************************************
PROBLÈME (par conception)  #1: Microsoft Jet 3.5x possède une limite de  64,000 synchronizers qui peuvent être "connus" par un répliqua. Ce n'est généralement pas un problème, mais il faut se rappeler que si vous créez une réplication autrement qu'avec le Synchronizer, alors Jet crée un synchronizer virtuel, ce qui est très utile pour les synchronisations par Internet, par exemple. Vous pouvez ainsi vous retrouver avec 64,000 répliquas invalide et cette limite atteinte génère une situation demandant beaucoup de travail pour être réglé.

************************************
PROBLÈME (par conception) #2: Une erreur de conflit de données se produit lorsque deux utilisateurs modifient le même enregistrement et seul le répliqua perdant, sous Jet 3.5, en devient  conscient. Par contre, si un répliqua qui a perdu le conflit a changé de numéro (entre la détection du conflit et la prochaine synchronisation), ce qui est survient lorsqu'on copie ou déménage le répliqua, nous perdons une partie de l'information qui se serait autrement retrouvée dans les tables de conflits. Cette perte de données est évidemment très sérieuse.

************************************
PROBLÈME (par conception) #3: un Data error se produit lorsque l'intégrité de la base de données est en cause, comme dans le cas où deux utilisateurs utilisent la même clé primaire pour un nouvel enregistrement et essaient alors de se synchroniser. Dans un tel cas, JET cesse la réplication, si une telle erreur est rencontrée, et d'autres enregistrements ne sont pas nécessairement synchronisées tant que le data error n'est pas réglé. Il est difficile de retracer ces Data Error, qui est relié aux répliquas duquel elle origine, sans parler du cas où ce répliqua n'existe plus... Je ne connais qu'une poignée de personnes qui furent capables de résoudre ce problème sans recourir à la solution extrême de dé-repliquer/re-répliquer. Il est important de se rappeler que les Data Errors bloquent la synchronisation si bien que ce ne sont pas tous les répliquas qui reçoivent toutes les informations, vous laissant dans un état d'inconsistance de données. Vous n'avez aucun contrôle sur l'ordonnancement des opérations lorsque cela se produit.

************************************
CODA: Finalement, ce petit scénario, qui ne fut jamais supporté, n'a jamais reçu les tests intensifs des autres scénarios. On peut faire des farces sur les tests que Microsoft fait de ses produits, mais le fait principal c'est que ce scénario ne fut pas testé et qu'en plus des points relevés ci-dessus (que j'ai trouvé, identifié et corrigé depuis plusieurs années déjà), il peut y en avoir encore quelques autres qui demeurent à trouver. Ironiquement, les gens qui critiquent le plus Microsoft pour les bugs dans leur produits sont ceux qui passent souvent  outre ce simple avertissement.

Pour les archives, avant que la réplication pour Jet 3.0 ne soit commercialisée, AUCUN de ces problèmes n'était connu ni compris, NONOBSTANT, j'ai toujours suggéré de ne jamais copier ou de déplacer un répliqua avec des données, car *je* suggère ce comportement à chaque fois qu'un façon de faire n'est pas supportée. En fait, je n'ai jamais créé d'application qui a rencontré n'importe lequel de ces problèmes. Par contre, j'ai été personnellement impliqué dans la récupération de plus de 70 différentes applications, dans les années passées, qui montraient de sérieux problèmes reliés exclusivement à ce problème. Le coût total des implications est élevé, mais il existe des gens pour ignorer cet avis.

************************************
Donc, pourquoi ne pas "être comme Mike" :-) et simplement ne pas essayer de faire des choses qui ne sont pas supportées ni testées, spécialement lorsque de telles choses sont connues pour avoir créer d'importants problèmes?

Back to Usenet Musings


Un problème avec ce site? Contacter le webmaster@trigeminal.com

avec vos commentaires, questions, ou suggestions (en anglais, de préférence).