Datapropagator : resynchronisation manuelle d'une table

fadace

Procédure permettant d'effectuer une resynchronisation manuelle en utilisant des commandes OS400 de copie, et en forçant le Data Propagator à considérer la synchronisation comme acquise. ?

- Titre : Datapropagator : resynchronisation manuelle d'une table

- Auteur : fadace

- Parution : 2 décembre 2006

- Mise à jour : 20 janvier 2007

- Licence : Copyright ® 2006 Fadace. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Problématique

- II. Hypothèse

- III. Étapes

- IV. Contrôles

I - Problématique

La synchronisation d'une table source à une table cible en utilisant Data Propagator peut durer un temps certain lorsque l'on s'attaque à de gros volumes. Il se peut donc que ce temps soit en inadéquation avec des contraintes de production.

En fait, il y a deux moments durant lesquels ce problème de durée de synchronisation peut paraître.

1. Lors de la première matérialisation de la table sur la cible, lorsque l'applyer est démarré pour la première fois ;

2. Lorsque le DPR ne « retrouve pas ses petits » et qu'il essaie de resynchroniser la table.

Le point 2 ne peut être acceptable sur des tables à forte volumétrie en production : nous ne pouvons en fait accepter le risque qu'une table source soit totalement vidée en pleine activité en attendant une resynchronisation. C'est pour cette raison que sur ce type de table, le processus de Registration sera créé avec un mode Autorefresh à OFF.

Voici donc une procédure à effectuer pas-à-pas afin d'effectuer une resynchronisation manuelle en utilisant des commandes OS400 de copie, et en forçant le Data Propagator à considérer la synchronisation comme acquise.

Dans le cas d'une subsciption à plusieurs membres, il faut appliquer cette procédure sur tous les membres. Dans le cs contraire, on risque de « pourrir » le point de synchronisation et de planter pour le coup le processus de capture (Asn).

II - Hypothèse

Objet

Source

Cible

AS400

DVPHOST1

DVPHOST2

Librairie

LIBSRC

LIBTRG

Fichier

FILESRC

FILETRG

Journal

LIBJRN/JRNSRC

LIBJRN/JRNTRG

Type de réplication

Capture et applyers sur DVPHOST1

Nom de l'applyer

APY_01

Nom du set

A01_S01

Nom de la librairie contenant les tables de change

ASNCD

III - Étapes

Créer la REGISTRATION sur le fichier source, depuis DVPHOST1

ADDPRREG

Créer la subscription et son membre sur le fichier cible, toujours depuis DVPHOST1

ADDPRSUBM

Désactiver l'option full refresh pour chaque table source.

update asn.ibmsnap_register
set disable_refresh = 1
where source_owner = 'LIBSRC'
and source_table = 'FILESRC' ;

Réinitialiser la capture, en utilisant la commande inzdpr

INZDPRCAP JRN(LIBJRN/JRNSRC)

Modifier les points de synchronisation de la table de PRUNE pour chaque membre de la subscription

update asn.ibmsnap_pruncntl
set synchpoint = null, synchtime = null
where apply_qual = 'APY_01'
and set_name = 'A01_S01' ;

update asn.ibmsnap_pruncntl
set synchpoint = x'00000000000000000000', synchtime = CURRENT TIMESTAMP
where apply_qual = 'APY_01'
and set_name = 'A01_S01'  ;

Forcer un signal capstart dans la table afin de commencer la capture dans les tables de changement

insert into asn.ibmsnap_signal (SIGNAL_TIME, SIGNAL_TYPE, SIGNAL_SUBTYPE, SIGNAL_INPUT_IN, SIGNAL_STATE)
(select current timestamp, 'CMD', 'CAPSTART', MAP_ID, 'P'
from asn.ibmsnap_pruncntl
where source_owner = 'LIBSRC'
and source_table = 'FILESRC'
and apply_qual = 'APY_01'
and set_name = 'A01_S01'
and target_owner = 'LIBTRG'
and target_table = 'FILETRG') ;

Exécuter la synchronisation via les commandes de l'iSerie, depuis la source

SAVRSTOBJ

Marquer les souscriptions comme chargées

update asn.ibmsnap_subs_membr
set member_state = 'L'
where apply_qual = 'APY_01'
and set_name = 'A01_S01'  ;

Spécifier le point de synchronisation

update asn.ibmsnap_subs_set
set lastrun = current timestamp, lastsuccess = current timestamp, synchtime = current timestamp, synchpoint = null
where apply_qual = 'APY_01'
and set_name = 'A01_S01'
and activate = 1  ;

Au besoin (si l'option est active, pourquoi s'ennuyer avec cette procédure !), réactiver l'option full refresh pour chaque table source.

update asn.ibmsnap_register
set disable_refresh = 0
where source_owner = 'LIBSRC'
and source_table = 'FILESRC' ;

Démarrer l'applyer

STRDPRAPY APYQUAL(APY_01) TRACE(*ERROR)

IV - Contrôles

Vérifier le contenu de la table asnservice.ibmsna_sbs qui devrait comprendre les informations sur l'applyer.

Si nécessaire, stopper toutes autres activités de transfert (pgm, requêtes…).