Uso de EXCEPTIONSONLY

EXCEPTIONSONLY es válido para un par de tablas de origen y destino con nombre explícito y asignadas de uno a uno en una sentencia MAP; es decir, no puede haber comodines. Para utilizar EXCEPTIONSONLY, cree dos sentencias MAP para cada tabla de origen para la que desee utilizar EXCEPTIONSONLY en el destino:

Para obtener más información sobre estos parámetros, consulte Referencia de parámetros y funciones para Oracle GoldenGate.

En este caso, se han creado cuatro columnas adicionales, además de las mismas columnas que contiene la propia tabla:

DML_DATE
OPTYPE
DBERRNUM
DBERRMSG

Para rellenar la columna DML_DATE, la función de conversión de columna @DATENOW se utiliza para obtener la fecha y hora de la operación fallida y el resultado se asigna a la columna. Para rellenar las otras columnas adicionales, la función @GETENV se utiliza para devolver el tipo de operación, el número de error de la base de datos y el mensaje de error de la base de datos.

La opción EXCEPTIONSONLY de la sentencia MAP de excepciones hace que la sentencia se ejecute solo después de una operación fallida en la tabla de origen. Evita que todas las operaciones se registren en la tabla de excepciones.

El parámetro INSERTALLRECORDS hace que todas las operaciones con fallos de la tabla de origen especificada, independientemente del tipo de operación, se registren en la tabla de excepciones como inserciones. Nota: No puede haber restricciones de clave primaria ni de índice único en la tabla de excepciones. Las violaciones de unicidad son posibles en este escenario y generarían errores.

Ejemplo 9-21 EXCEPTIONSONLY

En este ejemplo se muestra cómo utilizar REPERROR con EXCEPTIONSONLY y una sentencia MAP de excepciones. En este ejemplo solo se muestran los parámetros relacionados con REPERROR; otros parámetros no relacionados con el manejo de errores también son necesarios para Replicat.

REPERROR (DEFAULT, EXCEPTION)
MAP ggs.equip_account, TARGET ggs.equip_account2,
COLMAP (USEDEFAULTS);
MAP ggs.equip_account, TARGET ggs.equip_account_exception,
EXCEPTIONSONLY,
INSERTALLRECORDS
COLMAP (USEDEFAULTS,
DML_DATE = @DATENOW (),
OPTYPE = @GETENV ('LASTERR', 'OPTYPE'),
DBERRNUM = @GETENV ('LASTERR', 'DBERRNUM'),
DBERRMSG = @GETENV ('LASTERR', 'DBERRMSG'));

En este ejemplo, el parámetro REPERROR se define para el manejo de errores DEFAULT, y la opción EXCEPTION hace que el proceso Replicat trate las operaciones fallidas como excepciones y continúe el procesamiento.