Interacciones entre Recuperaciones de una Tabla y DDL

Oracle GoldenGate soporta algunos tipos de dato al identificar la fila modificada del flujo de redo y, a continuación, consultar la tabla subyacente para recuperar las columnas cambiadas. Por ejemplo, las actualizaciones parciales de los LOB están soportadas identificando la fila modificada y la columna LOB del redo log y, a continuación, consultando el valor de la columna LOB para la fila de la tabla base. Se emplea una técnica similar para apoyar el UDT.

Nota: la extracción solo necesita recuperación para UDT cuando no se utiliza el soporte de objeto nativo.

Este soporte basado en recuperación se implementa mediante la emisión de una consulta de flashback a la base de datos basada en el SCN (número de cambio del sistema) en el que se ha confirmado la transacción. La función de consulta de flashback tiene ciertas limitaciones. Algunas operaciones DDL actúan como barreras, de modo que las consultas de flashback para obtener datos antes de estas DDL no se realizan correctamente. Algunos ejemplos de dicho DDL son ALTER TABLE MODIFY COLUMN y ALTER TABLE DROP COLUMN.

Por lo tanto, en los casos en los que hay un retraso de captura de Extract, un DDL intervenido puede provocar que fallen las solicitudes de recuperación de datos antes del DDL. En tales casos, Extract se recupera y recupera la instantánea actual de los datos de la columna modificada. Existen varias limitaciones para este enfoque: en primer lugar, el DDL podría haber modificado la columna que Extract necesita recuperar (por ejemplo, supongamos que el DDL intermedio ha agregado un nuevo atributo al UDT que se está capturando). En segundo lugar, el DDL podría haber modificado una de las columnas que Extract utiliza como identificador de fila lógica. En tercer lugar, se podría haber cambiado el nombre de la tabla antes de que Extract tuviera la oportunidad de recuperar los datos.

Para evitar inconsistencias relacionadas con la recuperación, como estas, tome las siguientes precauciones al modificar las columnas.

  1. Pausar todo DML en la tabla.

  2. Espere a que Extract termine de capturar todo el redo restante y espere a que Replicat termine de procesar los datos capturados de la pista. Para determinar si Replicat ha finalizado, ejecute el siguiente comando hasta que vea un mensaje que indique que no hay más datos que procesar.

    INFO REPLICAT *group*
  3. Ejecute el DDL en el origen.

  4. Reanudar operaciones DML de origen.