Usando EXCEPTIONSONLY

EXCEPTIONSONLY é válido para um par de tabelas de origem e destino que são explicitamente nomeadas e mapeadas uma para uma em uma instrução MAP; ou seja, não pode haver curingas. Para usar EXCEPTIONSONLY, crie duas instruções MAP para cada tabela de origem para a qual você deseja usar EXCEPTIONSONLY no destino:

Para obter mais informações sobre esses parâmetros, consulte Referência de Parâmetros e Funções do Oracle GoldenGate.

Nesse caso, quatro colunas extras foram criadas, além das mesmas colunas que a própria tabela contém:

DML_DATE
OPTYPE
DBERRNUM
DBERRMSG

Para preencher a coluna DML_DATE, a função de conversão de coluna @DATENOW é usada para obter a data e a hora da operação com falha e o resultado é mapeado para a coluna. Para preencher as outras colunas extras, a função @GETENV é usada para retornar o tipo de operação, o número de erro do banco de dados e a mensagem de erro do banco de dados.

A opção EXCEPTIONSONLY da instrução MAP de exceções faz com que a instrução seja executada somente após uma operação com falha na tabela de origem. Isso impede que todas as operações sejam registradas na tabela de exceções.

O parâmetro INSERTALLRECORDS faz com que todas as operações com falha da tabela de origem especificada, independentemente do tipo de operação, sejam registradas na tabela de exceções como inserções. Observação: Não pode haver restrições de chave primária ou índice exclusivo na tabela de exceções. Violações de exclusividade são possíveis neste cenário e gerariam erros.

Exemplo 9-21 EXCEPTIONSONLY

Este exemplo mostra como usar REPERROR com EXCEPTIONSONLY e uma instrução MAP de exceções. Este exemplo mostra apenas os parâmetros que se relacionam com REPERROR; outros parâmetros não relacionados ao tratamento de erros também são necessários 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'));

Neste exemplo, o parâmetro REPERROR é definido para o tratamento de erros DEFAULT, e a opção EXCEPTION faz com que o processo Replicat trate operações com falha como exceções e continue o processamento.