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:
-
A primeira, uma instrução
MAPpadrão, mapeia a tabela de origem para a tabela de destino real. -
A segunda, uma instrução MAP de exceções, mapeia a tabela de origem para a tabela de exceções (em vez da tabela de destino). Uma instrução
MAPde exceções é executada imediatamente após um erro na tabela de origem para enviar os valores de linha para a tabela de exceções.Para identificar uma instrução
MAPcomo uma instruçãoMAPde exceções, use as opçõesINSERTALLRECORDSeEXCEPTIONSONLY. A instruçãoMAPde exceções deve seguir imediatamente a instruçãoMAPregular que contém a mesma tabela de origem. Use uma cláusulaCOLMAPna instruçãoMAPde exceções se as colunas de origem e tabela de exceções não forem idênticas ou se quiser mapear informações adicionais para colunas extras na tabela de exceções, como informações capturadas por meio de funções de conversão de coluna ouSQLEXEC.
Para obter mais informações sobre esses parâmetros, consulte Referência de Parâmetros e Funções do Oracle GoldenGate.
-
Uma instrução
MAPregular que mapeia a tabela de origemggs.equip_accountpara sua tabela de destinoequip_account 2. -
Uma instrução
MAPde exceções que mapeia a mesma tabela de origem para a tabela de exceçõesggs.equip_account_exception.
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.