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:
-
La primera, una sentencia
MAPestándar, asigna la tabla de origen a la tabla de destino real. -
La segunda, una sentencia MAP de excepciones, asigna la tabla de origen a la tabla de excepciones (en lugar de a la tabla de destino). Una sentencia
MAPde excepciones se ejecuta inmediatamente después de un error en la tabla de origen para enviar los valores de fila a la tabla de excepciones.Para identificar una sentencia
MAPcomo una sentenciaMAPde excepciones, utilice las opcionesINSERTALLRECORDSyEXCEPTIONSONLY. La sentenciaMAPde excepciones debe seguir inmediatamente la sentenciaMAPnormal que contiene la misma tabla de origen. Utilice una cláusulaCOLMAPen la sentenciaMAPde excepciones si las columnas de origen y de tabla de excepciones no son idénticas o si desea asignar información adicional a columnas adicionales de la tabla de excepciones, como información que se captura mediante funciones de conversión de columnas oSQLEXEC.
Para obtener más información sobre estos parámetros, consulte Referencia de parámetros y funciones para Oracle GoldenGate.
-
Una sentencia
MAPnormal que asigna la tabla de origenggs.equip_accounta su tabla de destinoequip_account 2. -
Sentencia
MAPde excepciones que asigna la misma tabla de origen a la tabla de excepcionesggs.equip_account_exception.
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.