Lab — Journaling en IBM i (base de HA y CDC)
Objetivo
Crear un journal y receptor, journalizar archivos físicos, generar cambios y verificar que se asentaron. Este es el prerequisito invisible de Quick EDD y Connect CDC.
Tiempo estimado
60 minutos (configuración 30 min + ejercicio 30 min).
Prerequisitos
- •LPAR de práctica accesible.
- •Perfil con autoridad sobre la biblioteca de prueba.
- •Conocer comandos básicos IBM i (ver Cheatsheet).
Conceptos previos
- •Journal (
*JRN) — el "diario" donde se asientan los cambios. - •Journal Receiver (
*JRNRCV) — el archivo físico donde se materializan las entradas. - •Un journal apunta a un único receiver activo, pero puede haber muchos receivers en cadena.
Paso 1 — Crear la biblioteca de prueba
CRTLIB LIB(LABJRN) TEXT('Lab journaling')
Paso 2 — Crear el journal receiver
CRTJRNRCV JRNRCV(LABJRN/RCV0001) THRESHOLD(100000) TEXT('Receiver inicial')
THRESHOLD está en KB; con 100000 (100 MB) es suficiente para el lab.
Paso 3 — Crear el journal
CRTJRN JRN(LABJRN/JRNLAB) JRNRCV(LABJRN/RCV0001) +
MNGRCV(*SYSTEM) DLTRCV(*NO) +
TEXT('Journal del lab')
MNGRCV(*SYSTEM) indica que el OS gestiona el cambio de receiver cuando llega al threshold. DLTRCV(*NO) evita que borre receivers viejos automáticamente (en producción se decide según política).
Paso 4 — Crear un archivo físico de prueba
CRTPF FILE(LABJRN/CLIENTES) RCDLEN(80) TEXT('Tabla de clientes lab')
Ahora sin journaling. Antes de iniciar replicación con Quick EDD o CDC con Connect, hay que cambiarlo.
Paso 5 — Iniciar journaling sobre el archivo
STRJRNPF FILE(LABJRN/CLIENTES) JRN(LABJRN/JRNLAB) +
IMAGES(*BOTH) OMTJRNE(*NONE)
IMAGES(*BOTH) registra imagen antes y después del cambio. Connect CDC requiere *AFTER o *BOTH; con *BEFORE solo no opera.
Paso 6 — Generar cambios
Insertar registros con SQL:
INSERT INTO LABJRN.CLIENTES VALUES('CLI001 - JUAN PEREZ ');
INSERT INTO LABJRN.CLIENTES VALUES('CLI002 - MARIA LOPEZ ');
UPDATE LABJRN.CLIENTES SET CLIENTES = 'CLI001 - JUAN P. ' WHERE SUBSTR(CLIENTES,1,6) = 'CLI001';
DELETE FROM LABJRN.CLIENTES WHERE SUBSTR(CLIENTES,1,6) = 'CLI002';
Paso 7 — Verificar las entradas en el journal
DSPJRN JRN(LABJRN/JRNLAB)
Deben aparecer entradas tipo PT (insert), UB/UP (update before/after), DL (delete). Si las entradas existen, el journaling está operativo y la tabla está lista para replicación con Quick EDD o captura con Connect CDC.
Paso 8 — Detener journaling (cleanup del lab)
ENDJRNPF FILE(LABJRN/CLIENTES)
Paso 9 — Cleanup completo (opcional)
DLTF FILE(LABJRN/CLIENTES)
DLTJRN JRN(LABJRN/JRNLAB)
DLTJRNRCV JRNRCV(LABJRN/RCV0001) DLTOPT(*IGNINQMSG)
DLTLIB LIB(LABJRN)
Validación esperada
- •
DSPFD FILE(LABJRN/CLIENTES)antes del paso 5 muestra "Currently journaled : No". - •Después del paso 5 muestra "Currently journaled : Yes" con journal
LABJRN/JRNLABe imagen*BOTH. - •
DSPJRNdespués del paso 6 muestra al menos 4 entradas (2 PT + 2 actualizaciones + 1 delete; los updates suelen aparecer como par UB/UP).
Errores comunes y cómo resolverlos
| Síntoma | Causa probable | Solución |
|---|---|---|
| CPF7028 "Journal not found" | Biblioteca no en *LIBL o nombre mal | Calificar LIB/JRN o usar ADDLIBLE LABJRN |
| CPF6940 "Authority insufficient" | Perfil sin autoridad sobre objeto/journal | GRTOBJAUT o usar perfil con *ALLOBJ |
| CPF7050 "Journal receiver damaged" | Threshold muy bajo o disco saturado | Aumentar threshold y revisar WRKDSKSTS |
Para Connect CDC
Para usar este journal con Connect CDC, registrar la tabla CLIENTES en el scope del pipeline. La imagen *BOTH (paso 5) es obligatoria. Si solo necesitás cambios "after image" para CDC, podés usar IMAGES(*AFTER). (Fuente: Precisely Help — Set up journaling)
Para Quick EDD
Quick EDD también lee este journal. La diferencia conceptual: Quick EDD replica objetos (no solo cambios de DB), por lo que su scope incluye más allá de las tablas journaled — pero los archivos productivos deben estar journaled para que la replicación tenga commit consistency.