I. Installation de l'environnement de réplication

I-A. Prérequis

Nous partons ici du principe que le Data Propagator (DPR) a été préalablement installé sur votre AS400. Son installation est facilement détectable : il suffit pour cela de vérifier l'existence de la bibliothèque ASN.

I-B. Configuration initiale

Comme je l'ai spécifié plus haut, l'installation initiale de DPR crée une bibliothèque ASN comprenant toutes les tables systèmes utiles. Si cette installation devait s'avérer corrompue ou incomplète, il est toujours possible de lancer manuellement l'ordre de création des tables système via la commande CRDDPRTBL (CReate DataPropagatoR TaBLes).

Ensuite, il faut donner à un utilisateur (vous-même ou un utilisateur générique, ici DPRUSR) les droits suffisants à l'exécution des ordres de réplication :

I-B-1. Sur la machine source

Commande OS400 Descriptif
CRTUSRPPRF USERPRF(DRPUSER) PASSWORD('******') TEXT('Utiliateur anonyme pour réplication') USRCLS(*SYSOPR) SPCAUT(*ALLOBJ *JOBCTL) Création du profil utilisateur
CRTSQLPKG PGM(QDP4/QZSNAPV2)
CRTSQLPKG PGM(QDP4/QZSNANZR)
CRTSQLPKG PGM(QDP4/QZSNSQLF) RDB(HOST_SRC) OBJTYPE(*SRVPGM)
Création des packages utiles
GRTDPRAUT CAPCTLLIB(ASN)USER(DPRUSER) AUT(*REGISTRAR)
GRTDPRAUT CAPCTLLIB(ASN)USER(DPRUSER) AUT(*CAPTURE)
GRTOBJAUT OBJ(ASN/ASNANZ801) OBJTYPE(*SQLPKG) USER(DPRUSER) AUT(*OBJOPR *EXECUTE)
GRTOBJAUT OBJ(ASN/ASN4A804) OBJTYPE(*SQLPKG) USER(DPRUSER) AUT(*OBJOPR *EXECUTE)
GRTOBJAUT OBJ(ASN/ASN4B704) OBJTYPE(*SQLPKG) USER(DPRUSER) AUT(*OBJOPR *EXECUTE)
GRTOBJAUT OBJ(ASN/ASN4C300) OBJTYPE(*SQLPKG) USER(DPRUSER) AUT(*OBJOPR *EXECUTE)
GRTOBJAUT OBJ(ASN/ASN4U804) OBJTYPE(*SQLPKG) USER(DPRUSER) AUT(*OBJOPR *EXECUTE)
Attribution des permissions nécessaires

I-B-2. Sur la machine cible

Commande OS400 Descriptif
CRTUSRPPRF USERPRF(DRPUSER) PASSWORD('******') TEXT('Utiliateur anonyme pour réplication') USRCLS(*SYSOPR) SPCAUT(*ALLOBJ *JOBCTL) Création du profil utilisateur
CRTSQLPKG PGM(QDP4/QZSNAPV2)
CRTSQLPKG PGM(QDP4/QZSNANZR)
CRTSQLPKG PGM(QDP4/QZSNSQLF) RDB(HOST_CIBLE) OBJTYPE(*SRVPGM)
Création des packages utiles
GRTDPRAUT CAPCTLLIB(ASN) USER(DPRUSER) AUT(*SUBSCRIBER)
GRTDPRAUT CAPCTLLIB(ASN) USER(DPRUSER) AUT(*APPLY)
GRTOBJAUT OBJ(ASN/ASNANZ801) OBJTYPE(*SQLPKG) USER(DPRUSER) AUT(*OBJOPR *EXECUTE)
GRTOBJAUT OBJ(ASN/ASN4A804) OBJTYPE(*SQLPKG) USER(DPRUSER) AUT(*OBJOPR *EXECUTE)
GRTOBJAUT OBJ(ASN/ASN4B704) OBJTYPE(*SQLPKG) USER(DPRUSER) AUT(*OBJOPR *EXECUTE)
GRTOBJAUT OBJ(ASN/ASN4C300) OBJTYPE(*SQLPKG) USER(DPRUSER) AUT(*OBJOPR *EXECUTE)
GRTOBJAUT OBJ(ASN/ASN4U804) OBJTYPE(*SQLPKG) USER(DPRUSER) AUT(*OBJOPR *EXECUTE)
Attribution des permissions nécessaires

II. Ajout d'une table source

II-A. Journalisation

Pour que les modifications apportées sur une table puissent être répliquées, elles doivent pouvoir être traquées. Elles doivent donc être journalisées.

Commande OS400 Descriptif
CRTLIB LIB(REPLI) TEXT('Dévolue à la réplication DPR') Création d'une bibliothèque dévolue à la réplication
CRTJRNRCV JRNRCV(REPLI/RCPT_JRN) THRESHOLD(100000) TEXT('RECEPTEUR DE JOURNAL') Création du récepteur de journal
CRTJRN JRN(REPLI/JOURNAL) JRNRCV(REPLI/RCPT_JRN) MNGRCV(*SYSTEM) DLTRCV(*YES) Création du journal
STRJRNPF FILE(REPLI/T_SRC) JRN(REPLI/JOURNAL) IMAGES(*BOTH) OMTJRNE(*OPNCLO) Attache du journal à la table source

Il va falloir maintenant offrir cette table en pâture à la réplication. Dans le jargon de la réplication, ceci s'appelle Publier une table, car on accepte de rendre cette source de données publique à l'environnement de réplication. Ici, c'est la table T_SRC de la bibliothèque (ou base) REPLI qui s'ouvre à l'environnement.

Commande OS400
ADDDPRREG SRCTBL(REPLI/T_SRC)

pour information, la commande supprimant une publication est la suivante :

Commande OS400
RMVDPRREG SRCTBL(REPLI/T_SRC)

Elle ne peut cependant être effectuée que lorsqu'aucune souscription ne pointe sur la publication.

Commande OS400
RMVDPRREG SRCTBL(REPLI/T_SRC)

… et pour lister les publications existantes, il suffit d'interroger la table système :

Commande DB2-400
SELECT SOURCE_OWNER, SOURCE_TABLE
FROM ASN.IBMSNAP_REGISTER

III. Ajout d'une table cible

 

Nous avons vu plus haut qu'une table s'offrant à la réplication le faisait à travers une publication. Si l'on désire souscrire à une de ces publications, on le fait au travers d'une… souscription :

Commande OS400
ADDDPRSUB APYQUAL(MON_QUALIF) SETNAME(TEST_NM) TGTTBL(REPLI/T_CIB) SRCTBL(REPLI/T_SRC) TIMING(*BOTH)

Notons que :

  • pour pouvoir créer une souscription sans spécifier de colonnes, une clé primaire doit exister ;
  • le Qualifier doit avoir le nom spécifié lors du démarrage du processus d'application des modifications, déterminé plus haut ;
  • la matérialisation de la table cible va se faire à l'insu de données qui auraient pu déjà exister dans cette table.

Pour information, la suppression d'une souscription se fait via la commande suivante :

Commande OS400
RMVDPRSUB APYQUAL(MON_QUALIF) SETNAME(TEST_NM) RMVMBRS(*YES) RMVREG(*YES)

… et pour lister les souscriptions existantes, il suffit d'interroger la table système :

Commande DB2-400
SELECT APPLY_QUAL, SET_NAME, SOURCE_SERVER, TARGET_SERVER
FROM ASN.IBMSNAP_SUBS_SET

IV. Démarrage des processus de réplication

Sur le serveur source, nous allons démarrer le processus de capture des informations des journaux :

Commande OS400
STRDPRCAP

Sur le serveur cible, nous démarrerons plus tard le processus d'application des modifications, car il n'est possible de démarrer ce processus que lorsqu'une souscription aura été créée... c'est à la limite du cercle vicieux...

Commande OS400
STRDPRAPY USER(DPRUSER) APYQUAL(MON_QUALIF)

V. Limitations

  • Les ordres DDL ne sont pas répliqués.
  • En environnement OS400, pas d'interface graphique (pas de Replication Center).
  • Une modification de DDL implique une modification de souscription.
  • Matérialisation automatique intempestive en cas de crash => écrasement des données cibles : pas réellement problématique pour une réplication purement monodirectionnelle, mais les performances peuvent en souffrir.

VI. Commandes OS400

Commande Description
ADDDPRREG Ajout d'une publication
ADDDPRSUB Ajout d'une souscription
ADDDPRSUBM Ajout d'un membre dans un paquet de souscriptions
ANZDPR Lancement de l'analyseur
CHGDPRCAPA Modification des attributs de capture
CRTDPRTBL Création des tables système initiales
ENDDPRAPY Arrêt du modificateur de cible
ENDDPRCAP Arrêt de la capture de source
GRTDPRAUT Octroi des droits
INZDPRCAP Réinitialisation de la capture
OVRDPRCAPA Écrasement des paramètres de capture
RMVDPRREG Suppression d'une publication
RMVDPRSUB Suppression d'une souscription
RMVDPRSUBM Suppression d'un paquet de souscriptions
RVKDPRAUT Suppression de droits
STRDPRAPY Démarrage du modificateur de cible
STRDPRCAP Démarrage de la capture de source
WRKDPRTRC Utilisation des traces

VII. Documentation