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.
- Lors de la première matérialisation de la table sur la cible, lorsque l'applyer est démarré pour la première fois ;
- 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…).