REPROCESSO

Válido Para

Replicat

Descrição

Use o parâmetro REPERROR para controlar como o Replicat responde aos erros. A resposta padrão do Replicat para qualquer erro é terminar.

Você pode usar uma instrução REPERROR para tratar a maioria dos erros de maneira padrão, enquanto usa uma ou mais outras instruções REPERROR para tratar erros específicos de maneira diferente. Por exemplo, você pode ignorar erros de registro duplicado, mas encerrar o processamento em todos os outros casos.

Você pode usar REPERROR globalmente (na raiz do arquivo de parâmetros) para afetar todas as instruções MAP que o seguem ou pode usá-lo em uma instrução MAP para afetar as tabelas especificadas nessa instrução. O uso de REPERROR em uma instrução MAP permite tratar erros de uma maneira específica para cada thread de um Replicat coordenado.

Usando o tratamento de erros no nível de registro

Todas as opções do REPERROR, exceto TRANSDISCARD e TRANSEXCEPTION, aplicam uma ação de tratamento de erros em resposta a uma operação SQL individual em um registro individual. Outros registros sem erros na mesma transação são processados conforme configurado nas instruções MAP e em outros parâmetros no arquivo de parâmetros, conforme aplicável.

Usando o Tratamento de Erros no Nível da Transação

As opções TRANSDISCARD, TRANSEXCEPTION e ABEND aplicam uma ação de tratamento de erros a uma transação inteira. O erro de acionamento pode ocorrer em um registro individual na transação ou na operação de commit. (Os erros de commit não têm um registro específico associado a eles.) Estas opções podem ser utilizadas para:

As opções TRANSDISCARD e TRANSEXCEPTION são mutuamente exclusivas.

Efeito de Outros Parâmetros nas Opções no Nível da Transação

TRANSDISCARD e TRANSEXCEPTION respeitam os limites da transação de origem; no entanto, a presença de BATCHSQL, GROUPTRANSOPS ou MAXTRANSOPS no arquivo de parâmetros pode afetar a lógica ou o resultado do tratamento de erros, porque eles alteram os limites da transação.

Efeito de BATCHSQL e GROUPTRANSOPS

BATCHSQL ou GROUPTRANSOPS (o padrão) agrupam operações SQL de diferentes transações em transações maiores para melhorar o desempenho, mantendo a ordem transacional. Quando esses parâmetros estão em vigor e ocorre qualquer erro, o Replicat tenta primeiro resolvê-los inserindo um modo de processamento alternativo (consulte a documentação desses parâmetros). Se o erro persistir, TRANSDISCARD ou TRANSEXCEPTION entrará em vigor e o Replicat será revertido para o modo de processamento de origem da seguinte forma:

  1. Ele faz rollback da transação agrupada ou em matriz.

  2. Ele repete a transação ofensiva uma operação SQL por vez, usando os mesmos limites de transação da transação de origem.

  3. Ele executa a lógica de descarte (TRANSDISCARD) ou o mapeamento de exceções (TRANSEXCEPTION). (Consulte essas descrições de opções para obter mais detalhes.)

  4. Ele retoma o modo BATCHSQL ou GROUPTRANSOPS após a conclusão do tratamento de erros TRANSDISCARD.

Efeito de MAXTRANSOPS

A integridade do tratamento de erros no nível da transação TRANSDISCARD e TRANSEXCEPTION pode ser afetada negativamente pela definição do parâmetro MAXTRANSOPS. MAXTRANSOPS faz com que o Replicat divida transações de origem replicadas muito grandes em transações menores quando as aplica ao destino.

A lógica TRANSDISCARD e TRANSEXCEPTION faz com que o Replicat faça rollback para o primeiro registro após o último commit bem-sucedido. Isso pode ou não ser o início real da transação ofensiva. Depende se essa transação foi dividida e partes dela estão nas transações confirmadas anteriormente. Se esse for o caso, o Replicat não poderá aplicar a ação TRANSDISCARD ou TRANSEXCEPTION à transação inteira como ela foi emitida na origem, mas apenas à parte que foi submetida a rollback do destino.

Se você usar MAXTRANSOPS, certifique-se de que ele esteja definido com um valor maior que a maior transação que você espera que seja tratada por TRANSDISCARD e TRANSEXCEPTION. Isso garantirá que as transações não sejam divididas em transações menores no alvo.

Efeito das Opções no Nível da Transação nas Estatísticas

A saída de comandos informativos, como STATS REPLICAT, mostrará o número total de registros na transação que foi processada pela lógica TRANSDISCARD ou TRANSEXCEPTION. Esse número pode refletir o seguinte:

O processo Replicat é encerrado com erros causados pelo processamento de descarte (TRANSDISCARD) ou mapeamento de exceções (TRANSEXCEPTION).

Obtendo Mais Informações sobre o Tratamento de Erros

Consulte Gerenciar Erros na Documentação de Microsserviços do Oracle GoldenGate para obter mais informações sobre como configurar o tratamento de erros para Extract e Replicat.

Consulte "TABLE | MAP" para obter mais informações sobre o parâmetro MAP.

Padrão

TRANSABORT para deadlocks; ABEND para todos os outros

Sintaxe

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 }

Opções de Especificação de Erro

DEFAULT

Define uma resposta global para todos os erros, exceto aqueles para os quais as instruções REPERROR explícitas são especificadas.

DEFAULT2

Fornece uma ação padrão de backup quando a resposta para DEFAULT é definida como EXCEPTION. Use DEFAULT2 quando uma instrução MAP de exceções não for especificada para uma instrução MAP para a qual os erros são antecipados.

<SQL_error>

Um número de erro SQL. Pode ser um erro de nível de registro ou um erro de nível de commit se estiver usando TRANSDISCARD e TRANSEXCEPTION.

<user_defined_error>

Um erro definido pelo usuário especificado com a opção RAISEERROR de uma cláusula FILTER em uma instrução MAP.

Opções de Resposta de Erro

ABEND

Reverte a transação e encerra o processo anormalmente. ABEND é o padrão.

DISCARD

Registra a operação de infração no arquivo de descarte, mas continua processando a transação e as transações subsequentes.

EXCEPTION

Trata a operação que causa um erro como uma exceção, mas processa operações sem erros na transação normalmente. Use essa opção em conjunto com uma instrução MAP de exceções ou para trabalhar com a opção MAPEXCEPTION de MAP. Por exemplo, você pode mapear colunas de instruções de atualização com falha para uma tabela de "atualizações ausentes". No arquivo de parâmetros, especifique a instrução MAP de exceções após a instrução MAP para a qual o erro é antecipado.

EXCEPTION aplica o tratamento de exceções apenas a uma operação SQL individual em um registro individual. Para aplicar o tratamento de exceções a toda a transação, use a opção TRANSEXCEPTION.

Observação: Quando o recurso CDR (Conflict Detection and Resolution) está ativo, ele trata automaticamente todas as operações que causam erros como exceções se existir uma instrução MAP de exceções para a tabela afetada. Nesse caso, REPERROR com EXCEPTION não é necessário, pois AUTOCDR não é compatível com REPERROR e, portanto, REPERROR será ignorado para tabelas com AUTOCDR ativado. Use REPERROR com outras opções para tratar conflitos que o CDR não pode resolver ou para conflitos que você não deseja que o CDR trate.

IGNORE

Ignora o erro.

RETRYOP [MAXRETRIES <n>]

Repete a operação ofensiva. Use a opção MAXRETRIES para controlar o número de novas tentativas. Por exemplo, se uma tabela estiver fora de extensões, RETRYOP com MAXRETRIES fornecerá tempo para adicionar extensões para que a transação não falhe. O Replicat é encerrado após o número especificado de MAXRETRIES.

TRANSABORT [, MAXRETRIES <n>] [, DELAYSECS <n> | DELAYCSECS <n>]

Aborta a transação e reposiciona para o início da transação. Esta sequência continua até que o(s) registro(s) seja(m) processado(s) com êxito ou MAXRETRIES expire. Se MAXRETRIES não estiver definido, a ação TRANSABORT será executada em loop contínuo.

Use uma das opções DELAY para atrasar a nova tentativa. DELAYSECS <n> define o atraso em segundos e o padrão é 60 segundos. DELAYCSECS <n> define o atraso em centissegundos.

A opção TRANSABORT é útil para tratar timeouts e deadlocks em bancos de dados que suportam essas condições.

TRANSDISCARD

Descartar toda a transação de origem se qualquer operação dentro dessa transação, incluindo a operação de commit, causar um erro de Replicat listado na especificação de erro REPERROR. O processo Replicat aborta a transação e, se o erro ocorreu em um registro, grava esse registro no arquivo de descarte. Em seguida, o processo Replicat reproduz a transação e grava todos os registros no arquivo de descarte, incluindo o registro de commit. O processo Replicat terá término anormal em erros que são causados pelo processamento de descarte.

Se o registro descartado já tiver sido mapeado para um registro de destino, o Replicat o gravará no arquivo de descarte no formato de destino; caso contrário, ele será gravado no formato de origem. A própria transação repetida é sempre gravada no formato de origem.

O TRANSDISCARD suporta erros de nível de registro, bem como erros de commit.

As informações adicionais estão no início deste tópico.

TRANSEXCEPTION

Se um erro especificado com REPERROR ocorrer em qualquer registro de uma transação, executará o mapeamento de exceções para cada registro da transação de acordo com sua especificação de mapeamento de exceções correspondente, conforme definido por uma cláusula MAPEXCEPTION ou EXCEPTIONSONLY em uma instrução MAP de exceções. Se algum registro não tiver uma especificação de mapeamento de exceções correspondente ou se houver um erro ao gravar na tabela de exceções, o Replicat será encerrado com uma mensagem de erro.

Quando um erro é encontrado e o TRANSEXCEPTION está sendo usado, o Replicat aborta a transação e, se o erro ocorreu em um registro, grava esse registro no arquivo de descarte. O processo Replicat repete a transação e examina os registros de origem para localizar as especificações de mapeamento de exceções e, em seguida, as executa.

O TRANSEXCEPTION suporta erros de nível de registro, bem como erros de commit. Para tratar erros no nível de registro (para operações SQL individuais), sem afetar operações sem erros na mesma transação, use a opção EXCEPTION em uma instrução MAP.

PROCEDURE,[ABEND IGNORE DISCARD]

Use PROCEDURE para configurar o comportamento do Replicat quando ocorrer um erro de replicação de procedimento. Por padrão, o Replicat terá ABEND quando ocorrer um erro de replicação de procedimento.

A opção IGNORE ignora a chamada que falhou. A opção DISCARD prepara os erros descartados na fila de erros de aplicação no banco de dados de destino. Esses erros podem ser reexecutados ou excluídos posteriormente.

RESET

Use uma instrução REPERROR RESET para remover regras de tratamento de erros especificadas nos parâmetros REPERROR anteriores e aplicar o tratamento de erros padrão a todas as instruções MAP que se seguem.

Exemplos de Uso do REPERROR Globalmente

Esses exemplos mostram REPERROR como usado na raiz do arquivo de parâmetros para definir regras globais de tratamento de erros. Você pode substituir qualquer uma ou todas essas regras para qualquer tabela ou tabelas fornecidas usando REPERROR em uma instrução MAP. Consulte "Exemplos de Uso do REPERROR Globalmente e em uma Instrução MAP".

Exemplo 1

O exemplo a seguir demonstra como interromper o processamento da maioria dos erros, mas ignorar os erros de registro duplicado.

REPERROR (DEFAULT, ABEND)
REPERROR (-1, IGNORE)

Exemplo 2

O exemplo a seguir chama uma instrução MAP de exceções criada para tratar erros na tabela de contas. Os erros na tabela de produtos fazem com que o Replicat termine de forma anormal porque uma instrução MAP de exceções não foi definida.

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'));

Exemplo 3

O seguinte aplica regras de erro para a primeira instrução MAP e, em seguida, restaura o padrão de ABEND para a segunda.

REPERROR (-1, IGNORE)
MAP sales.product, TARGET sales.product;
REPERROR RESET
MAP sales.account, TARGET sales.account;

Exemplo 4

O seguinte descarta o registro infrator e, em seguida, repete toda a transação se qualquer operação em um registro dentro dele gerar um erro 1403. Outros tipos de erro fazem com que o Replicat tenha término anormal.

REPERROR DEFAULT ABEND
REPERROR 1403 TRANSDISCARD

Exemplo 5

O seguinte descarta o registro infrator e, em seguida, repete toda a transação para procurar uma especificação de mapeamento de exceções que grava na tabela de exceções chamada tgtexception. Outros erros fazem com que o Replicat descarte o registro infrator (se aplicável) e, em seguida, cancele.

REPERROR DEFAULT ABEND
REPERROR 1403 TRANSEXCEPTION
MAP src, TARGET tgt, &
MAPEXCEPTION (TARGET tgtexception, INSERTALLRECORDS, COLMAP (...) );

Exemplos de Uso de REPERROR Globalmente e em uma Instrução MAP

Os exemplos a seguir mostram diferentes maneiras de usar REPERROR em uma instrução MAP em conjunto com uma instrução REPERROR global.

Exemplo 1

REPLICAT <group_name>
REPERROR (<error1> , <response1>)
MAP <src1>, TARGET <tgt1>, REPERROR (<error1>, <response2>);
MAP <src2>, TARGET <tgt2>, REPERROR (<error2>, <response3>);

No exemplo anterior, quando error1 ocorre para a primeira instrução MAP, a ação deve ser response2, não response1, porque uma substituição foi especificada. No entanto, se ocorrer uma error1 para a segunda instrução MAP, a resposta deverá ser response1, a resposta global. A resposta para error2 seria response3, que é específica de MAP.

Exemplo 2

REPLICAT <group_name>
REPERROR (<error1> , <response1>)
MAP <src1>, TARGET <tgt1>, REPERROR (<error2>, <response2>),
REPERROR (<error3>, <response3>);

No exemplo anterior, ao replicar de src1 para src2, todos os erros e ações (1-3) devem ser aplicados, porque todas as instruções REPERROR tratam de erros diferentes (não há substituições específicas de MAP).

Exemplo 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>);

No exemplo anterior, se ocorrer error1 para a primeira instrução MAP, a ação deverá ser response2. Para a segunda, seria response1 (a resposta global) e para a terceira, seria response4 (por causa da segunda instrução REPERROR). Uma instrução REPERROR global se aplica a todas as instruções MAP que a seguem no arquivo de parâmetros até que outra instrução REPERROR inicie novas regras.

Exemplo 4

REPERROR DEFAULT ABEND
REPERROR 1403 TRANSDISCARD.
MAP src, TARGET tgt, REPERROR(600 TRANSDISCARD);

No exemplo anterior, se o erro 600 for encontrado durante a aplicação da tabela de origem src à tabela de destino tgt, toda a transação será gravada para descartar o arquivo. O erro de encontro 1403 também resulta na mesma ação com base na especificação global REPERROR. Nos outros erros, o processo simplesmente descarta apenas o registro ofensivo e, em seguida, termina.