4D v16

REPLICATE

Accueil

 
4D v16
REPLICATE

REPLICATE  


 

 

REPLICATE liste_répliquée
FROM ref_table
[WHERE critère_recherche]
[LIMIT {nombre_entier | ref_langage_4d}] 
[OFFSET {nombre_entier | ref_langage_4d}]
FOR REMOTE [STAMP] {nombre_entier | ref_langage_4d}
[, LOCAL [STAMP] {nombre_entier | ref_langage_4d}]
[{REMOTE OVER LOCAL | LOCAL OVER REMOTE}]
[LATEST REMOTE [STAMP] ref_langage_4d
[, LATEST LOCAL [STAMP] ref_langage_4d]]
INTO {liste_cible | ref_table(nom_sql_1,...,nom_sql_N)};

La commande REPLICATE vous permet de répliquer les données d’une table d’une base A dans celles d’une table d’une base B. Par convention, la base sur laquelle est exécutée la commande est nommée "base locale" et la base de laquelle les données sont répliquées est nommée "base distante". 

Cette commande peut être utilisée uniquement dans le cadre d’un système de réplication de base. Pour que le système fonctionne, la réplication doit avoir été activée côté base distante et côté base locale et chaque table impliquée doit comporter une clé primaire. Pour plus d’informations, reportez-vous à la section Réplication via le SQL.

Note : Si vous souhaitez mettre en place un système de synchronisation complète, reportez-vous à la description de la commande SYNCHRONIZE.

Passez dans liste_répliquée une liste de champs (virtuels ou classiques) séparés par une virgule. Les champs doivent appartenir à la table ref_table de la base distante.
La clause FROM doit être suivie d’un argument de type ref_table permettant de désigner la table de la base distante depuis laquelle répliquer les données des champs liste_répliquée

Note : Les champs virtuels de la table distante ne pourront être stockés que dans des tableaux de la base locale.

La clause optionnelle WHERE permet d’appliquer un filtre préalable aux enregistrements de la table dans la base distante ; seuls les enregistrements qui satisfont au critère_recherche sont pris en compte par la commande.

4D récupère ensuite les valeurs des champs liste_répliquée pour tous les enregistrements désignés par la clause FOR REMOTE STAMP. La valeur passée dans cette clause peut être soit :

  • une valeur de type entier long > 0 : dans ce cas, les enregistrements dont la valeur du marqueur __ROW_STAMP est supérieure ou égale à cette valeur sont récupérés.
  • 0 : dans ce cas, tous les enregistrements dont la valeur du marqueur __ROW_STAMP est différente de 0 sont récupérés. A noter que les enregistrements existant éventuellement avant l’activation de la réplication ne seront donc pas pris en compte (leur valeur de __ROW_STAMP = 0).
  • -1 : dans ce cas, tous les enregistrements de la table distante sont récupérés, autrement dit tous les enregistrements dont la valeur du marqueur __ROW_STAMP >= 0. A la différence du cas précédent, tous les enregistrements de la table, y compris les enregistrements existant éventuellement avant l’activation, seront pris en compte.
  • -2 : dans ce cas, tous les enregistrements supprimés de la table distante (après activation de la réplication) sont récupérés, autrement dit tous les enregistrements dont la valeur du marqueur __ROW_ACTION = 2.

Enfin, vous pouvez appliquer à la sélection obtenue les clauses optionnelles OFFSET et LIMIT :

  • Lorsqu’elle est passée, la clause OFFSET permet d’exclure les N premiers enregistrements de la sélection (N étant la valeur passée à la clause).
  • Lorsqu’elle est passée, la clause LIMIT permet de restreindre la sélection aux M premiers enregistrements (M étant la valeur passée à la clause). Si la clause OFFSET a également été passée, la clause LIMIT est appliquée à la sélection obtenue après exécution de OFFSET.

Une fois l’ensemble des clauses appliquées, la sélection résultante est envoyée à la base locale.

Les valeurs récupérées sont directement écrites dans la liste_cible de la base locale ou dans les champs classiques définis par nom_sql de la table ref_table de la base locale. L’argument liste_cible peut contenir soit une liste de champs standard, soit une liste de tableaux du même type que les champs distants (mais pas une combinaison des deux). Si la destination de la commande est une liste de champs, les enregistrements cibles seront automatiquement créés, modifiés ou supprimés en fonction de l’action stockée dans le champ virtuel __ROW_ACTION. 

Vous résolvez les conflits pour les enregistrements répliqués qui existent déjà dans la base cible (clés primaires identiques) à l’aide des clauses de priorité REMOTE OVER LOCAL et LOCAL OVER REMOTE :

  • Si vous passez l’option REMOTE OVER LOCAL ou omettez la clause de priorité, tous les enregistrements source (base distante) désignés par la clause FOR REMOTE STAMP remplacent les enregistrements cible (base locale) s'ils existent déjà -- qu'ils aient été modifiés ou non d'un côté comme de l'autre. Dans ce cas, il est inutile de passer la clause LOCAL STAMP car elle est ignorée.
  • Si vous passez l’option LOCAL OVER REMOTE, la commande tient compte du marqueur local (LOCAL STAMP). Dans ce cas, les enregistrements cible (base locale) dont la valeur de marqueur est inférieure ou égale à celle qui est passée dans LOCAL STAMP ne sont pas remplacés par les enregistrements source (base distante).  Par exemple, si vous passez 100 dans LOCAL STAMP, tous les enregistrements de la base locale dont le marqueur est <=100 ne seront pas remplacés par les enregistrements équivalents de la base distante. Ce principe permet de préserver les données modifiées localement et de réduire la sélection d’enregistrements à répliquer dans la table locale.
  • Si vous passez les clauses LATEST REMOTE STAMP et/ou LATEST LOCAL STAMP, 4D retourne dans les variables ref_langage_4d correspondantes les valeurs des derniers marqueurs des tables distante et locale. Ces informations sont utiles si vous souhaitez automatiser la gestion de la procédure de synchronisation. Ces valeurs correspondent à la valeur des marqueurs juste après la fin de l’opération de réplication : si vous les utilisez dans une instruction REPLICATE ou SYNCHRONIZE ultérieure, vous n’avez pas besoin de les incrémenter, ils le sont automatiquement avant d’être retournés par la commande REPLICATE.

Si l’opération de réplication de déroule correctement, la variable système OK prend la valeur 1. Vous pouvez contrôler cette valeur depuis une méthode 4D. 

Si des erreurs se produisent durant l’opération de réplication, l’opération est stoppée à la première erreur rencontrée. La dernière variable source (si elle a été définie) est valorisée avec le marqueur de l’enregistrement dans lequel l’erreur s’est produite. La variable système OK prend la valeur 0. L’erreur générée peut être interceptée par une méthode de gestion d’erreurs installée par la commande APPELER SUR ERREUR

Note : Les opérations effectuées par la commande REPLICATE ne tiennent pas compte des contraintes d’intégrité des données. Cela signifie par exemple que les règles de clés étrangères, d’unicité, etc. ne sont pas vérifiées. Si les données reçues peuvent remettre en cause l’intégrité des données, vous devez les vérifier à l’issue de l’opération de réplication. Le moyen le plus simple est de verrouiller via le langage 4D ou le langage SQL les enregistrements devant être modifiés.



Voir aussi  

Réplication via le SQL
SYNCHRONIZE

 
PROPRIÉTÉS 

Produit : 4D
Thème : Commandes SQL
Nom intl. : REPLICATE

 
HISTORIQUE 

 
UTILISATION DE L'ARTICLE

4D - Référence SQL ( 4D v16)