REPERROR
Válido para
Replicat
Descripción
Utilice el parámetro REPERROR para controlar cómo responde Replicat a los errores. La respuesta por defecto de Replicat a cualquier error es finalizar de forma anormal.
Puede utilizar una sentencia REPERROR para manejar la mayoría de los errores de forma predeterminada, al tiempo que utiliza una o más sentencias REPERROR para manejar errores específicos de forma diferente. Por ejemplo, puede ignorar los errores de registro duplicado, pero finalizar de forma anormal el procesamiento en todos los demás casos.
Puede utilizar REPERROR de forma global (en la raíz del archivo de parámetros) para afectar a todas las sentencias MAP que lo siguen, o bien puede utilizarlo en una sentencia MAP para afectar a las tablas especificadas en esa sentencia. El uso de REPERROR en una sentencia MAP le permite manejar errores de una forma concreta para cada thread de un Replicat coordinado.
Uso del manejo de errores a nivel de registro
Todas las opciones REPERROR, excepto TRANSDISCARD y TRANSEXCEPTION, aplican una acción de manejo de errores en respuesta a una operación SQL individual en un registro individual. Otros registros sin errores de la misma transacción se procesan según lo configurado en las sentencias MAP y otros parámetros del archivo de parámetros, según corresponda.
Uso del Manejo de Errores a Nivel de Transacción
Las opciones TRANSDISCARD, TRANSEXCEPTION y ABEND aplican una acción de manejo de errores a toda una transacción. El error disparador se puede producir en un registro individual de la transacción o en la operación de confirmación. (Los errores de confirmación no tienen un registro concreto asociado). Estas opciones se pueden utilizar para:
-
Evitar que una transacción de origen completa se replique en el destino cuando se asocia algún error.
-
responder a un error de confirmación cuando la comprobación de restricciones diferidas está activada en el destino.
TRANSDISCARD y TRANSEXCEPTION se excluyen mutuamente.
Efecto de otros parámetros en las opciones de nivel de transacción
TRANSDISCARD y TRANSEXCEPTION respetan los límites de la transacción de origen; sin embargo, la presencia de BATCHSQL, GROUPTRANSOPS o MAXTRANSOPS en el archivo de parámetros puede afectar a la lógica o el resultado del manejo de errores, ya que modifican los límites de la transacción.
Efecto de BATCHSQL y GROUPTRANSOPS
BATCHSQL o GROUPTRANSOPS (valor por defecto) agrupan las operaciones SQL de diferentes transacciones en transacciones más grandes para mejorar el rendimiento, al tiempo que mantienen el orden transaccional. Cuando estos parámetros están en vigor y se produce cualquier error, Replicat primero intenta resolverlo introduciendo un modo de procesamiento alternativo (consulte la documentación de esos parámetros). Si el error persiste, TRANSDISCARD o TRANSEXCEPTION entran en vigor y Replicat vuelve al modo de procesamiento de origen de la siguiente manera:
-
Realiza un rollback de la transacción agrupada o matriz.
-
Replica la transacción ofensiva una operación SQL a la vez, utilizando los mismos límites de transacción que la transacción de origen.
-
Realiza la lógica de descarte (
TRANSDISCARD) o la asignación de excepciones (TRANSEXCEPTION). (Consulte las descripciones de esas opciones para obtener más detalles). -
Reanuda el modo
BATCHSQLoGROUPTRANSOPSdespués de terminar el manejo de erroresTRANSDISCARD.
Efecto de MAXTRANSOPS
La integridad del manejo de errores de nivel de transacción TRANSDISCARD y TRANSEXCEPTION puede verse afectada negativamente por la configuración del parámetro MAXTRANSOPS. MAXTRANSOPS hace que Replicat divida transacciones de origen replicadas muy grandes en transacciones más pequeñas cuando las aplica en el destino.
La lógica TRANSDISCARD y TRANSEXCEPTION hace que Replicat realice un rollback al primer registro después de la última confirmación correcta. Este puede o no ser el comienzo real de la transacción infractora. Depende de si esa transacción se ha dividido y algunas partes de ella están en las transacciones confirmadas anteriormente. Si ese es el caso, Replicat no puede aplicar la acción TRANSDISCARD o TRANSEXCEPTION a toda la transacción, ya que se emitió en el origen, pero solo a la parte a la que se realizó un rollback del destino.
Si utiliza MAXTRANSOPS, asegúrese de que está definido en un valor mayor que la transacción más grande que espera que manejen TRANSDISCARD y TRANSEXCEPTION. Esto garantizará que las transacciones no se dividan en transacciones más pequeñas en el destino.
Efecto de las opciones de nivel de transacción en las estadísticas
La salida de los comandos informativos, como STATS REPLICAT, mostrará el número total de registros en la transacción que ha procesado la lógica TRANSDISCARD o TRANSEXCEPTION. Este número puede reflejar lo siguiente:
-
Replicat escribe todos los registros de la transacción en el archivo de desecho, incluidos los registros que se excluyeron del procesamiento de Oracle GoldenGate mediante una cláusula
FILTERoWHEREen una sentenciaMAP. -
Si una tabla de origen de la transacción tiene varios destinos, la transacción descartada contendrá varias copias de cada registro, una para cada destino.
-
Replicat ignora cualquier sentencia de asignación de excepciones (como se especifica con
EXCEPTIONSONLYoMAPEXCEPTIONen una sentenciaMAP) al descartar la transacción.
El Replicat finaliza de forma anormal en los errores causados por el procesamiento de desecho (TRANSDISCARD) o la asignación de excepciones (TRANSEXCEPTION).
Obtención de más información sobre el manejo de errores
Consulte Gestión de errores en la documentación de microservicios de Oracle GoldenGate para obtener más información sobre la configuración del manejo de errores para Extract y Replicat.
Consulte "TABLE | MAP" para obtener más información sobre el parámetro MAP.
Valor por defecto
TRANSABORT para interbloqueos; ABEND para todos los demás
Sintaxis
REPERROR {
(
{DEFAULT | DEFAULT2 | <SQL_error> | <user_defined_error>},
{ABEND |
DISCARD |
EXCEPTION |
IGNORE |
RETRYOP [MAXRETRIES <n>] |
TRANSABORT [, MAXRETRIES] [, DELAYSECS <n> | DELAYCSECS <n>] |
TRANSDISCARD |
TRANSEXCEPTION
}
{PROCEDURE,[ABEND|IGNORE|DISCARD]}) |
RESET }
Opciones de especificación de error
DEFAULT
Define una respuesta global para todos los errores, excepto aquellos para los que se especifican sentencias REPERROR explícitas.
DEFAULT2
Proporciona una acción por defecto de copia de seguridad cuando la respuesta para DEFAULT se define en EXCEPTION. Utilice DEFAULT2 cuando no se especifique una sentencia MAP de excepciones para una sentencia MAP para la que se anticipan errores.
<SQL_error>
Número de error de SQL. Puede ser un error de nivel de registro o un error de nivel de confirmación si se utilizan TRANSDISCARD y TRANSEXCEPTION.
<user_defined_error>
Error definido por el usuario que se especifica con la opción RAISEERROR de una cláusula FILTER en una sentencia MAP.
Opciones de respuesta de error
ABEND
Realiza un rollback de la transacción y termina el procesamiento de forma anómala. ABEND es el valor por defecto.
DISCARD
Registra la operación ofensiva en el archivo de desecho, pero continúa procesando la transacción y las transacciones posteriores.
EXCEPTION
Maneja la operación que ha provocado un error como excepción, pero procesa operaciones sin errores en la transacción normalmente. Utilice esta opción junto con una sentencia MAP de excepciones o para trabajar con la opción MAPEXCEPTION de MAP. Por ejemplo, puede asignar columnas de sentencias de actualización fallidas a una tabla de "actualizaciones faltantes". En el archivo de parámetros, especifique la sentencia MAP de excepciones después de la sentencia MAP para la que se anticipa el error.
EXCEPTION aplica el manejo de excepciones solo a una operación SQL individual en un registro individual. Para aplicar el manejo de excepciones a toda la transacción, utilice la opción TRANSEXCEPTION.
Nota: Cuando la función Detección y resolución de conflictos (CDR) está activa, trata automáticamente todas las operaciones que causan errores como excepciones si existe una sentencia MAP de excepciones para la tabla afectada. En este caso, REPERROR con EXCEPTION no es necesario, ya que AUTOCDR no es compatible con REPERROR y, por lo tanto, REPERROR se ignorará para las tablas con AUTOCDR activado. Utilice REPERROR con otras opciones para manejar conflictos que CDR no puede resolver o para conflictos que no desea que CDR maneje.
IGNORE
Ignora el error.
RETRYOP [MAXRETRIES <n>]
Vuelve a intentar la operación incorrecta. Utilice la opción MAXRETRIES para controlar el número de reintentos. Por ejemplo, si una tabla está fuera de las extensiones, RETRYOP con MAXRETRIES le da tiempo para agregar extensiones para que la transacción no falle. El Replicat finaliza de forma anormal después del número especificado de MAXRETRIES.
TRANSABORT [, MAXRETRIES <n>] [, DELAYSECS <n> | DELAYCSECS <n>]
Aborta la transacción y se reposiciona al principio de la transacción. Esta secuencia continúa hasta que los registros se procesan correctamente o hasta que caduca MAXRETRIES. Si no se define MAXRETRIES, la acción TRANSABORT realizará un bucle continuo.
Utilice una de las opciones DELAY para retrasar el reintento. DELAYSECS <n> define el retraso en segundos y el valor por defecto es 60 segundos. DELAYCSECS <n> define el retraso en centisegundos.
La opción TRANSABORT es útil para manejar timeouts y interbloqueos en bases de datos que soportan esas condiciones.
TRANSDISCARD
Desecha toda la transacción de origen si alguna operación dentro de esa transacción, incluida la operación de confirmación, provoca un error de Replicat que se muestra en la especificación de error REPERROR. Replicat anula la transacción y, si el error se ha producido en un registro, escribe ese registro en el archivo de desecho. A continuación, Replicat reproduce la transacción y escribe todos los registros en el archivo de desecho, incluido el registro de confirmación. El Replicat finaliza de forma anormal en los errores causados por el procesamiento de descartes.
Si el registro descartado ya se ha asignado datos a un registro de destino, Replicat lo escribe en el archivo de desecho en el formato de destino; de lo contrario, se escribirá en formato de origen. La propia transacción reproducida siempre se escribe en formato de origen.
TRANSDISCARD soporta errores de nivel de registro, así como errores de confirmación.
Al principio de este tema se incluye información adicional.
TRANSEXCEPTION
Si se produce un error especificado con REPERROR en cualquier registro de una transacción, realiza una asignación de excepciones para cada registro de la transacción según su especificación de asignación de excepciones correspondiente, según lo definido por una cláusula MAPEXCEPTION o EXCEPTIONSONLY en una sentencia de excepciones MAP. Si algún registro no tiene una especificación de asignación de excepciones correspondiente o si hay un error al escribir en la tabla de excepciones, Replicat finaliza de forma anormal con un mensaje de error.
Cuando se encuentra un error y se utiliza TRANSEXCEPTION, Replicat aborta la transacción y, si el error se ha producido en un registro, escribe ese registro en el archivo de desecho. Replicat replica la transacción y examina los registros de origen para buscar las especificaciones de asignación de excepciones y, a continuación, las ejecuta.
TRANSEXCEPTION soporta errores de nivel de registro, así como errores de confirmación. Para manejar errores en el nivel de registro (para operaciones SQL individuales), sin afectar a las operaciones sin errores en la misma transacción, utilice la opción EXCEPTION en una sentencia MAP.
PROCEDURE,[ABEND |
IGNORE |
DISCARD] |
Utilice PROCEDURE para configurar el comportamiento de Replicat cuando se produzca un error de replicación de procedimiento. Por defecto, Replicat ejecutará ABEND cuando se produzca un error de replicación de procedimiento.
La opción IGNORE ignora la llamada que ha fallado. La opción DISCARD almacena de forma provisional los errores descartados en la cola de errores de aplicación de la base de datos de destino. Estos errores se pueden volver a ejecutar o suprimir posteriormente.
RESET
Utilice una sentencia REPERROR RESET para eliminar las reglas de manejo de errores especificadas en los parámetros REPERROR anteriores y aplicar el manejo de errores por defecto a todas las sentencias MAP siguientes.
Ejemplos de uso global de REPERROR
Estos ejemplos muestran REPERROR como se utiliza en la raíz del archivo de parámetros para definir reglas globales de manejo de errores. Puede sustituir cualquiera o todas estas reglas para una tabla o tablas determinadas mediante REPERROR en una sentencia MAP. Consulte "Ejemplos de Uso Global de REPERROR y en una Sentencia MAP".
Ejemplo 1
En el siguiente ejemplo, se muestra cómo detener el procesamiento de la mayoría de los errores, pero se ignoran los errores de registro duplicado.
REPERROR (DEFAULT, ABEND)
REPERROR (-1, IGNORE)
Ejemplo 2
En el siguiente ejemplo se llama a una sentencia MAP de excepciones creada para manejar errores en la tabla de cuentas. Los errores en la tabla de productos hacen que Replicat termine de forma anormal porque no se ha definido una sentencia MAP de excepciones.
REPERROR (DEFAULT, EXCEPTION)
REPERROR (DEFAULT2, ABEND)
MAP sales.product, TARGET sales.product;
MAP sales.account, TARGET sales.account;
INSERTALLRECORDS
MAP sales.account, TARGET sales.account_exception,
EXCEPTIONSONLY,
COLMAP (account_no = account_no,
optype = @GETENV ('lasterr', 'optype'),
dberr = @GETENV ('lasterr', 'dberrnum'),
dberrmsg = @GETENV ('lasterr', 'dberrmsg'));
Ejemplo 3
A continuación, se aplican reglas de error para la primera sentencia MAP y, a continuación, se restaura el valor por defecto de ABEND en la segunda.
REPERROR (-1, IGNORE)
MAP sales.product, TARGET sales.product;
REPERROR RESET
MAP sales.account, TARGET sales.account;
Ejemplo 4
Lo siguiente descarta el registro infractor y, a continuación, reproduce toda la transacción si alguna operación de un registro en él genera el error 1403. Otros tipos de error hacen que Replicat finalice de forma anormal.
REPERROR DEFAULT ABEND
REPERROR 1403 TRANSDISCARD
Ejemplo 5
A continuación, se descarta el registro infractor y, a continuación, se reproduce toda la transacción para buscar una especificación de asignación de excepciones que escriba en la tabla de excepciones denominada tgtexception. Otros errores hacen que Replicat descarte el registro ofensivo (si corresponde) y, a continuación, finalice de forma anormal.
REPERROR DEFAULT ABEND
REPERROR 1403 TRANSEXCEPTION
MAP src, TARGET tgt, &
MAPEXCEPTION (TARGET tgtexception, INSERTALLRECORDS, COLMAP (...) );
Ejemplos de uso global de REPERROR y en una sentencia MAP
Los siguientes ejemplos muestran diferentes formas en que REPERROR se puede utilizar en una sentencia MAP junto con una sentencia REPERROR global.
Ejemplo 1
REPLICAT <group_name>
REPERROR (<error1> , <response1>)
MAP <src1>, TARGET <tgt1>, REPERROR (<error1>, <response2>);
MAP <src2>, TARGET <tgt2>, REPERROR (<error2>, <response3>);
En el ejemplo anterior, cuando se produce error1 para la primera sentencia MAP, la acción debe ser response2, no response1, porque se ha especificado una sustitución. Sin embargo, si se produce un error1 para la segunda sentencia MAP, la respuesta debe ser response1, la respuesta global. La respuesta para error2 sería response3, que es específica de MAP.
Ejemplo 2
REPLICAT <group_name>
REPERROR (<error1> , <response1>)
MAP <src1>, TARGET <tgt1>, REPERROR (<error2>, <response2>),
REPERROR (<error3>, <response3>);
En el ejemplo anterior, al replicar de src1 a src2, se deben aplicar todos los errores y acciones (1-3), porque todas las sentencias REPERROR abordan errores diferentes (no hay sustituciones específicas de MAP).
Ejemplo 3
REPLICAT <group_name>
REPERROR (<error1> , <response1>)
MAP <src1>, TARGET <tgt1>, REPERROR (<error1>, <response2>);
MAP <src2>, TARGET <tgt2>, REPERROR (<error2>, <response3>);
REPERROR (<error1> , <response4>)
MAP <src2>, TARGET <tgt2>, REPERROR (<error3>, <response3>);
En el ejemplo anterior, si se produce error1 para la primera sentencia MAP, la acción debe ser response2. Para la segunda sería response1 (la respuesta global) y para la tercera sería response4 (debido a la segunda sentencia REPERROR). Una sentencia REPERROR global se aplica a todas las sentencias MAP que le siguen en el archivo de parámetros hasta que otra sentencia REPERROR inicie nuevas reglas.
Ejemplo 4
REPERROR DEFAULT ABEND
REPERROR 1403 TRANSDISCARD.
MAP src, TARGET tgt, REPERROR(600 TRANSDISCARD);
En el ejemplo anterior, si se encuentra el error 600 al aplicar la tabla de origen src a la tabla de destino tgt, toda la transacción se escribe para desechar el archivo. El error 1403 también provoca la misma acción en función de la especificación global REPERROR. En los otros errores, el proceso simplemente descarta solo el registro ofensivo y luego finaliza de manera anormal.