Discarding record on action DISCARD on error 1403
El otro día a la hora de chequear los procesos de OGG, me encontré con uno de ellos en estado ABENDED. Lo primero que hice para ver el motivo fue verificar dos ficheros de log:
Log genérico $OGG_HOME/ggserr.log
Log a nivel de proceso $OGG_HOME/discard/*txt
Siempre lo consulto en ese orden, ya que algunas veces el error que puede pintar puede ser un error a nivel de base de datos y no haría falta entrar en el log del proceso, como puede ser por ejemplo un tablespace lleno. En este caso, sí que fue necesario entrar a nivel de log de proceso.
Al consultar el error, tuvimos el siguiente error:
No data found Operation failed at seqno 885 rba 182458446
Discarding record on action DISCARD on error 1403
Problem replicating $$$$$ to $$$$.
Record not found Mapping problem with delete record (target format)
SCN:0.56.11.359913...
Este error puede estar provocado por ejemplo porque hay procesos que realizan mucha carga transaccional y las filas ya no se encuentran.
¿Cómo podemos resolverlo? Pues hay que hacerlo con la herramienta logdump "LOCK DUMP UTILITY".
Para ello necesitamos el trail file que se ha quedado el proceso junto con el código RBA. En la propia consola de ogg lanzamos un “info <process_name>”
GGSCI ($$$$ as c##ggate@$$$/$$$) 249> info $$$$$
REPLICAT $$$$$ Last Started 2023-12-05 08:59
Status ABENDED Checkpoint Lag 18:37:17 (updated 00:02:56 ago)
Log Read Checkpoint File /ogg/19c/dirdat/ekXXXXXXX 2023-12-04 14:44:19.000000 RBA 82863866
Salimos de la consola de ogg y entramos en logdump. Dentro de la herramienta tendremos que:
Abrir el Trail file "open"
Configurar la view
GHDR ON: Ver el encabezado
DETAIL ON: Muestra información a nivel de columna
DETAIL DATA: Agrega información hexadecimal y ASCII a nivel de columna
POS: Para posicionarnos dentro del Trail file
Logdump 28 >open /ogg/19c/dirdat/ekXXXXXXXXX
Current LogTrail is /ogg/19c/dirdat/ekXXXXXXXXX
Logdump 29 >ghdr on
Logdump 30 >detail on
Logdump 31 >detail data
Logdump 32 >pos 82863866
Una vez configurada la vista, ejecutamos el comando n para ver el detalle del registro que falla ( Ahí podemos ver que es una operación delete)
Logdump 155 >n
Hdr-Ind : E (x45) Partition : . (x0c) UndoFlag : . (x00) BeforeAfter: B (x42) RecLength : 195 (x00c3) IO Time : 2023/12/04 14:50:34.000.000 IOType : 3 (x03) OrigNode : 255 (xff) TransInd : . (x01) FormatType : R (x52) SyskeyLen : 0 (x00) Incomplete : . (x00) AuditRBA : 208113 AuditPos : 70928308 Continued : N (x00) RecCount : 1 (x01)
2023/12/04 14:50:34.000.000
Delete Len 195 RBA 82863866 Name: XXXXXX (TDR Index: 48)
Before Image: Partition x0c G m 0000 0c00 0000 0800 3633 3036 3036 3438 0100
0a00 | ........63060648.... 0000 0600 4249 524f 464c 0200 0500 0000 0100 4303
| ....BIROFL........C. 0015 0000 0011 0042 4952 4f55 4741 5346 4c20 4249 |
.......BIROUGASFL BI 524f 464c 0400 1000 0000 0c00 4249 524f 5520 4741 |
ROFL........BIROU GA 5320 534c 0500 0400 ffff 0000 0600 0400 ffff 0000 |
SL................ 0700 0a00 0000 0000 0000 0000 0078 0800 0900 0000 |
.............x...... 0500 4249 524f 5509 0009 0000 0005 004c 5a5f 4656 |
..BIROU........LZ_FV Column 0 (x0000), Len 12 (x000c) 0000 0800 3633 3036
3036 3438 | ....63060648 Column 1 (x0001), Len 10 (x000a) 0000 0600 4249
524f 464c | ....BIROFL Column 2 (x0002), Len 5 (x0005) 0000 0100 43 | ...
.C Column 3 (x0003), Len 21 (x0015) 0000 1100 4249 524f 5547 4153 464c
2042 4952 4f46 | ....BIROUGASFL BIROF 4c | L Column 4 (x0004), Len 16
(x0010) 0000 0c00 4249 524f 5520 4741 5320 534c | ....BIROU GAS SL
Column 5 (x0005), Len 4 (x0004) ffff 0000 | .... Column 6 (x0006),
Len 4 (x0004) ffff 0000 | .... Column 7 (x0007), Len 10 (x000a)
0000 0000 0000 0000 0078 | .........x Column 8 (x0008), Len 9 (x0009)
0000 0500 4249 524f 55 | ....BIROU Column 9 (x0009), Len 9 (x0009) 0000 0500 4c5a 5f46 56 |
....LZ_FV Column 10 (x000a), Len 5 (x0005) 0000 0100 41 |
....A Column 11 (x000b), Len 5 (x0005) 0000 0100 32 |
....2 Column 12 (x000c), Len 8 (x0008) 0000 0400 4347 4455 |
....Column 13 (x000d), Len 21 (x0015) 0000 3230 3233 2d31 322d 3031 3a31 343a 3531 3a34 |
..2023-12-01:14:51:4 32 | 2
Volvemos a ejecutar el comando n para ver cual es el siguiente error en el Trail files
Logdump 156 >n
Hdr-Ind : E (x45) Partition : . (x0c) UndoFlag :
. (x00) BeforeAfter: B (x42) RecLength : 198 (x00c6) I
O Time : 2023/12/04 14:50:34.000.000 IOType : 3 (x03) OrigNode :
255 (xff) TransInd : . (x01) FormatType : R (x52) SyskeyLen : 0 (x00)
Incomplete : . (x00) AuditRBA : 208113 AuditPos : 70928964 Continued :
N (x00) RecCount : 1 (x01)
2023/12/04 14:50:34.000.000 Delete Len 198 RBA 126585857 Name: XXXXXXX (TDR Index: 48)
Copiamos el siguiente código RBA. Es importante tenerle presente porque tenemos que configurar nuestro proceso de ogg para que empiece a leer el Trail files desde esta posición.
Salimos de la consola y entramos de nuevo en ogg y seteamos ese código RBA en el proceso
alter replicat <process_replica>, extrba 126585857
start <process_replica>
GGSCI (___ as c##ggate@) 254> alter replicat <process_replica>, extrba 126585857
REPLICAT altered.
GGSCI (___ as c##ggate@) 255> start roci_liq
Sending START request to MANAGER ... REPLICAT ROCI_LIQ starting
¡Espero que os sirva!
Subscribe to my newsletter
Read articles from David Sanz directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
David Sanz
David Sanz
Soy desarrollador, Analista, DBA Oracle y Arquitecto OCI, certificado en OCI Migration and Integration Certified Professional y Certified Architect Associate con más de 15 años de experiencia en plataformas Oracle además de especialista en temas de rendimiento.